Skip to content

在 Linode 上使用 Nginx 架設 LNMP 環境

Published: 5 分鐘

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

郭信義 (Sam Kuo)

奔騰網路科技技術長,專長分散式系統、Web 應用與雲端服務架構、設計、開發、部署與維運。工作之餘,喜歡關注自由軟體的發展與應用,偶爾寫一下部落格文章。

你可能會有興趣的文章