CentOS中,使用PHP-FPM+Nginx運行PHP網站

安裝nginx和php-fpm

yum install nginx php-fpm

爲php-fpm增加反向代理

cat >/etc/nginx/conf.d/my_php.conf<<EOF
server {
  listen 80;
  server_name my_php.lslxdx.com my_php.lslxdx.com;
  root /var/www/html/my_php;

  location / {
    expires -1s;
    try_files \$uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)\$;
    fastcgi_param PATH_INFO \$fastcgi_path_info;
    fastcgi_index index.php;

    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
    fastcgi_pass 127.0.0.1:9000;
  }

  error_page 500 502 503 504 /50x.html;

  location = /50x.html {
    root html;
  }
}
EOF

創建網站目錄

mkdir -p /var/www/html/my_php

添加測試php文件

cat > /var/www/html/my_php/info.php<<EOF
<?php
phpinfo();
?>
EOF

啓動nginx和php-fpm

nginx 
service php-fpm restart

注意

  1. php-fpm的默認監聽9000端口,且僅接受127.0.0.1地址的訪問, 這些配置在/etc/php-fpm.d/www.conf文件中
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
  1. php-fpm是php的容器, 在使用nginx做反向代理時,應該使用fastcgi_pass,而非proxy_pass,這很關鍵

  2. 建議使用unix socket做本地轉發,而非127.0.0.1:9000的方式,此時應該修改2個文件:

# /etc/php-fpm.d/www.conf
listen = /tmp/my_php_fpm.sock
# /etc/nginx/conf.d/my_php.conf
fastcgi_pass unix:/tmp/my_php_fpm.sock;

使用unix socket可能會導致404,原因是php-fpm沒有對/tmp/my_php_fpm.sock的rw權限:
ll /tmp/my_php_fpm.sock
srw-rw—- 1 root root 0 7月 11 17:07 /tmp/my_php_fpm.sock
此時需要chmod a+rw /tmp/my_php_fpm.sock(這種方法不推薦,因爲每次啓動php-fpm後,都需要手動chmod),如果想從根本上解決這個問題,應該使用/etc/php-fpm.d/www.conf文件中配置的user,啓動php-fpm

參考:

  1. Nginx + PHP-FPM + MySQL + phpMyAdmin on Ubuntu 12.04
  2. 安裝了php-fpm, 就不需要安裝php了(不確定)
發佈了105 篇原創文章 · 獲贊 19 · 訪問量 41萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章