我有一个启用了 SSL 的 nginx 服务器。由于它在不同的端口(而不是 443)上运行,有时它会收到纯 HTTP 请求而不是 HTTPS。我想为此设置一个重定向以自动替换方案,我尝试了以下代码:
error_page 497 https://$host:$server_port$request_uri;
但这里的问题是,当服务器在虚拟机中运行并且端口被转发到不同的端口时,它会重定向到无效端口(服务器从该端口获取请求)。
我的问题是:如何解析/获取请求中的端口而不是接收请求的服务器的端口?
答案1
希望不要太晚(八个月!)。我自己也遇到过类似的问题,在 nginx.conf 中使用原始请求端口。
$http_name:任意请求头字段;变量名的最后一部分是将字段名转换为小写,将破折号替换为下划线
$http_host
因此应该包含请求“主机”标头,如果有帮助的话。
例如本地主机:8020
答案2
这个问题几乎与这个问题重复:
他们在端口 80 上接收非 HTTP 请求,在端口 443 上接收非 HTTPS 请求。除此之外,思路是一样的。
Nginx 模块可以对 TCP 数据包执行更多操作:
答案3
名为 @wilee 的用户提到,他们发现 wilee 的解决方案很有帮助。他们表示,他们的 Nginx 服务配置为在 Docker 容器中监听端口 80。但是,当他们运行 Nginx 容器时,他们将端口 8000 映射到端口 80。最初,他们使用了以下配置:
error_page 497 https://$host:$sever_port$request_uri;
这导致重定向自
http://192.168.0.38:8000
到https://192.168.0.38:80
。
对其配置进行如下更改后:
error_page 497 https://$http_host$request_uri;
他们能够解决这个问题并且配置按预期工作。