前段時間的折騰,頗費一番周折,過程中發現網上的許多資料比較老舊過時了,
所以在這里也簡單把過程重新整理一遍,爭取一帖解決問題。
基於最新的Ubuntu 14.04(2014年9月)搭建nginx、php、mysql環境,
以下全部命令行操作:
1,由於需要大量的權限操作,方便起見臨時提升權限,使用root賬號sudo su
2,安裝apt源管理工具、添加nginx和php的安裝源apt-get install python-software-properties
add-apt-repository ppa:nginx/stable
add-apt-repository ppa:ondrej/php5
3,更新系統軟件apt-get update
4、安裝mysqlapt-get install mysql-server
注:在安裝過程中,會要求你輸入MySQL的root賬號的密碼。
5、安裝php及對mysql的支持apt-get install php5 php5-fpm php5-mysql php-apc
6、根據實際需要,選擇性的安裝php的各類功能模塊(具體請自行百度)apt-get install php-pear php5-dev php5-curl
apt-get install php5-gd php5-intl php5-imagick
apt-get install php5-imap php5-mcrypt php5-memcache
apt-get install php5-ming php5-ps php5-pspell
apt-get install php5-recode php5-snmp php5-sqlite
apt-get install php5-tidy php5-xmlrpc php5-xsl
7、安裝nginxapt-get install nginx
8、配置phpvi /etc/php5/fpm/php.ini
找到:;cgi.fix_pathinfo=1
改為:cgi.fix_pathinfo=0
9、配置nginxmkdir /www
chmod 755 /www
創建一個 /www 目錄設置為 755 權限
vi /etc/nginx/sites-enabled/default
找到:root /usr/share/nginx/html;
改為:root /www;
說明:將網站根目錄設置到/www 目錄下,注意不要寫成 /www/ 這種格式,
這個習慣性的小小潔癖給我帶來了意想不到的困擾,后面細說。
找到:index index.html index.htm;
改為:index index.php index.html index.htm;
說明:在默認索引文件中增加 index.php
找到:location ~ .php$ { * }
區塊
做如下調整(改動之處於行末有注釋):
location ~ .php$ {
try_files $uri =404; #增加
fastcgi_split_path_info ^(.+.php)(/.+)$; #反注釋
## NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
## With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
## With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock; #反注釋
fastcgi_index index.php; #反注釋
include fastcgi_params; #反注釋
}
10、解決php-fpm與nginx的小bug
按上述步驟操作后,由於nginx與php-fpm之間的一個小bug,會導致這樣的現象:
網站中的靜態頁面 *.html 都能正常訪問,而 *.php 文件雖然會返回200狀態碼,
但實際輸出給瀏覽器的頁面內容卻是空白。
簡而言之,原因是nginx無法正確的將 *.php 文件的地址傳遞給php-fpm去解析,
相當於php-fpm接受到了請求,但這請求卻指向一個不存在的文件,於是返回空結果。
為了解決這個問題,需要改動nginx默認的fastcgi_params配置文件:vi /etc/nginx/fastcgi_params
在文件的最后增加一行:fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
關於這行的內容,多說幾句,其中有兩個參數:
$document_root 即是指網站的根目錄,也就是我們在前面剛設置的 root /www;
$fastcgi_script_name 則是指網站上的各個 *.php 文件名(其實是文件的相對路徑)
這兩個合在一起形成完整的 php file path,比如你的網站有個 /test/script.php 文件,
nginx傳遞給php-fpm的完整路徑就是:/www/test/script.php
我在前面說配置nginx時,寫成了 root /www/; 這種寫法,對於nginx不成問題,
但它在向php-fpm傳遞php文件路徑時,會形成:/www//test/script.php
這樣的文件地址無效(獲取不到正確的php文件),於是出現返回空白的問題。
這個問題是如此之隱蔽,以至於我花了大量時間在查看LOG、尋找資料和調整設置上。
11,重啟各項服務service php5-fpm reload
service nginx reload
重新加載各項配置改動。
12、測試vi /www/index.php
內容:<?php echo phpinfo(); ?>
請打開你的瀏覽器訪問:http://localhost
若返回“502 bad gateway”~~請嘗試:
(((
PHP fixed a security bug where o
had rw
permission to the socket file.
- Open
/etc/php5/fpm/pool.d/www.conf
- Uncomment all permission lines, like:
listen.owner = www-data listen.group = www-data listen.mode = 0660
- Restart fpm –
sudo service php5-fpm restart
Note: if your webserver runs as as user other than www-data, you will need to update the www.conf
file accordingly
)))
若一切正常,將輸出php環境信息,如:
附錄:
1,一些編輯修改工作涉及到 vi 的使用,如果不會操作,請訪問這個鏈接:
http://linux.vbird.org/linux_basic/0310vi.php
2,我參考的所有資料中,最有價值的兩篇,感謝前輩作者們:
http://blog.segmentfault.com/ipanda/1190000000477401
http://imcn.me/html/y2014/20291.html
3,Ubuntu是個好玩具,自06年之后,再度推薦下:
http://www.ubuntu.com
注意:別去用那個集成了一堆垃圾軟件的所謂中國版。
limingx.com / 2014-09-13