出现重定向问题在于后端服务未配置HTTP或者不知道前端正在使用HTTPS,造成在HTTP跳转HTTPS时不断重定向,对后端代理HTTPS即可。
以下配置用于内网反代负载,使用了proxy_protocol协议方便后端获取源IP,与Frp配合使用。
server {
listen 443 ssl proxy_protocol;
server_name xxx.xxx.xxx;
ssl_certificate /etc/ssl/xxx.crt;
ssl_certificate_key /etc/ssl/private/xxx.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass_header Server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $proxy_protocol_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass https://127.0.0.1:443;
}
}
注意,proxy_protocol协议不支持浏览器访问。
如果不需要使用和Frp或配置proxy_protocol协议,替换如下即可:
server {
#删去监听端口处proxy_protocol协议监听
listen 443 ssl;
server_name xxx.xxx.xxx;
ssl_certificate /etc/ssl/xxx.crt;
ssl_certificate_key /etc/ssl/private/xxx.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass_header Server;
proxy_set_header Host $host;
#替换$proxy_protocol_addr为$remote_addr以获取当前客户端地址
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass https://127.0.0.1:443;
}
}