Nginx不redirect,但正在工作

这是我第一次用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在默认服务器上运行,覆盖这个没有有效的服务器名称

提示:

  1. 如果要使用一个全局服务器块捕获所有http请求,请使用default_server

     listen 80 default_server; 
  2. 你可以使用更多的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; }