İşte benim kısaltılmış nginx vhost conf:
upstream gunicorn {
server 127.0.0.1:8080 fail_timeout=0;
}
server {
listen 80;
listen 443 ssl;
server_name domain.com ~^.+\.domain\.com$;
location / {
try_files $uri @proxy;
}
location @proxy {
proxy_pass_header Server;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 10;
proxy_read_timeout 120;
proxy_pass http://gunicorn;
}
}
Aynı sunucunun hem HTTP hem de HTTPS'yi sunması gerekir, ancak yukarı akış bir yönlendirme yayınladığında (örneğin, bir form işlendikten sonra), tüm HTTPS istekleri HTTP'ye yeniden yönlendirilir. Bu sorunu düzelten bulduğum tek şey proxy_redirect
, aşağıdaki şekilde değişiyor :
proxy_redirect http:// https://;
Bu, HTTPS'den gelen istekler için harika çalışır, ancak HTTP üzerinden bir yönlendirme yayınlanırsa, bunu HTTPS'ye de yönlendirir.
Çaresizlik içinde denedim:
if ($scheme = 'https') {
proxy_redirect http:// https://;
}
Ama nginx proxy_redirect
burada izin verilmiyor şikayet ediyor .
Aklıma gelen tek diğer seçenek, iki sunucuyu ayrı ayrı tanımlamak ve proxy_redirect
sadece SSL'de ayarlamaktır , ancak daha sonra conf'in geri kalanını çoğaltırım ( server
basitlik uğruna atladığım çok şey var ). include
Fazlalığı hesaba katmak için bir direktif de kullanabileceğimi biliyorum , ama gerçekten herhangi bir bağımlılık olmadan sadece bir conf dosyasını tutmak istiyorum.
Öncelikle, sorunu tamamen ortadan kaldıracak bir şey eksik mi? Ya da, ikinci değilse, sunucu yapılandırmasının HTTP ve HTTPS sürümlerini ayırabilmem için gereksiz yapılandırma bilgilerini hesaba katmanın başka bir yolu (harici bir dosya eklemenin yanı sıra) var mı?