Nginx 未重定向但正在运行

Nginx 未重定向但正在运行

这是我第一次使用 nginx 进行设置,我使用它来代理到 nodejs。HTTP 在端口 3000 上,HTTPS 在端口 3001 上。

如果我去http://test.domain.com它会加载常规的不安全页面。如果我去https://test.domain.com它会加载安全页面。但我希望它从非 https 重定向到 https。

我的配置有什么问题?这是我正在使用的整个 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 多次。

谢谢!

答案1

您可以在 http 服务器块中使用重写

server {
    listen 80;
    server_name test.domain.com;
    rewrite ^ https://$server_name$request_uri? permanent;
}

答案2

行末缺少“;”。 (或者只是一个损坏的复制/粘贴?)

    server_name test.domain.com;

我认为您在默认服务器上运行了另一个 server_block,该 server_block 在没有有效服务器名称的情况下覆盖了此 server_block

尖端:

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

    listen 80 default_server;
    
  2. 您可以使用更多变量;)

    return 301 https://test.domain.com$request_uri;
    

    return 301 https://$host$request_uri;
    

    不要使用重写,返回是最快的。

答案3

在端口 80 配置中添加这些行,以便使用参数自动重定向到 https,删除返回并根据需要调整端口。

if ($http_x_forwarded_proto != 'https') {
  #rewrite ^(.*) https://$host$1 redirect;
}

相关内容