我是山姆鍋

Apache HTTPd 是很好的網站伺服器,但是對於 CPU 跟記憶體的要求較高,對於架設在 VPS 上面網站來說, 需要一個更輕量級的解決方案。越來越多人選擇使用 Nginx 架設網站,主要考量便是它的快速、穩定以及輕量的特性。

何謂 LNMP?

LNMP 是 Linux, Nginx, MySQL, PHP/Perl/Python 的縮寫,是指建構在 Linux 作業系統上,使用 Nginx 作為網站伺服器, MySQL 作為資料庫伺服器,支援 PHP, Perl 或者 Python 的執行環境。本文只限定在 PHP 環境上。

安裝環境

山姆鍋的環境是租用 Linode 的 512 VPS,基本資料如下:

1
2
作業系統: 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 內建的軟體庫中,需要加入第三方軟體庫,使用下列指令:

1
2
3
# apt-get install python-software-properties
# add-apt-repository ppa:brianmercer/php
# apt-get update

使用下列指令安裝 PHP 支援:

1
2
3
# 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,山姆鍋修改的設定值有:

1
2
3
4
5
6
7
8
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 資料庫,只需要執行:

1
# apt-get install mysql-server php5-mysql

安裝過程會提示變更 MySQL ‘root’ 帳戶的權限,記得一定要設定一個安全的密碼。

安裝 Nginx

安裝 Nginx 使用 Ubuntu 內建的軟體庫安裝 Nginx 相當容易,只要執行下列指令:

1
# apt-get install nginx

設定 Nginx 虛擬主機

假設讀者使用的域名為 example.com,且希望 www.example.com 重新指向 example.com 以避免搜尋引擎誤判為重複內容。在 /etc/nginx/site-enabled 中建構一個檔案 (或者一個符號連結到真正的檔案),其內容為:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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 目錄底下,建構一個檔案,其內容為:

1
2
3
upstream php5-fpm-sock {
server unix:/var/run/php5-fpm.sock;
}

接著重新啟動 Nginx 跟 PHP-FPM 讓設定生效。

1
2
# /etc/init.d/php5-fpm restart
# /etc/init.d/nginx restart

結語

按照這樣的安裝步驟,應該就可以有個基本的 LNMP 執行環境。但這樣一個設定方式其實還欠缺其他東西,如防火牆設定,這些就請讀者參考本站或者網路其他文章了。