Apache HTTPd 是很好的網站伺服器,但是對於 CPU 跟記憶體的要求較高,對於架設在 VPS 上面網站來說, 需要一個更輕量級的解決方案。越來越多人選擇使用 Nginx 架設網站,主要考量便是它的快速、穩定以及輕量的特性。
何謂 LNMP?
LNMP 是 Linux, Nginx, MySQL, PHP/Perl/Python 的縮寫,是指建構在 Linux 作業系統上,使用 Nginx 作為網站伺服器, MySQL 作為資料庫伺服器,支援 PHP, Perl 或者 Python 的執行環境。本文只限定在 PHP 環境上。
安裝環境
山姆鍋的環境是租用 Linode 的 512 VPS,基本資料如下:
作業系統: Ubuntu 10.04 64-bit
記憶體: 512MB
安裝 php-fpm
對於提供 PHP 執行環境,Nginx 支援 fast-cgi 模式來執行 PHP 腳本。雖然使用 spawn-fcgi 套件安裝比較容易, 但 php-fpm 已經正式納入 PHP 體系,為了以後移植方便,山姆鍋選擇以 php-fpm 作為 PHP 執行方案。 由於 php-fpm 不在 Ubuntu 10.04 內建的軟體庫中,需要加入第三方軟體庫,使用下列指令:
# apt-get install python-software-properties
# add-apt-repository ppa:brianmercer/php
# apt-get update
使用下列指令安裝 PHP 支援:
# apt-get -y install php5-cli php5-common php5-mysql php5-suhosin php5-gd
# apt-get -y install php5-fpm php5-cgi php-pear php5-memcache php-apc
# service php5-fpm start
設定 PHP-FPM
修改 /etc/php5/fpm/php5-fpm.conf,山姆鍋修改的設定值有:
listen = /var/run/php5-fpm.sock
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 500
由於沒有要讓 PHP FastCGI 可以被遠端存取,所以山姆鍋選擇採用 Unix socket 作為 Nginx 與 PHP 之間的溝通管道。
安裝 MySQL 資料庫伺服器
MySQL 這款資料庫軟體,基本上已經可以算是架站軟體必定支援的。安裝 MySQL 資料庫,只需要執行:
# apt-get install mysql-server php5-mysql
安裝過程會提示變更 MySQL ‘root’ 帳戶的權限,記得一定要設定一個安全的密碼。
安裝 Nginx
安裝 Nginx 使用 Ubuntu 內建的軟體庫安裝 Nginx 相當容易,只要執行下列指令:
# apt-get install nginx
設定 Nginx 虛擬主機
假設讀者使用的域名為 example.com
,且希望www.example.com
重新指向example.com
以避免搜尋引擎誤判為重複內容。在/etc/nginx/site-enabled 中建構一個檔案(或者一個符號連結到真正的檔案),其內容為:
server
server_name www.example.com;
rewrite ^/(.*) http://example.com/$1 permanent;
}
server {
server_name www.example.com example.com;
access_log /srv/www/example.com/logs/access.log;
error_log /srv/www/example.com/logs/error.log;
root /srv/www/example.com/webroot;
location / {
index index.html index.htm index.php;
}
location ~ \.php$ {
fastcgi_pass php5-fpm-sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
讓 Nginx 跟 PHP-FPM 溝通
設定了 Nginx,但是 PHP 還無法正確執行,因為我們還沒有讓 Nginx 知道如何跟 PHP-FPM 溝通。在/etc/nginx/conf.d 目錄底下,建構一個檔案,其內容為:
upstream php5-fpm-sock {
server unix:/var/run/php5-fpm.sock;
}
接著重新啟動 Nginx 跟 PHP-FPM 讓設定生效。
# /etc/init.d/php5-fpm restart
# /etc/init.d/nginx restart
結語
按照這樣的安裝步驟,應該就可以有個基本的 LNMP 執行環境。但這樣一個設定方式其實還欠缺其他東西,如防火牆設定,這些就請讀者參考本站或者網路其他文章了。