我的 nginx 配置运行良好,直到我添加强制使用 HTTPS 的重定向。重定向前的工作配置是:
server {
listen 80;
listen 443 default_server ssl;
server_name my-domain.com www.my-domain.com;
client_max_body_size 5M;
location / {
proxy_pass http://localhost:3000;
}
}
我在服务器的 3000 端口上运行一个应用程序,我想在我的域的 80 端口和 443 端口(http 和 https)上提供它。但是,当用户尝试通过 HTTP 访问它时,我还想将用户重定向到 HTTPS。我使用了这个答案设置方法:
server {
listen 80;
server_name my-domain.com www.my-domain.com;
client_max_body_size 5M;
return 301 https://$server_name$request_uri;
}
server {
listen 443 default_server ssl;
server_name my-domain.com www.my-domain.com;
client_max_body_size 5M;
location / {
proxy_pass http://localhost:3000;
}
}
但这会导致重定向循环。我承认我对 nginx 还比较陌生,所以如果有人能给我提供一些可以解释这一点的资源,我将不胜感激。我猜这与 location 和/或 proxy_pass 的使用有关,但仔细阅读文档并没有得到任何更深入的见解。
另外要注意的是,该应用程序是通过 CloudFlare 发送的。
答案1
问题已解决。我坚持使用原来的 nginx 配置,并使用 CloudFlare 页面规则强制使用 HTTPS。
使用的规则是:
http://*gistbook.io/*
=> 始终使用 HTTPS