18 September 2012

大部分在架設網站的人都會採用LAMP的方式!
就是傳統的Linux+Apache+MySQL+PHP。
但由於這種方式對一般人來說已經是過於簡單了,
甚至已經有一鍵包...只要一直按"下一步"就可以完成安裝...
所以在這就不多做介紹。


在這要介紹一個比較特別的架構叫做LNAMP,
LNAMP和之前的差不多,但多了一個Nginx
Nginx和Apache一樣是web server,
但在這邊我們將在我們的Linux Server上同時安裝二個Web Server(Nginx、Apache)。
然後利用reverse proxy的概念來結合這二個Web Server,


由於Nginx在處理靜態網頁、文件的效能較好,
而Apache一直以來都算是一個穩定的Web Server,但Apache很耗CPU、memory。
但是Nginx並不支援PHP,因此我們可以結合這兩個Web Server的特性來架設我們的網站!



首先先看到下面那張圖,這張圖是我們網站的架構!
我們可以看到圖中的兩個粉紅色區塊,
這兩個區塊都是web server。
而在這邊我會把Nginx的port設為80,
Apache的port改為8080。

當User request http://www.example.com/index.html 的時候,
我們就會透過Nginx response給User!  (就是下圖中左邊的區塊)
但是當User request  http://www.example.com/index.php 的時候,
我們一樣一開始會透過Nginx,可是Nginx會透過reverse proxy的機制,
reverse給Apache進行處理!!!  (就是下圖中右邊的區塊)



透過上圖中的機制可以有效的快速response user,
也可以減輕Server的負擔!
甚至可以減輕MySQL的負擔!
記得以前在某公司當intern的時候,
由於該公司的某項服務在當時似乎是國內前幾大的,
然後他們某項服務就是利用rewrite的概念,盡量不會有Dynamic Page,
他們系統每一陣子會把Dynamic Page的內容rewite成一個Static Page,
這樣他們的User都會去request 該Static Page,
而不會去request Dynamic Page,同時也減輕了DB的負擔!


講完架構以後,
接著要教大家怎麼把Nginx+Apache同時架起來!
我的環境是Ubuntu,
在這我就不教大家怎麼install Apahce和PHP了...應該是common sense!

進行說明設定Nginx之前,
如果你已經將Apache安裝起來了,那請先把你的Apache port改成8080。
因為Nginx等等會使用80。


完成上述步驟,就來安裝Nginx,
sudo apt-get install nginx

安裝完成以後,如果你去request自己網站底下的某隻.php
例如:www.example.com/index.php
那麼是跑不起來的,因為Nginx並不支援任何的Dynamic Language(php, perl, jsp...etc)
所以要把有關Dynamic Page的任何request reverse proxy至apache去!


所以就要進行設定,首先要把nginx的port改為80
cd /etc/nginx/sites-available  #先切換至nginx的設定目錄底下
sudo vim default #修改設定檔

打開設定檔以後,記得在Server{}裡面加入下面的設定,

listen 80 #預設是mark起來的,把最前面的#號拿掉就好,如果沒有這行就自己加吧!

# 下面這段的意思是,當遇到.php檔名的就把它轉向至8080
location ~ \.php$ {
proxy_pass http://127.0.0.1:8080;
}

上面的設定主要就是過濾掉.php,
把php通通交給apache進行處理,
當然你也可以做更細部的過濾設定,
例如.jpg、.css、.js等等之類的靜態檔案都cached起來,
不要進行不必要的request。
例如
location ~* \.(jpg|png)$ {
expires 30d; # cached 30天的意思
}


完成上面的設定以後,
就將Nginx重開吧!
sudo /etc/init.d/nginx restart



基本上重開以後,應該就完成LNAMP的架構了!







blog comments powered by Disqus