Proxy HTTPS, NGINX ile bir HTTP arka ucuna talep ediyor


30

Nginx, HTTP üzerinden arka uçla konuşabilen, dışarıdan görülebilir web sunucum olacak şekilde yapılandırılmış durumda.

Ulaşmak istediğim senaryo:

  1. Müşteri, aynı URL’ye, ancak HTTPS’ye yönlendiren nginx’e HTTP isteği yapar
  2. nginx vekilleri HTTP üzerinden arka uç talep ediyor
  3. nginx, HTTP üzerinden arka uçtan yanıt alır.
  4. nginx bunu HTTPS üzerinden istemciye geri gönderir.

Geçerli config (arka ucun doğru yapılandırıldığı yer):

sunucu {
        80 dinle;
        server_name localhost;

        konum ~. * {
            proxy_pass http: // arka uç;
            proxy_redirect http: // arka uç https: // $ ana bilgisayar;
            proxy_set_header Ana Bilgisayar $ host;
            }
        }

Benim sorunum istemciye yanıt (adım 4) HTTPS değil HTTP üzerinden gönderiliyor. Herhangi bir fikir?

Yanıtlar:


6

Kurmaya çalıştığınız proxy türüne ters proxy adı verilir. Ters proxy nginx için hızlı bir arama bana bu sayfayı aldı:

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

Bir X-Forwarded-For başlığı gibi bazı faydalı özellikleri eklemenin yanı sıra (uygulamanıza gerçek kaynak IP'ye görünürlük kazandıracak), özellikle şunları yapar:

proxy_redirect off

İyi şanslar! :)


1
Cevabınız için teşekkürler - link gerçekten çok yardımcı oldu. Sanırım sorunumu bölerek çözdüm - 80 numaralı bağlantı noktasındaki tüm HTTP istekleri için 443 numaralı bağlantı noktasındaki HTTPS'ye bir yeniden yönlendirme yapılandırdım. Daha sonra 443 için yapılandırmada yeni bir sunucu yapılandırdım. aynı yer.
Mike

35

Üretimde aşağıdaki config kullanıyorum

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 Ekleme proxy_set_header X-Forwarded-Proto https;benim için hile yaptı.
Faisal Feroz

-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;
  .....................
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.