nginx和php-fpm简单优化


nginx和php-fpm安装好之后,默认配置运行是OK的,不过从长期运行考虑,必要的优化还是需要的。

gzip

gzip是一种通过压缩服务器传输内容,提高客户端响应体验的常见优化方式。gzip在nginx上默认是开启的,不过只针对html,需要我们对配置做一些调整才能对js/css等做压缩。以下是修改后的配置段:

gzip            on; 
gzip_min_length 1k; 
gzip_comp_level 2;
gzip_types      text/plain text/javascript application/x-javascript text/css;

下面解释各配置项含义。

指令名 指令含义 指令默认值
gzip 是否启用gzip。我安装nginx之后配置中gzip默认就是on的,所以没修改 off
gzip_min_length 需要压缩文件大小的阈值,超过此值才会压缩。理论上来说,值太小的话,压缩反而不合算。 20
gzip_comp_level 压缩级别。值越大,压缩后文件越小,但是所需时间与CPU资源越多。 1
gzip_types gzip针对的content-type,优化的重点,application/x-javascript针对wordpress动态生成的javascript,注意,text/html不用在这里声明,声明了反而会有警告…… text/html

启用gzip之后,服务器端响应会有类似gzip、deflate等关键字,而且响应内容长度减少了。具体检查方法理论上有很多,本人使用firebug对比查看前后响应大小。

expires

expires主要针对的是图片等不能压缩但是变动周期很长的静态内容。典型的如博客的题图。nginx上设置expires也很简单,相比gzip,设置expires时你只要知道一条指令就行了。具体配置段如下:

location ~ \.(gif|jpg|jpeg|png|bmp)$ {
    expires 15d;
}

location后面是个简单的正则表达式,含有常见的几种图片扩展名。在遇到这些扩展名时,nginx执行expires命令,增加过期时间为15天之后的响应头。

基本的两个网站服务器的优化方法讲完了。如果你对nginx的指令有兴趣的话,nginx官方网站的指令集上有更详细的资料。

使用unix socket文件连接nginx和php-fpm

使用unix socket文件方式比纯socket方式性能稍微好一点。
顺便说一句,socket方式必须绑定127.0.0.1,否则被外部访问会很麻烦。当然,如果你觉得不放心的话,也可以像我一样切换到unix socket文件方式。
unix socket方式并不是没人用的古董,本地访问mysql貌似推荐用socket方式。

言归正传,修改地方有两个,一个是nginx的配置nginx.conf,另一个是php-fpm的配置php-fpm.conf,具体配置段如下:

# vi nginx.conf
location ~ \.php$ {
    # fastcgi_pass   127.0.0.1:9000;
    fastcgi_pass   unix:/var/run/php-fpm.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

注意两个fastcgi_pass。

# vi php-fpm.conf

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses on a
;                            specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
;listen = 127.0.0.1:9000
listen = /var/run/php-fpm.sock

注意最后一行。

修改完毕之后,用上一篇的init.d脚本重启nginx和php-fpm即可。


One response to “nginx和php-fpm简单优化”