这是我第一次用nginx设置,我用它来代理nodejs。 HTTP在端口3000上,而HTTPS在端口3001上。
如果我去http://test.domain.com它加载常规的不安全页面。 如果我去https://test.domain.com它加载安全页面。 但我希望它从非httpsredirect到https。
我的configuration有什么问题? 这是我使用的整个domain.conf文件。
server { listen 80; server_name test.domain.com return 301 https://test.domain.com$request_uri; } server { listen 443 ssl; server_name test.domain.com; ssl_certificate /etc/nginx/ssl/domain.crt; ssl_certificate_key /etc/nginx/ssl/server.key; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header HOST $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass https://127.0.0.1:3001; proxy_redirect off; } }
我重新启动了nginx多次。
谢谢!
你可以在你的http服务器块中使用重写
server { listen 80; server_name test.domain.com; rewrite ^ https://$server_name$request_uri? permanent; }
失踪 ”;” 在行的末尾。 (或只是一个破碎的复制/粘贴?)
server_name test.domain.com;
我认为你有另一个server_block在默认服务器上运行,覆盖这个没有有效的服务器名称
提示:
如果要使用一个全局服务器块捕获所有http请求,请使用default_server :
listen 80 default_server;
你可以使用更多的variables;)
return 301 https://test.domain.com$request_uri;
至
return 301 https://$host$request_uri;
不要使用重写,返回是最快的。
将这些行添加到端口80configuration中,以自动redirect到带有参数的https,如果需要,请移除返回并调整端口。
if ($http_x_forwarded_proto != 'https') { #rewrite ^(.*) https://$host$1 redirect; }