作者亲测,需要更改php源程序后,重新编译php。在使用fpm方式安装时,打补丁过程中会修改php的文件,所以需要在打完fpm补丁后再修改php源程序。
tar zxvf php-5.2.14.tar.gz
gzip -cd php-5.2.14-fpm-0.5.14.diff.gz | patch -d php-5.2.14 -p1
cd php-5.2.14/
代码如下 | 复制代码 |
vi main/fopen_wrappers.c /* {{{ php_check_open_basedir // 添加的内容开始 char *env_document_root = sapi_getenv("DOCUMENT_ROOT", sizeof("DOCUMENT_ROOT")-1 TSRMLS_CC); // 添加的内容结束 pathbuf = estrdup(PG(open_basedir)); ptr = pathbuf; while (ptr && *ptr) { if (php_check_specific_open_basedir(ptr, path TSRMLS_CC) == 0) { ptr = end; /* Nothing to check... */ |
在5.3.3以上已经增加了HOST配置,可以起到防跨站、跨目录的问题。如果你是PHP 5.3.3以上的版本,可以修改/usr/local/php/etc/php.ini在末尾里加入:
代码如下 | 复制代码 |
[HOST=www.111cn.net] open_basedir=/home/wwwroot/www.111cn.net/:/tmp/ [PATH=/home/wwwroot/www.111cn.net] open_basedir=/home/wwwroot/www.111cn.net/:/tmp/ |
然后重启nginx和php-fpm
然后用中国菜刀等工具测试即可发现Nginx已经支持防跨站
小提示,如果你网站没有大量的流量或html静态页面,我还是建义你使用apache来实配置网站,这样就不存在此问题了。