LNAMP是Linux系統上的開源架站組合,從名稱來看,「L」表示「Linux」作業系統,「N」表示「Nginx」網頁伺服器,「A」表示「Apache」網頁伺服器,「M」表示「MySQL」資料庫,「P」表示「PHP」程式語言,而phpMyAdmin則是以PHP作為基礎的資料庫管理工具。使用效能較佳的Nginx來處理靜態檔案、反向代理、資源分配,搭配成熟的Apache來處理動態網頁程式,可以比單純使用Apache網頁伺服器還要來的高效,也可以保有Apache伺服器的.htaccess檔案的支援。照著這篇文章做,三十分鐘內,一個屬於您自己的網頁伺服器便能誕生了!



在您繼續閱讀這篇文章之前,最好先釐清您的網站是否真的有需要Apache伺服器(有.htaccess檔案的需求嗎?還是要將Nginx與PHP程式分散到不同的環境?),如果沒有的話,筆者不建議使用Apache來跑PHP程式,您應該會比較需要閱讀以下這兩篇文章,透過Nginx + FPM來執行PHP程式,以獲得更佳的穩定性和效能:

https://magiclen.org/ubuntu-server-nginx-php/
https://magiclen.org/ubuntu-server-mysql-php/

在架設LNAMP之前,您必須要有LAMP Server,即Linux + Apache + MySQL + PHP (+ phpMyAdmin),然後再來安裝Nginx網頁伺服器並進行設定。請詳細閱讀這篇文章來架設LAMP Server,如果您已經有LAMP Server,也是可以看一下文章:

https://magiclen.org/lamp/

LNAMP Server

修改Apache的連接埠

由於我們要使用Nginx來將收到的PHP資源的請求反向代理給Apache來處理,原先Apache對外使用的連接埠需要先空出來讓Nginx使用才可以。

如果您剛安裝完LAMP Server,那麼您的Apache預設會監聽連接埠80。要改變Apache所監聽的連接埠,要去編輯/etc/apache2/ports.conf檔案,將Listen所指定的連接埠改成其它沒有對外的(被防火牆擋住的),筆者在此將其改為8080

lnamp

接著要修改Apache的虛擬主機(Virtual Host)所監聽的連接埠。如下圖:

lnamp

然後使用以下指令讓Apache重新載入設定。

sudo apachectl graceful

lnamp

安裝Nginx

請閱讀這篇文章來安裝Nginx,並了解它的使用方式:

https://magiclen.org/ubuntu-server-nginx/

設定Nginx

要讓Nginx收到的請求反向代理給Apache來處理,Nginx的虛擬主機需要加上如下的設定:

index index.html index.htm index.php;

set $apache http://127.0.0.1:8080;

location @apache {
    proxy_pass $apache;
    include proxy_params;
}

location / {
    try_files $uri $uri/ @apache;
}

location ~ \.php$ {
    proxy_pass $apache;
    include proxy_params;
}

location ~ /\.ht {
    deny all;
}

lnamp

以上設定,會將以.php結尾的網址丟給Apache伺服器來處理,且如果遇到Nginx不能處理的路徑,也會嘗試交給Apache伺服器來處理。如果網址的路徑的結尾是/,就會以index.html.index.htmindex.php這樣的順序來嘗試能否在該層路徑下存取到資源,當然index.php因為是以.php結尾,所以是會交給Apache伺服器來處理的。至於Apache所使用到的.htaccess.htpasswd等檔案名稱以.ht為開頭的檔案或目錄則會被Nginx阻擋掉,不允許存取。通常會將Nginx的虛擬主機的根目錄和Apache的虛擬主機的根目錄設為一樣的。

如果您的Apache伺服器是在別台電腦上,或者不是使用連接埠8080,要自行將以上設定中的127.0.0.1:8080換成您的Apache伺服器使用的IP和連接埠。

設定好後使用以下指令讓Nginx重新載入設定,LNAMP Server就大功告成了!

sudo nginx -s reload

lnamp