解决 nginx 反向代理网页首尾出现神秘字符的问题
浏览:7072次 出处信息
一台内网 LAMP 服务器上运行 MediaWiki,另一台具有外网 IP 的服务器上运行 nginx,为内网服务器提供反向代理,允许从外部访问 MediaWiki。测试发现,通过反向代理访问一般页面没有问题,但对于返回 HTTP/1.1 404 的页面,HTML 头部和尾部分别出现了额外的字符。头部多出的是 2-4 位 16 进制数,如“355b”,尾部多出的总是“0”。而且这个现象只出现在 nginx 反向代理之后的页面,不出现在 Apache 原始页面。
使用 Wireshark 对比 nginx 和 Apache 的 respone,发现凡是出问题的页面,其传输方式均为 chunked(“Transfer-Encoding: chunked”)。查阅资料得知头部的 16 进制数(chunk 长度)、尾部的 0(chunk 终结)正是 chunked 传输方式的消息标识。Apache 的 respone 只有一个 chunk,而 nginx 的 respone 则分为 4 个 chunks,其中第 1 个 chunk 的头部、第 4 个 chunk 的尾部出现的额外字节正是 Apache 的 respone 中原始的 chunk 标识。看来,出现额外的字符是因为 nginx 对已经做过 chunked 的消息重复执行了 chunked 操作。
解决这个问题,只需要禁止 nginx 进行多余的 chunked 过程。经查,可以在 nginx 配置文件中相应网站的 location 段中加一行“chunked_transfer_encoding off;”。
- location / {
- proxy_pass http://10.0.0.10/;
- proxy_redirect off;
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- chunked_transfer_encoding off;
- }
另外,也有人提供了 patch,更加智能地解决这个问题。
建议继续学习:
- 配置Nginx+uwsgi更方便地部署python应用 (阅读:105397)
- 搜狐闪电邮箱的 Nginx/Postfix 使用模式 (阅读:32522)
- 解析nginx负载均衡 (阅读:14504)
- Nginx模块开发入门 (阅读:9870)
- 检查nginx配置,重载配置以及重启的方法 (阅读:9091)
- Cacti 添加 Nginx 监控 (阅读:8915)
- Nginx+FastCgi+Php 的工作机制 (阅读:8848)
- nginx的配置文件 (阅读:8821)
- 奇怪的 Nginx 的 upstream timed out 引起响应 502 (阅读:8137)
- 解决IE6从Nginx服务器下载图片不Cache的Bug (阅读:7097)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:Nginx模块开发入门
后一篇:关于Apache调优点滴 >>
文章信息
- 作者:Jian Lin 来源: 林健的BLOG
- 标签: nginx
- 发布时间:2011-07-18 23:28:37
建议继续学习
近3天十大热文
- [56] Oracle MTS模式下 进程地址与会话信
- [56] IOS安全–浅谈关于IOS加固的几种方法
- [55] 如何拿下简短的域名
- [54] 图书馆的世界纪录
- [53] Go Reflect 性能
- [53] android 开发入门
- [50] 【社会化设计】自我(self)部分――欢迎区
- [50] 读书笔记-壹百度:百度十年千倍的29条法则
- [39] 程序员技术练级攻略
- [33] 视觉调整-设计师 vs. 逻辑