前言

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 執行環境 。 但這樣一個設定方式其實還欠缺其他東西 , 如防火牆設定 , 這些就請讀者參考本站或者網路其他文章了 。