Nginx作为正向代理访问非80端口问题

来源:互联网 发布:2017淘宝商家数量统计 编辑:程序博客网 时间:2024/06/05 11:42

    Nginx作为一款高性能的HTTP和反向代理服务器,以其在高并发连接的情况下,内存、CPU等系统资源消耗非常低且运行稳定而闻名,根据W3Techs最新公布的数据,在排名前1000的网站中,Nginx占据了将近三分之一的席位(29.1%),已经取代了IIS(仅为12.7%)第二名的位置。当然,Apache还是当之无愧的老大,占39.1%。

    Nginx不仅在http和反向代理服务器上表现优异,作为http正向代理同样表现不俗,但是笔者在使用中却发现nginx作为正向代理无法访问非80端口(nginx版本为1.0.8),Nginx配置如下:

    打开nginx的流水日志,并将$host和$request_uri打印出来发现,$host中确实没有端口信息,所以无论是访问什么端口,nginx转发时都转发到了默认端口(一般为80)。问题已经确认,那么接下来就是寻找nginx全局变量中是否有能取出目标端口的变量了,但是查找nginx资料并测试发现没有这样的变量。

    此路不通,只有另寻它径了。想到nginx既然可以同时监听多个端口,为什么不利用这一点来实现非80端口的正向代理呢,80端口负责代理目标端口为80的请求,对于目标端口非80的请求,新增一个监听端口即增加一个server配置来实现,例如新增下面的配置来实现对8099端口的访问:

    虽然实现不够优雅,每增加一个非80端口的访问就需要增加一个配置,但是毕竟访问非80端口的情况还是比较少。也还是可以接受,不过相信nginx在后面的版本中必然会增加对此种情况的支持,就不用这么费力费事鸟。   

原创粉丝点击