Nginx是一款輕量級的Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,并在一個BSD-like 協定下發行。由俄羅斯的程式設計師Igor Sysoev所開發,供俄國大型的入口網站及搜尋引擎Rambler(俄文:Рамблер)使用。其特點是占有記憶體少,并發能力強,中國大陸使用nginx網站使用者有:新浪、網易、騰訊等。
Nginx 是一個很強大的高性能Web和反向代理伺服器,它具有很多非常優越的特性,在高連接配接并發的情況下,Nginx是Apache伺服器不錯的替代品,Nginx在美國是做虛拟主機生意的老闆們經常選擇的軟體平台之一。能夠支援高達 50,000 個并發連接配接數的響應。
在一些大型的項目中,Nginx經常是用作負載均衡的,Nginx将請求按照一定的規律分發給分布式的Web Server,這樣可以解決Web Server是項目性能瓶頸的問題,這樣便構成了LNMPA架構,即Linux+Nginx+MySQL+PHP+Apache,有同樣功能的還有LVS,但是各有優缺點,最好的是F5硬體,但是價格非常昂貴;同時Nginx也非常适合處理靜态頁面,檔案上傳與下載下傳的伺服器,在這些業務上,其他伺服器軟體是無法比拟的;其實作在有很多項目就直接用Nginx作Web
伺服器,Nginx做Web 伺服器在處理PHP業務邏輯上可以沒有Apache那麼強大,假如單獨用Nginx不能滿足您項目的需要,那就把業務分離開,Nginx做負載均衡,處理靜态頁,負責檔案上傳下載下傳,PHP業務邏輯交給Apache。
Nginx最好安裝在Linux系統上,因為在Linux下可以讓Nginx達到預期的性能,的安裝方法可以參見:
http://blog.csdn.net/jhq0113/article/details/43812895
反向代理與負載均衡配置:
Web Server1: 192.168.1.16:80 Nginx
Web Server2: 192.168.1.16:8080 Nginx
臨 時 域 名: yii.nginx.com
Nginx Server: 192.168.1.18:80
本地隻有兩台機器,是以Web Server就都放在192.168.1.16上了,到真實環境下,配置類似,真實環境下隻是Web Server的IP不同,PHP程式相同,這裡為了示範區分,Web Server配置不同的PHP程式。
1.在192.168.1.16 Nginx配置
user www; #運作使用者
worker_processes 1; #工作程序數量,最好是CPU核心數量
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
charset utf-8; #編碼,最好指定
sendfile on;
keepalive_timeout 65;
#######################myphp8080.com配置#########################
server{
listen 8080;#監聽8080端口
server_name myphp8080.com;
root /home/data/web/php/myphp8080.com; #web目錄
location / {
index index.php index.html index.htm;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
#######################myphp80.com配置#########################
server {
listen 80;
server_name myphp80.com
root /home/data/web/php/myphp80.com;
location / {
index index.php index.html index.htm;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
2.192.168.1.16 在web目錄下分别建立myphp80.com和myphp8080.com目錄,各自目錄分别建立index.php檔案,php代碼分别為:
myphp80.com目錄中index.php代碼:
<?php
echo json_encode(['type'=>'200','data'=>'80']);
?>
myphp8080目錄中index.php代碼:
<?php
echo json_encode(['type'=>'200','data'=>'8080']);
?>
将兩個目錄權限交給www組www使用者:
[root@jhq0113 php]# chown -R www:www myphp80.com/
[root@jhq0113 php]# chown -R www:www myphp8080.com/
然後,重新開機Nginx服務
[root@jhq0113 php]# service nginx restart
3.防火牆開放80和8080端口,開發方法也是參見Nginx安裝方法那篇部落格,然後在浏覽器中進行通路測試,檢查配置是否成功,測試結果如下:
4.192.168.1.18 Nginx伺服器反向代理與負載均衡配置:
######################yii.nginx.com反向代理負載均衡#########################
#負載均衡配置,以權重方式分發
upstream yii.nginx.com {
server 192.168.1.16:80 weight=5;
server 192.168.1.16:8080 weight=5;
}
#反向代理配置
server {
listen 80;
server_name yii.nginx.com;
charset utf-8;
location /{
proxy_pass http://yii.nginx.com;
}
}
重新開機Nginx服務
[root@jhq0229 php]# service nginx restart
5.本地域名,浏覽器端需要配置hosts,配置hosts方法去網上找吧,很簡單,在hosts檔案中添加
192.168.1.18 yii.nginx.com
6.浏覽器端通路yii.nginx.com,多通路幾次,這樣我們就可以看到,會按照權重更換顯示80端口和8080端口的内容。
至此,Nginx負載均衡、反向代理配置完畢。
Nginx負載均衡的分發方式有4種:
1.輪詢,預設采取此方式,Nginx會按照請求時間的先後順序進行輪詢分發,若某台Web Server當機,Nginx自動将其摘掉。
2.weight,權重,即輪詢的幾率,值越大,被分發的可能性越大,用于後端伺服器性能不均的情況。
3.ip_hash,每個請求按通路ip的hash結果配置設定,這樣每個訪客固定通路一個後端伺服器,可以解決共享session的問題。
4.自定義規則
舉例:
upstream myphp.com {
server 192.168.1.16:80 down;
server 192.168.1.18:80 weight=2;
server 192.168.1.13:80;
server 192.168.1.12:80 backup;
}
配置詳解:
down 表示目前的Web Server暫時不參與負載
weight 預設為1.weight越大,負載的權重就越大。
backup: 其它所有的非backup Server down或者忙的時候,請求backup機器。是以這台機器壓力會最輕。
backup是利用nginx的熱備功能,這也是最典型的應用帶來的重要好處之一,當非backup Server能夠很好的為Client提供服務的時候,backup Server不對外界提供服務,此時backup Server處于冷狀态;當所有非backup
Server不能很好的為Client提供服務的時候,backup Server為Client提供服務,做到了熱備,某台或者所有非backup Web Server當機不會影響整個Web項目的通路功能,Web項目仍然可以為Client提供服務。
Nginx做負載均衡,對Web Server的作業系統和語言環境沒有特殊要求,Web Server的作業系統可以是Linux也可以是Windows Server,Web程式是Java、PHP、Asp.NET等均可以。