当前位置:  操作系统/服务器>linux
本页文章导读:
    ▪nginx中post数据莫名奇妙丢失的问题的解决方法      网络架构如下:      nginx1        |  rewrite      nginx2        |  pass      resin1 nginx1是在192.168.1.1上 nginx2跟resin1是在192.168.1.2上 首先,访问nginx1,由nginx1 rewrite到nginx2,nginx2直接p.........
    ▪nginx的access日志中400 bad request错误的解决方法      在nginx的access.log中存在大量的400错误,并以每天几百M的速度增加,占用大量空间。   代码示例: # tail -f /opt/nginx/logs/access.log 116.236.228.180 - - [15/Dec/2010:11:00:15 +0800] "-" 400 0 "-" "-" 116.236.228.180 -.........
    ▪nginx + fpm php 输出无法获取内容长度,导致客户端无法处理分块传输的解决办法      问题: nginx +fpm,nginx无法探知 php输出内容长度,默认用Tranfer-Encoding:chunked编码 输出。 解决: 对于一些客户端,需要自己解析http协议的,一般不支持chunked解码,这时,可以在php输出里 .........

[1]nginx中post数据莫名奇妙丢失的问题的解决方法
    来源: 互联网  发布时间: 2013-12-24

网络架构如下:
     nginx1
       |  rewrite
     nginx2
       |  pass
     resin1

nginx1是在192.168.1.1上
nginx2跟resin1是在192.168.1.2上

首先,访问nginx1,由nginx1 rewrite到nginx2,nginx2直接pass到resin1,整个过程是POST形式。至于为什么要用两层nginx,这当然是有原因的。

于是乎,快速制定了几个测试案例:
1,两种访问方式:GET,POST
   GET URL带参数,没有问题。
   POST 有问题。
   让网络同事检查,处理这个location并没有做什么特殊的POST处理。——!
2,访问nginx1时,直接pass到resin1,跳过nginx2
   问题依旧。
3,去掉nginx1,访问nginx2,直接pass到resin1
   有数据的。
4,直接访问resin1
   是有数据的。

为什么nginx1传递不了post数据,而nginx2可以,问题肯定出在nginx1的配置上。
经过一番折腾,终于找到了问题关键:
nginx1中,配置了一个全的post处理
 

代码如下:
if($request_method = POST) {
   rewrite .* /post.php last;
}

    
[2]nginx的access日志中400 bad request错误的解决方法
    来源: 互联网  发布时间: 2013-12-24

在nginx的access.log中存在大量的400错误,并以每天几百M的速度增加,占用大量空间。
 

代码示例:
# tail -f /opt/nginx/logs/access.log
116.236.228.180 - - [15/Dec/2010:11:00:15 +0800] "-" 400 0 "-" "-"
116.236.228.180 - - [15/Dec/2010:11:00:15 +0800] "-" 400 0 "-" "-"
116.236.228.180 - - [15/Dec/2010:11:00:15 +0800] "-" 400 0 "-" "-"
116.236.228.180 - - [15/Dec/2010:11:00:15 +0800] "-" 400 0 "-" "-"
116.236.228.180 - - [15/Dec/2010:11:00:15 +0800] "-" 400 0 "-" "-"
119.97.196.7 - - [15/Dec/2010:11:00:16 +0800] "-" 400 0 "-" "-"
119.97.196.7 - - [15/Dec/2010:11:00:16 +0800] "-" 400 0 "-" "-"
116.236.228.180 - - [15/Dec/2010:11:00:16 +0800] "-" 400 0 "-" "-"
116.236.228.180 - - [15/Dec/2010:11:00:16 +0800] "-" 400 0 "-" "-"
116.236.228.180 - - [15/Dec/2010:11:00:16 +0800] "-" 400 0 "-" "-"
116.236.228.180 - - [15/Dec/2010:11:00:16 +0800] "-" 400 0 "-" "-"
116.236.228.180 - - [15/Dec/2010:11:00:16 +0800] "-" 400 0 "-" "-"
116.236.228.180 - - [15/Dec/2010:11:00:16 +0800] "-" 400 0 "-" "-"
116.236.228.180 - - [15/Dec/2010:11:00:16 +0800] "-" 400 0 "-" "-"
116.236.228.180 - - [15/Dec/2010:11:00:16 +0800] "-" 400 0 "-" "-"
219.243.95.197 - - [15/Dec/2010:11:00:16 +0800] "-" 400 0 "-" "-"
116.236.228.180 - - [15/Dec/2010:11:00:16 +0800] "-" 400 0 "-" "-"
116.236.228.180 - - [15/Dec/2010:11:00:16 +0800] "-" 400 0 "-" "-"

网上很多资料说是HTTP头/Cookie过大引起的,可以修改nginx.conf中两参数来修正.
 

client_header_buffer_size 16k;
large_client_header_buffers 4 32k;

修改后
 

client_header_buffer_size 64k;
large_client_header_buffers 4 64k;

没有效果,即便把nginx0.7.62升到最新的0.8.54也是无果。
在官方论坛中,nginx作者提到空主机头不会返回自定义的状态码,而是返回400错误。参见:http://forum.nginx.org/read.php?2,9695,11560

最后修正如下,改为原先的值:
 

client_header_buffer_size 16k;
large_client_header_buffers 4 32k;

关闭默认主机的日志记录,即可解决问题:
 

代码如下:
server {
listen *:80 default;
server_name _;
return 444;
access_log   off;
}

    
[3]nginx + fpm php 输出无法获取内容长度,导致客户端无法处理分块传输的解决办法
    来源: 互联网  发布时间: 2013-12-24

问题:
nginx +fpm,nginx无法探知 php输出内容长度,默认用Tranfer-Encoding:chunked编码 输出。

解决:
对于一些客户端,需要自己解析http协议的,一般不支持chunked解码,这时,可以在php输出里 加一个header('Content-Length: length' )
可以覆盖nginx的默认行为,计算内容长度可以用php自带的strlen 方法。


    
最新技术文章:
▪linux系统中的列出敏感用户的脚本代码
▪a10 config backup for aXAPI
▪一键备份gitolite服务器的Shell脚本
▪nagios 分发文件实现代码
▪阿里云云服务器Linux系统更新yum源Shell脚本
▪一个监控LINUX目录和文件变化的Shell脚本分享
▪Linux下实现SSH免密码登录和实现秘钥的管理、...
▪Shell正则表达式之grep、sed、awk实操笔记
▪3个备份系统文件并邮件发送的Shell脚本分享
▪CentOS 6.3下给PHP添加mssql扩展模块教程
▪监控网站是否可以正常打开的Shell脚本分享
▪shell脚本编程之if语句学习笔记
▪shell脚本编程之循环语句学习笔记
▪shell脚本编程之case语句学习笔记
▪Shell脚本实现的阳历转农历代码分享
▪Shell脚本实现复制文件到多台服务器的代码分...
▪Shell脚本实现批量下载网络图片代码分享
▪Shell脚本实现检测文件是否被修改过代码分享
▪Shell脚本数组用法小结
▪Shell脚本批量重命名文件后缀的3种实现
▪C语言实现的ls命令源码分享
▪Linux下查找后门程序 CentOS 查后门程序的shell脚...
▪Shell 函数参数
▪linux shell 自定义函数方法(定义、返回值、变...
▪Shell实现判断进程是否存在并重新启动脚本分...
▪Shell脚本break和continue命令简明教程
▪Shell脚本函数定义和函数参数
▪让代码整洁、过程清晰的BASH Shell编程技巧
▪shell常用重定向实例讲解
▪awk中RS、ORS、FS、OFS的区别和联系小结
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3