Nginx 提供了基本的 HTML 靜態網頁的服務,我們要讓網頁有動態處理的能力時,就必須依賴其他程式語言提供動態解析的能力了,例如常見的 ASP、ASP .Net、PHP、JSP、Perl ... 等等,而在 Linux 平台上,PHP 絕對是第一首選。
最後更新日期 - 2015/01/22
事前準備
- Raspberry Pi Type A / A+ / B / B+。
- Raspbian 作業系統。
- 依照 Raspberry Pi 的實作 - 用 Nginx 架設網頁伺服器 的步驟,將 Nginx 安裝完畢並啟動。
- 要架設 HTTPS Server 的話,依照 Raspberry Pi 的實作 - 產生一張自己核發的 SSL 憑證 的步驟,產生一張自己簽發的憑證。
開始安裝
Nginx 要提供 PHP 的支援,一般都會配合 PHP-FPM (FastCGI Process Manager) 來運作。
直接從 Raspbian 套件庫安裝即可。
sudo apt-get -y install php5-fpm
而目前 PHP 最新的穩定版是 5.6.4,不過不建議自行編譯,因為 Raspberry pi 的硬體等級太低,須花費太多時間。
有興趣的朋友請參考 Raspberry Pi台灣樹莓派 - [進階] 安裝 Raspberry Pi 的 Toolchain 或 google 關鍵字「cross compiler」。
也可以依照 Raspberry Pi 的基礎 - 系統設定的調教 裡,「修改套件庫的來源」的步驟,將套件來源改成 testing。
調整 Nginx 設定
編輯 nginx 的主站台設定檔。
sudo vi /etc/nginx/sites-enabled/default
找到下列的文字。
########## 我是分隔線 ##########
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# 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;
#}
########## 我是分隔線 ##########
改成這樣。
########## 我是分隔線 ##########
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
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;
}
########## 我是分隔線 ##########
調整 PHP-FPM 設定
Nginx 配合 PHP-FPM 時,有一個漏洞會導致在瀏覽器輸入類似 http://raspberrypi/123.jpg/bug.php 的 URL 時,PHP 檔案會被成功執行。
打開 PHP-FPM 的主設定檔。
sudo vi /etc/php5/fpm/php.ini
在設定檔裡找到 cgi.fix_pathinfo=1,改成 cgi.fix_pathinfo=0。如果沒有找到的話,也請加上這個參數。
啟動服務
重新啟動 Nginx 及 PHP 服務。
sudo service nginx restart
sudo service php5-fpm restart
新增一個 PHP 測試頁。
sudo vi /usr/share/nginx/html/info.php
輸入下列文字。
########## 我是分隔線 ##########
<?php
phpinfo();
?>
########## 我是分隔線 ##########
用瀏覽器打開 http://Raspberry Pi 的 IP/info.php,出現下列的 PHP 資訊頁面時,就代表設定成功了。
系列文章
- Raspberry Pi 的實作 - 用 Nginx 架設網頁伺服器
- Raspberry Pi 的實作 - 產生一張自己核發的 SSL 憑證
- Raspberry Pi 的實作 - 在 Nginx 網頁伺服器上提供 PHP 的支援
參考資料
- waiting: cgi.fix_pathinfo=1时终极解决Nginx文件类型错误解析漏洞的方法
- Soul & Shell Blog - 無堅不摧,唯快不破!快改用 Nginx + PHP-FPM 取代 Apache 吧!
更新紀錄
- 2014/10/23 撰文。
- 2015/01/22 更新 PHP-FPM 的版號。
大大,那個漏洞在新版的PHP裡面已經沒有了~
回覆刪除因為在 www.conf 中有個 security.limit_extensions ,參數為php,也就是說只能連結到副檔名為php的文件
P.S. OpenSSL 不支援 1.0.1了,我自己是灌了1.0.2o~不過步驟差不多,所以沒關係