PHP 和 IPF 配置的问题

提示:本文更新于 5268 天前,技术内容可能已发生变化,仅供参考。

一、PHP 的 CURLOPT_FOLLOWLOCATION 问题

首先,在 PHP 5.2 及以上版本中,如果启用了 safe_mode 或设置了 open_basedir,会导致 CURLOPT_FOLLOWLOCATION 失败,进而使 curl_setoptcurl_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 设置问题

第二个问题是关于 ipfIPF.conf 设置。

网上似乎有很多关于 ipf 的文档,包括 man ipf 看起来也对 ipf 的设置讲解得很详细,但实际上有一些非常细节的内容让人很纠结。可能是我一开始在概念理解上就存在问题,现在我来总结一下。先看看我之前一直在使用的一个 ipf.conf 规则:

pass in quick from any to 202.101.208.35 mask 255.255.255.255 port = 22 keep state
pass in quick from any to 202.101.208.35 mask 255.255.255.255 port = 80 keep state 
pass in quick from any to 202.101.208.35 mask 255.255.255.255 port = 443 keep state 
pass out all keep state

之前我一直有个疑问,在每条规则后面添加 keep state 就解决了问题。我一开始总是在想,既然已经设置了 pass out all,为什么还要在 in 的部分特别声明 keep state 呢?现在我终于明白其中的原因了。


「倘若有所帮助,不妨酌情赞赏!」

Holmesian

感谢您的支持!

使用微信扫描二维码赞赏


相关文章

发表新评论