我有一个 NGINX 监听端口 441,SSLH 监听端口:441(https)、442(ssh),最后 STUNNEL 监听端口 443 转发到 SSLH(端口 2243)。
STUNNEL 配置:
pid = /var/run/stunnel.pid
cert = /etc/letsencrypt/live/f1.example.com/fullchain.pem
key = /etc/letsencrypt/live/f1.example.com/privkey.pem
[sslh]
accept = 443
connect = 127.0.0.1:2243
SSLH 配置:
DAEMON_OPTS="--user sslh --listen 127.0.0.1:2243 --ssh 127.0.0.1:442 --ssl 127.0.0.1:441 --pidfile /var/run/sslh/sslh.pid"
NGINX 配置:
server {
server_name f1.example.com;
listen 441;
access_log /var/log/nginx/f1.access;
error_log /var/log/nginx/f1.error;
location /admin/ {
proxy_pass http://127.0.0.1:10000/;
proxy_set_header Host $host;
proxy_redirect http://$host:10000/ /admin/;
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;
}
}
server {
listen 80;
return 302 https://$host$request_uri;
}
如您所见,我正在 /admin/ 路径中运行一个 WEBMIN 应用,并使用 NGINX 进行反向代理。我的问题是,当我在浏览器中输入 f1.example.com/admin 时,它会重定向到 HTTPS 版本,https://f1.example.com/admin。
登录成功后,会重定向到http://f1.example.com:441/admin/sysinfo.cgi?xnavigation=1它使用 HTTP 端口 441(我想知道端口号是如何插入这里的)。页面加载正常,但不是 HTTPS。我必须手动删除端口号并按回车键才能将其升级到 HTTPS。
我怎样才能让它顺利地与 HTTPS 配合使用?我需要对 NGINX conf 文件进行哪些更改?我觉得我这里漏掉了一些东西。
答案1
port_in_redirect off;
将其添加到 nginx conf 中,现在运行良好!