phpnginx安全
① NGINX+php好,还是NGINX+APACHE+PHP好
如果单台服务器的话,NGINX+APACHE+PHP
纯粹多此一举,多了一次请求转发,效率肯定低,而且现在FPM已经足够稳定。完全没必要。
只有多台服务器集群的话,apache+nginx反代才有意义.NGINX+APACHE+PHP
这种架构存在的原因除了apache出现比较早外,还因为当时FPM不如mole模式稳定。
不见得。Nginx在前面实现动静分离,静态内容由Nginx负责,动态请求则交给后面的PHP应用服务器Apache(libphp5.so)处理。Apache专心处理PHP,这不挺好吗?
Nginx+PHP-FPM相对Nginx+Apache(libphp5.so)来说,PHP-FPM更灵活,在php-fpm.conf里可以配置监听不同端口的多个pool,每个pool又可以自由配置PHP-FPM工人进程数pm.max_children,一个pool里的工人进程繁忙不会影响到另一个pool。在Nginx里可以配置应用的不同部分使用不同的pool,而且一台服务器上可以运行多个版本的PHP-FPM,借助Nginx的upstream功能,PHP-FPM非常容易横向扩展。
新浪微博和网络贴吧都在使用Nginx+PHP-FPM的架构,PHP-FPM已经足够稳定。
ab同样并发数压力测试ZF下RPS(请求每秒)对比:
② 如何在Apache和Nginx禁止上传目录里PHP的执行权限
网站程序的上传目录通常是不需要PHP执行解释权限,通过限制目录的PHP执行权限可以提网站的安全性,减少被攻击的机率。
下面和大家一起分享下如何在Apache和Nginx禁止上传目录里PHP的执行权限。
在虚拟主机配置文件中增加php_flag engine off指令即可,配置如下
"/website/uploads">,denyAllowfromallphp_flagengineoff
Nginx更简单,直接通过location条件匹配定位后进行权限禁止。
在server配置段中增加如下的配置
如果是单个目录
location~*^/uploads/.*.(php|php5)${denyall; }
如果是多个目录
location~*^/(attachments|uploads)/.*.(php|php5)${denyall;}
注意:这段配置文件一定要放在下面配置的前面才可以生效。
location~.php${ fastcgi_pass127.0.0.1:9000; fastcgi_indexindex.php; fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name; includefastcgi_params; }
最后给一个完整的配置示例
location~/mm/(data|uploads|templets)/*.(php)${ denyall; } location~.php${ try_files$uri/404.html; fastcgi_pass127.0.0.1:9000; fastcgi_indexindex.php; fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name; includefastcgi_params; }
配置完后记得重启Nginx生效。