這兩天需要在Ubuntu14.04上搭建nginx和php的環境,配置的過程中在fastcgi的問題上花了很多時間,網上的資料大多年久失修,于是決定將整個過程記錄下來,分享給大家。
準備:apt-get update
1. 安裝nginx并啟動apt-get install nginxsudo /etc/init.d/nginx start
2. 安裝php及相關sudo apt-get install php5-cli php5-cgi php5-fpm php5-mcrypt php5-mysql
3. FastCGI在運行php站點之前需要先了解下FastCGI,FastCGI是一個可伸縮地、高速地在HTTP server和動態腳本語言間通信的接口,它采用C/S結構,可以將HTTP服務器和腳本解析服務器分開,當HTTP服務器遇到動態請求時,會將請求轉發給FastCGI進程,FastCGI進程執行動態腳本后再將結果返回給HTTP服務器,HTTP服務器最后將結果返回給瀏覽器,這在很大程度上提高了請求的響應速度。
實現FastCGI有幾種方式,PHP-CGI、PHP-FPM、Spawn-FCGIPHP-CGI是PHP自帶的FastCGI管理器,啟動PHP-CGI可以使用如下命令:php-cgi -b 127.0.0.1:9000PHP-CGI有兩個問題,一是變更php.ini后需要重啟php-cgi才能生效,二是php-cgi進程崩潰或者被殺死后php就不能運行了。
PHP-FPM是從PHP 5.3.3之后新加入的CGI管理器,在更改PHP配置之后不需要重啟,且由于加入了守護進程,所以即使被殺死之后也能快速重啟。
Spawn-FCGI是一個通用的FastCGI管理器,而不僅僅只針對PHP一種腳本語言。但它在效率、CPU占用等方面都不如PHP-FPM。
4. PHP-FPM既然PHP-FPM的方式最好,那么我們現在就來配置一下。由于PHP-FPM是一個獨立的進程,所以需要與Nginx進行通信。目前有兩種通信方式,tcp和socket。兩種方式的區別和配置方式可以參見這兩篇文章:nginx 和 php-fpm 通信使用unix socket還是TCP,及其配置Php-fpm TcpSocket vs UnixSocket
在這里簡要說一下配置方式,兩種方式都主要修改nginx的配置文件(/etc/nginx/sites-available/default)和fpm的配置文件(/etc/php5/fpm/pool.d/www.conf)。
TCP配置方式需要將nginx配置文件中相應的反向代理的fastcgi_pass參數改為127.0.0.1:9000,將fpm配置文件中的listen參數修改為127.0.0.1:9000。
Socket配置方式需要將nginx配置文件中相應的反向代理的fastcgi_pass參數改為unix:/dev/shm/fpm-cgi.sock,將fpm配置文件中的listen參數修改為/dev/shm/fpm-cgi.sock,如果考慮到高并發可以將listen.backlog參數改為-1,內存積壓無限大。另外,還可以提高內核級別的并發連接數,修改/etc/sysctl.conf:sudo echo 'net.core.somaxconn = 2048' >> /etc/sysctl.confsudo sysctl -p
兩種配置方式修改完之后都需要重啟php-fpm和nginx。sudo service php5-fpm restartsudo /etc/init.d/nginx reload
5. 運行php站點以上配置完成之后,我們就可以寫一個簡單的html' target='_blank'>php頁面來測試一下。創建一個網站目錄:sudo mkdir /var/www/
在nginx配置文件中修改root目錄為 root /var/www;添加一個測試頁面:sudo vi /var/www/test.php
加入以下代碼:<?php phpinfo();?>
此時在瀏覽器輸入地址http://localhost/test.php,就可以看到php的信息了。
常用命令:1. 檢查nginx啟動出錯sudo nginx -c /etc/nginx/nginx.conf -t
如果大家覺得對自己有幫助的話,還希望能幫頂一下,謝謝:)
個人博客:http://blog.csdn.net/zhaoxy2850
本文地址:http://blog.csdn.net/zhaoxy_thu/article/details/41851389
轉載請注明出處,謝謝!
PHP編程 鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。