这是我第一次使用 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
尖端:
如果要使用一个全局服务器块捕获所有 http 请求,请使用默认服务器:
listen 80 default_server;
您可以使用更多变量;)
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;
}