我过去一直在我的PHP项目中使用Apache。但现在,我想离开它,并开始使用以下选项之一:
哪个更具性能?确切地说,哪个更好?你有什么推荐?
好的,这里有一个很酷的东西叫做nginx。别停下来
许多人不知道的一件事是,nginx可以快速高效地进行代理请求。
你可能会问,什么是代理请求?那就很好。
代理请求由远程用户发送到nginx。Nginx将接收到该请求,然后将其转发给另一个监听器。此监听器可以是Unix域套接字、Apache、网络中的另一个nginx服务器,甚至是内部PHP内置服务器。
就我个人而言,感觉你对基于套接字的PHP解析器PHP-FPM并不了解。在Apache的旧时代,人们使用一种叫做mod_php
的东西,其中Apache会使用共享库手动解析这个请求。这非常糟糕。
如果你因为这个原因想离开,我建议你升级,并通过使用带有Nginx的PHP-FPM来提高性能。Rackspace上有一篇不错的文章:http://www.rackspace.com/knowledge_center/article/installing-nginx-and-php-fpm-setup-for-nginx
代码片段:
示例nginx配置:
server {
server_name www.DOMAINNAME;
rewrite ^(.*) http://DOMAINNAME$1 permanent;
}
server {
listen 80;
server_name DOMAINNAME;
root /var/www/DOMAINNAME/htdocs;
index index.php;
include /etc/nginx/security;
# Logging --
access_log /var/log/nginx/DOMAINNAME.access.log;
error_log /var/log/nginx/DOMAINNAME.error.log notice;
# serve static files directly
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$ {
access_log off;
expires max;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm/DOMAINNAME.socket;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
}
}
location ~ \.php$
路由将所有PHP请求转发到您的php-fpm实例。当然,更新您的nginx配置以匹配您的套接字名称。location ~ \.php$ {
fastcgi_pass http://localhost:8000;
}
PHP内置的Web服务器仅用于开发和测试。它是一个简单的服务器,从未旨在处理真实世界的负载。
事件驱动的服务器只会增加大量不必要的复杂性,除非您真的需要它所提供的功能。
两者都不适用于任何严肃或通用服务器。除非您有使用不同堆栈的具体原因,否则应坚持使用Apache。它稳定、安全、可配置并且工作得非常好。