在Nginx作为正向代理时,处理用户请求带有非80端口号的问题是一个常见的需求。传统的解决方案通常包括在URL中手动添加端口号或利用cookie传递端口号信息。以下是针对这两种常见方法的分析: 1. **手动添加端口号**: 一些教程建议在$host后面直接添加端口号,例如`proxy_set_header Host $host:$server_port;`。然而,这种方法并不完全可行,因为Nginx在解析URL时并不会自动识别端口并将其传递给后端服务器,除非明确指定。因此,仅靠这种方式,Nginx仍可能无法正确处理非80端口请求。 2. **使用Cookie**: 另一种策略是利用cookie来携带端口号信息。例如,设置一个名为`passport`的cookie,其值等于原始URL中的端口号。CURL命令可以通过`-b`参数添加cookie,如`curl -b passport=80 --proxy http://proxy_server:80 http://www.taobao.com/`。这种方法能够部分解决问题,但依赖于客户端是否设置并发送包含端口号的cookie。如果目标服务器或客户端不允许或者不发送这样的cookie,代理可能不会成功。 **本人的解决方案**: 博主提出了一种更有效的方法,即使用Lua模块来处理这个问题。具体步骤如下: - 通过Lua脚本检查HTTP头中的`host`字段,匹配端口号模式`(:(\d){4})`或`(:(\d){3})`,提取出端口号。 - 设置一个名为`$cookie_passport`的cookie,其值等于提取的端口号。 - 最后,更新`proxy_pass`指令,将完整的URL(包括端口号)传递给后端服务器,即`http://$host:$cookie_passport$request_uri`。 这种方法的优点在于它动态地从请求中获取端口号,无需人为干预,适用于各种情况下,无论客户端是否发送包含端口号的cookie。这使得Nginx能够100%正确地处理包含非80端口的请求,并确保了请求的完整转发。 总结来说,处理Nginx正向代理中非80端口问题的关键在于动态地获取和处理这些端口信息。传统方法如手动添加或依赖cookie可能有局限性,而利用Lua脚本可以根据实际请求情况自动处理端口,提供了更为灵活和可靠的解决方案。
http://blog.csdn.net/xzknet/article/details/22672127
# nginx非80端口处理
proxy_set_header Host $host:$server_port;
---其实能解决吗?答案是No
2、其次解决方式是增加cookie值,如:
http://linux.it.net.cn/e/server/nginx/2014/1120/8464.html
proxy_pass http://$host:$cookie_passport$request_uri;
其中$cookie_是获取请求中cookie的信息,这个passport的cookie值是原URL中端口号。由此可以看出,如果要通过该NGINX转发,需要首先设置一个cookie,这个cookie名为passport,cookie的值为原url中的端口号。
如果使用CURL命令请求链接,可以这样子:
curl -b passport=80 --proxy proxy_server:80 http://www.taobao.com/
其中-b参数是为了添加cookie
--能解决问题不?能解决一半,如果对方会把port写到cookies去。
3、本人解决方法,通过set_by_lua去获取host携带的端口值,如:
#By ML.Y @2015/12/20
if ($http_host ~ "(:(\d){4})$"){
set_by_lua $port "
local host = ngx.req.get_headers()[\"host\"];
local port = string.sub(host,-4);
return port ";
set $cookie_passport $port ;
proxy_pass http://$host:$cookie_passport$request_uri;
}
下载后可阅读完整内容,剩余1页未读,立即下载
- 粉丝: 6
- 资源: 11
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展