我最近为我的网站添加了 SSL 证书。它能正常工作,但有时在浏览器中会出现“重定向循环过多”的错误。我对服务器没有太多经验,所以我按照在线指南进行设置。
谢谢大家帮助我。
请帮我!
这是我的配置
upstream tomcat_server {
server 127.0.0.1:8084 fail_timeout=0;
}
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
rewrite ^(.*) https://example.com$1 permanent;
}
server {
listen 443 ssl default_server;
server_name example.com www.example.com;
# access_log off;
access_log /root/example.com/nginx-logs/access.log;
# error_log off;
error_log /root/example.com/nginx-logs/error.log;
root /root/Apache_Tomcat_7/webapps/ROOT;
# SSL
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AVS128:EECDH+AES256:RSA+AES256:EESCD+3DES:RSA+3DES:!MD5;
# Improve HTTPS performance with session resumption
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
# DH parameters
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
# Enable HSTS
add_header Strict-Transport-Security "max-age=31536000" always;
location / {
# Forward SSL so that Tomcat knows what to do
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat_server;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
proxy_connect_timeout 240;
proxy_send_timeout 240;
proxy_read_timeout 240;
}
}
答案1
你可以参考我在这里的回答:
https://serverfault.com/a/938422/494728
据我所知,你不仅开始在服务器上使用 https,还制定了从 http->https 的重定向规则。因此,如果客户端请求http://example.com它将重定向到https://example.com。
这是有道理的,但我会简化您的配置,而使用 (301) 重定向规则。
server { listen 80; server_name example.com; return 301 https://$server_name$request_uri; }
另一方面,您的位置部分可能非常简单,只需将您的网站位置指定为目录,无需将用户重定向到 http,因为这会导致循环。
您还可以参考我最近的以下回复: