J'utilise un proxy inverse avec Nginx et je veux forcer la demande en HTTPS, donc si un utilisateur veut accéder à l'url avec http, il sera automatiquement redirigé vers HTTPS.
J'utilise également un port non standard.
Voici ma configuration de proxy inverse nginx:
server {
listen 8001 ssl;
ssl_certificate /home/xxx/server.crt;
ssl_certificate_key /home/xxx/server.key;
location / {
proxy_pass https://localhost:8000;
proxy_redirect off;
proxy_set_header Host $Host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-Proto https;
}
}
J'ai essayé beaucoup de choses et j'ai également lu des articles à ce sujet, y compris cette question de défaut de serveur , mais rien n'a fonctionné jusqu'à présent.
J'ai trouvé quelque chose qui fonctionne bien:
server {
listen 8001 ssl;
ssl_certificate /home/xxx/server.crt;
ssl_certificate_key /home/xxx/server.key;
error_page 497 https://$Host:$server_port$request_uri;
location /{
proxy_pass http://localhost:8000;
proxy_redirect off;
proxy_set_header Host $Host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Ssl on;
}
}
Êtes-vous sûr que votre solution fonctionne? Il écoute 8001 ssl. Acceptera-t-il la demande http?
Je le fais de cette façon:
server {
listen 80;
server_name yourhostname.com;
location / {
rewrite ^(.*) https://yourhostname.com:8001$1 permanent;
}
}
Alors va votre config:
server {
listen 8001 ssl;
ssl_certificate /home/xxx/server.crt;
ssl_certificate_key /home/xxx/server.key;
location / {
proxy_pass https://localhost:8000;
proxy_redirect off;
proxy_set_header Host $Host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-Proto https;
}
}
Cela a fonctionné pour moi:
server {
listen 80;
server_name localhost;
...
if ($http_x_forwarded_proto = "http") {
return 301 https://$server_name$request_uri;
}
location / {
proxy_set_header X-Forwarded-Host $Host;
proxy_set_header X-Forwarded-Server $Host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080;
}
...
}
Vous pouvez
Remarque: j'ai mis 443 pour le serveur https. Vous pouvez écouter 8001 si vous le voulez vraiment.
server {
listen 80;
server_name your_hostname.com;
return 301 https://$server_name$request_uri;
}
...
server {
listen 443 ssl;
server_name your_hostname.com
...
}