首先是关于PHP在PHP 5.2以上启用safe_mode or an open_basedir会导致CURLOPT_FOLLOWLOCATION失败,再导致curl_setopt/curl_setopt_array失败。
官方对此有声明如下:
Starting in PHP 5.2.0, CURLOPT_FOLLOWLOCATION can't be set via curl_setopt_array() (or curl_setopt()) when either safe_mode is enabled or open_basedir is set. In these cases, the order of CURLOPT_* settings in the array can be important.
1.CURLOPT_FOLLOWLOCATION
Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set
2.curl_setopt_array()
如果curl_setopt_array中包含CURLOPT_FOLLOWLOCATION键值,会导致所有options设置失败,让你感觉curl_setopt_array有问题,其实这个函数本身是没问题的。
对此我尝试用这种方法:
在php.ini中设置open_basedir或者safe_mode,再在Apache(或者Nginx的FastCGI)中<Directory>、<VirtualHost>设置 php_admin_value open_basedir Off。结果是相应的虚拟主机整个PHP跑不了了,不知道为何。
所以目前来看对于需要使用curl_setopt_array()的环境应该就不能打开safe_mode和设置open_basedir值了。
第二个是关于ipf的IPF.conf设置的。
网上看似有不少关于ipf的文档,包括man ipf看上去也把ipf的设置讲解得十分的详细,但是实际上有一些非常细节的内容让人相当纠结。可能是由于我从一开始在概念上的理解就存在问题,在此总结一下;首先看我之前一直在用的一个ipf.conf规则
- # allow 22
- pass in quick from any to 202.101.208.35 mask 255.255.255.255 port = 22
- # allow 80
- pass in quick from any to 202.101.208.35 mask 255.255.255.255 port = 80
- # Allow 443
- pass in quick from any to 202.101.208.35 mask 255.255.255.255 port = 443
- # Out going
- pass out all
- # allow 22
- pass in quick from any to 202.101.208.35 mask 255.255.255.255 port = 22 keep state
- # allow 80
- pass in quick from any to 202.101.208.35 mask 255.255.255.255 port = 80 keep state
- # Allow 443
- pass in quick from any to 202.101.208.35 mask 255.255.255.255 port = 443 keep state
- # Out going
- pass out all keep state
即在每条规则后面添加keep state问题就解决了…… 一开始老认为都pass out all了,干嘛还要特别在in的部分申明keep state……现在才终于知道为什么
接下来这个是关于日志轮转的……用/etc/newsyslog.conf的设置来定期切割过大的日志,这个问题相当尴尬:由于需要轮转的日志有一定数量,所以添加的时候有些偷懒,基本上都是写好一条规则其他大部分都是照着一条复制只改前面的部分,/var/log/nginx/access-web_net.log 600 4 * $W0D23 JC,结果问题就出在这个$W0D23上,有些好多个几百MB上几GB的日志文件同时在一个时刻开始切割……导致的后果是硬盘I/O达到瓶颈,Kernel提示错误也就不用说了……。解决方法自然是岔开较大日志文件的切割轮转时间……
发表评论: