让Nginx支持pathinfo

Nginx服务器默认不支持pathinfo, 在需要pathinfo支持的程序中(如thinkphp),则无法支持”/index.php/Home/Index/index”这种网址.

网上流传的解决办法很多,这里提供一种比较简洁的写法(只需要改动2行代码)


# 典型配置
location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $DO'
;&,"vIE'
;&,"_name;
    include        fastcgi_params;
}

# 修改第1,6行,支持pathinfo

location ~ \.php(.*)$ { # 正则匹配.php后的pathinfo部分
    root html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $DOCUMENT_ROOT$fastcgi_script_name;
    fastcgi_param PATH_INFO $1; # 把pathinfo部分赋给PATH_INFO变量
    include        fastcgi_params;
}

Nginx+php-fpm 502 504问题

近期自学it论坛(www.zixue.it) 常出现502,504错误

环境:

主机: 阿里云 双核CPU 2G内存
OS: centos 6.4 64位

思路:

  • 增大nginx与php-fpm通信时的缓存文件大小与个数
  • 静态绑定5个php-fpm进程,减少频率启动进程的开销
  • 利用sock文件代替tcp端口通信(本地机约可提高10%的性能)

解决办法:

调整Nginx 和 php-fpm的参数如下


# nginx.conf location段
unix:/usr/local/php/var/run/php-fpm.sock

# fastcgi.conf 修改内容
fastcgi_buffers 32 128k;
fastcgi_buffer_size 128k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;

#php-fpm.conf
listen = /usr/local/php/var/run/php-fpm.sock
#提醒:别忘给php-fpm.sock加读写权限

pm = static # 静态绑定5个进程
pm.max_children = 5

效果:

论坛首页速度快了约30毫秒,且经过2周的临床观察,未再发生502 ,504错误