प्रॉक्सी HTTPS NGINX के साथ HTTP बैकएंड के लिए अनुरोध करता है


30

मैंने अपने बाहरी रूप से दिखने वाले वेबसर्वर बनने के लिए nginx कॉन्फ़िगर किया है जो HTTP पर एक बैकएंड पर बात करता है।

जिस परिदृश्य को मैं प्राप्त करना चाहता हूं वह है:

  1. क्लाइंट HTTP से निगनेक्स के लिए अनुरोध करता है जो एक ही URL पर फिर से HTTPS पर पुनर्निर्देशित होता है
  2. nginx proxies HTTP पर बैकएंड पर अनुरोध करता है
  3. nginx HTTP पर बैकएंड से प्रतिक्रिया प्राप्त करता है।
  4. nginx HTTPS पर क्लाइंट को वापस भेज देता है

मेरा वर्तमान कॉन्फ़िगरेशन (जहां बैकएंड सही तरीके से कॉन्फ़िगर किया गया है) है:

सर्वर {
        80 सुनो;
        server_name लोकलहोस्ट;

        स्थान ~! * {
            प्रॉक्सी_पास http: // बैकएंड;
            xy_redirect http: // backend https: // $ host;
            xy_set_header होस्ट $ होस्ट;
            }
        }

मेरी समस्या क्लाइंट की प्रतिक्रिया है (चरण 4) HTTP पर नहीं HTTPS भेजा जाता है। कोई विचार?

जवाबों:


6

जिस प्रकार के प्रॉक्सी को आप सेट करने का प्रयास कर रहे हैं, उसे रिवर्स प्रॉक्सी कहा जाता है। रिवर्स प्रॉक्सी नग्नेक्स की त्वरित खोज से मुझे यह पृष्ठ मिला:

http://intranation.com/entries/2008/09/using-nginx-reverse-proxy/

एक्स-फॉरवर्ड-फॉर हेडर जैसी कुछ उपयोगी सुविधाओं को जोड़ने के अलावा (जो आपके ऐप को वास्तविक स्रोत आईपी में दृश्यता देगा), यह विशेष रूप से करता है:

proxy_redirect off

सौभाग्य! :)


1
आपकी प्रतिक्रिया के लिए धन्यवाद - लिंक वास्तव में बहुत मददगार था। मुझे लगता है कि मैंने इसे विभाजित करके अपनी समस्या हल कर ली है - मैंने पोर्ट 443 पर HTTPS पोर्ट 80 पर सभी HTTP अनुरोधों के लिए एक रीडायरेक्ट कॉन्फ़िगर किया है। मैंने तब 443 के लिए कॉन्फ़िगरेशन में एक नया सर्वर कॉन्फ़िगर किया था। मैं पहले यह सब करने की कोशिश कर रहा था। उसी जगह।
माइक

35

मैं उत्पादन में निम्नलिखित विन्यास का उपयोग कर रहा हूं

server {
    listen xxx.xxx.xxx.xxx:80;
    server_name www.example.net;

    rewrite ^(.*) https://$server_name$1 permanent;
}

server {
    listen xxx.xxx.xxx.xxx:443;
    server_name www.example.net;

    root   /vhosts/www.example.net;

    ssl                  on;
    ssl_certificate      /etc/pki/nginx/www.example.net.crt;
    ssl_certificate_key  /etc/pki/nginx/www.example.net.key;

    ssl_prefer_server_ciphers on;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
    ssl_dhparam /etc/pki/nginx/dh2048.pem;

    # intermediate configuration. tweak to your needs.
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
    }
}

+1 जोड़ने proxy_set_header X-Forwarded-Proto https;ने मेरे लिए चाल चली।
फैसल फिरोज

-3
server {

    listen 80;
    server_name www.example.net example.net;

   rewrite ^/(.*)$ https://$host$request_uri? permanent; 
}

server {
  listen 443;
  server_name www.example.net example.net;
  .....................
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.