由验证码和session丢失的引发原因

今天中午,突然完整验证码全部不能显示了,查看gd库是没问题的,然后发现网站登录不上,追查变天,无果。

然后两个小时过后,可能是网站压力小了,网站又恢复正常。

但是过一阵又来。

其实很明显不是代码的问题,而是服务器环境问题。

查看内存,发现只剩下几十m,怪不得php不正常工作了。

然后用命令查看ps aux | grep -c php-fpm php进程数,发现有50+,每个占用0.2%,那就是10%。然而就是这样内存就爆了。

修改php-fpm的进程数 php-fpm.conf  max_child,得以缓解问题。

2015-07-15:但是问题继续,这次等了几个小时还是没有恢复,开始调试代码,结果发现的入口文件index.php文件有问题。有bom,就是前面有输出,所以header函数失效,session也失效。问题解决。但是php-fpm的问题还是继续。

2016-04-18补充

今天发现一个问题,访问不存在的图片,会导致session丢失,具体原因不知道,但是间接导致这个原因的是nginx的rewrite

if (!-e $request_filename) #支持thinkphp
            { 
                rewrite  ^/test/(.*)$  404 break; 
                rewrite  ^/dianping/(.*)$  404 break;                      
                rewrite  ^/((?!backup/).*)$  /index.php?s=$1  last;     
                        break;         
            }

这是原来的配置,有缺陷,会把图片也解析

location ~ .*.(htm|html)$ {
            if (!-e $request_filename) #支持thinkphp
            { 
                rewrite  ^/test/(.*)$  404 break; 
                rewrite  ^/dianping/(.*)$  404 break;                      
                rewrite  ^/((?!backup/).*)$  /index.php?s=$1  last;     
                        break;         
            }
        }

加上

location ~ .*.(htm|html)$ {},就不会全部解析到index.php了
暗夜之中,才见繁星;危机之下,暗藏转机;事在人为,为者常成。
原文地址:https://www.cnblogs.com/zenghansen/p/4624731.html