Nginx 请求端口

Nginx 请求端口

我有一个启用了 SSL 的 nginx 服务器。由于它在不同的端口(而不是 443)上运行,有时它会收到纯 HTTP 请求而不是 HTTPS。我想为此设置一个重定向以自动替换方案,我尝试了以下代码:

error_page 497 https://$host:$server_port$request_uri;

但这里的问题是,当服务器在虚拟机中运行并且端口被转发到不同的端口时,它会重定向到无效端口(服务器从该端口获取请求)。

我的问题是:如何解析/获取请求中的端口而不是接收请求的服务器的端口?

答案1

希望不要太晚(八个月!)。我自己也遇到过类似的问题,在 nginx.conf 中使用原始请求端口。

nginx $http_姓名多变的

$http_name:任意请求头字段;变量名的最后一部分是将字段名转换为小写,将破折号替换为下划线

$http_host因此应该包含请求“主机”标头,如果有帮助的话。

例如本地主机:8020

答案2

这个问题几乎与这个问题重复:

如何将80端口上的非http请求转发到另一个端口?

他们在端口 80 上接收非 HTTP 请求,在端口 443 上接收非 HTTPS 请求。除此之外,思路是一样的。

Nginx 模块可以对 TCP 数据包执行更多操作:

http://nginx.org/en/docs/stream/ngx_stream_core_module.html

https://github.com/yaoweibin/nginx_tcp_proxy_module

答案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;

他们能够解决这个问题并且配置按预期工作。

相关内容