Nginx是一款輕量級的Web server/反向代理server及電子郵件(IMAP/POP3)代理server。並在一個BSD-like 協議下發行。由俄羅斯的程式設計師Igor Sysoev所開發。供俄國大型的入口站點及搜尋引擎Rambler(俄文:Рамблер)使用。其特點是佔有記憶體少,併發能力強,中國大陸使用nginx站點使用者有:新浪、網易、騰訊等。
在一些大型的專案中,Nginx常常是用作負載均衡的,Nginx將請求依照一定的規律分發給分散式的Web Server,這樣能夠解決Web Server是專案效能瓶頸的問題。這樣便構成了LNMPA架構,即Linux+Nginx+Mysql+PHP+Apache,有相同功能的還有LVS,可是各有優缺點,最好的是F5硬體,可是價格很昂貴;同一時候Nginx也很適合處理靜態頁面。檔案上傳與下載的server,在這些業務上。其它server軟體是無法比擬的。事實上如今有許多專案就直接用Nginx作Web server,Nginx做Web server在處理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;#監聽8080port
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和8080port,開發方法也是參見Nginx安裝方法那篇部落格。然後在瀏覽器中進行訪問測試,檢查配置是否成功。測試結果例如以下:
4.192.168.1.18 Nginxserver反向代理與負載均衡配置:
######################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方法去網上找吧,非常easy,在hosts檔案里加入
192.168.1.18 yii.nginx.com
6.瀏覽器端訪問yii.nginx.com,多訪問幾次。這樣我們就能夠看到,會依照權重更換顯示80port和8080port的內容。
至此。Nginx負載均衡、反向代理配置完成。
Nginx負載均衡的分發方式有4種:
1.輪詢。預設採取此方式,Nginx會依照請求時間的先後順序進行輪詢分發,若某臺Web Server當機,Nginx自己主動將其摘掉。
2.weight,權重,即輪詢的機率。值越大,被分發的可能性越大,用於後端server效能不均的情況。
3.ip_hash,每一個請求按訪問ip的hash結果分配,這樣每一個訪客固定訪問一個後端server,能夠解決共享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等均能夠。