How to redirect on the same port from http to https with nginx reverse proxy
Found something that is working well :
server { listen 8001 ssl; ssl_certificate /home/xxx/server.crt; ssl_certificate_key /home/xxx/server.key; error_page 497 301 =307 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; }}
Are you sure your solution is working? It is listening for 8001 ssl. Will it accept http request?
I do it this way:
server { listen 80; server_name yourhostname.com; location / { rewrite ^(.*) https://yourhostname.com:8001$1 permanent; }}
Then goes your 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; }}
This worked for me:
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;}...}