nginx配置文件組成
從配置文件開始到events塊之間的內容,主要會設置一些影響nginx服務器整體運行的配置指令。
比如:worker_processes 1;worker_processes值越大,可以支持的并發(fā)處理量越多。
events涉及的指令主要影響nginx服務器與用戶的網絡連接。
比如:worker_connections 1024; 支持的最大連接數。
Nginx服務器配置中最頻繁的部分
http塊包括http全局塊,server塊
Nginx配置實例
80、8080端口都需要對外開放
service {
listen 80;
service_name 192.168.17.129;
location / {
root html;
proxy_pass http://127.0.0.1:8080; // 80端口轉發(fā)到8080端口
index index.html index.htm;
}
}
訪問192.168.17.129:80 時轉發(fā)到8080端口
實現效果:使用Ngix反向代理,根據訪問的路徑跳轉到不同端口的服務中
service {
listen 9001;
service_name 192.168.17.129;
location ~ /edu/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081;
}
}
訪問192.168.17.129:9001/edu/index.html 轉發(fā)端口至8080
訪問192.168.17.129:9001/vod/index.html 轉發(fā)端口至8081
9001、8081、8080 端口都需要對外開放
該指令用于匹配URL。
語法:location [ = | ~ | ~* | ^~] url {
}
1. =:用于不含正則表達式的url前,要求請求字符串與url嚴格匹配,如果匹配成功,就停止繼續(xù)向下搜索并立即處理該請求。
2. ~:用于表示url包含正則表達式,并且區(qū)分大小寫。
3. ~*:用于表示url包含正則表達式,并且不區(qū)分大小寫。
4. ^~:用于不含正則表達式的url前,要求nginx服務器找到標識url和請求字符串匹配度最高的location后,立即使用此location處理請求,而不再使用location塊中的正則url和請求字符串做匹配。
注意:如果url包含正則表達式,則必須要有~或者~*表示。
負載均衡
1.在http模塊加上:(舉例)
upstream www.myweb.com {
server 127.0.0.1:9100 weight = 3;
server 127.0.0.1:9200 weight = 1;
}
其中weight代表權重,用于后端服務器性能不均的情況下,訪問比率約等于權重之比,權重越大訪問機會越多。
upstream是配置nginx與后端服務器負載均衡非常重要的一個模塊,并且它還能對后端的服務器的健康狀態(tài)進行檢查,若后端服務器中的一臺發(fā)生故障,則前端的請求不會轉發(fā)到該故障的機器。
2.在server模塊里添加:(舉例)
location /myweb {
proxy_pass http://www.myweb.com;
}
注意:這里的www.myweb.com要和upstream后面配置的地址或者域名保持一致。
- Nginx常用負載均衡策略(后端做負載均衡的服務器必須IP段保持一致)
1.輪詢(默認)
每個請求輪流分配到不同的后端服務器,如果后端服務器down掉,將自動刪除。
舉例:
upstream 域名 {
server 192.168.0.14;
server 192.168.0.15;
}
2.權重
每個請求按一定比例分發(fā)到不同的后端服務器,weight值越大訪問的比例越大,用于后端服務器性能不均的情況。
舉例:
upstream 域名 {
server 192.168.0.14 weight=3;
server 192.168.0.15 weight=1;
}
該情況兩個服務器的訪問比例為3:1
3.ip_hash
也叫域名綁定,每個請求按訪問ip的hash值分配,這樣每個訪問客戶端會固定訪問一個后端服務器,可以解決會話session丟失的問題;
舉例:
upstream 域名 {
ip_hash;
server 192.168.0.14;
server 192.168.0.15;
}
4.最少連接
web請求會被轉發(fā)到連接數最少的服務器上。
舉例:
upstream 域名 {
least_conn;
server 192.168.0.14;
server 192.168.0.15;
}
upstream 域名 {
server 192.168.0.14;
server 192.168.0.15 backup;(其他所有的非backup機器down的時候,才會請求backup服務器,相當于是一個備用服務器)
}
upstream 域名 {
server 192.168.0.14;
server 192.168.0.15 down;(down表示當前的server是down狀態(tài),不參與負載均衡)
}
動靜分離
把所有靜態(tài)資源的訪問改為訪問nginx,因為nginx更擅長于靜態(tài)資源的處理,性能更好,效率更高。所以在實際應用中,我們將靜態(tài)資源比如圖片、css、html、js等交給nginx處理。
nginx靜態(tài)代理實現方式:
1.通過在nginx.conf配置文件中添加靜態(tài)資源的location。
舉例:
#當訪問靜態(tài)資源,則從linux服務器/var/www/static目錄下獲取
location ~ .*\.(js|css|html|htm|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
root /var/www/static;
}
其中:
~ :表示正則匹配,也就是說后面的內容可以是正則表達式。
第一個. :表示任意一個字符。
* :表示一個或多個字符。
\. :是轉義字符,是后面這個點的轉義字符。
| :表示或者
$ :表示結尾
2.通過在nginx.conf配置文件中配置靜態(tài)資源所在目錄實現。
舉例:
location ~ .*/(css|js|img|images) {
root /var/www/static;
}
我們將靜態(tài)資源放入/var/www/static目錄下,然后用戶訪問時由nginx返回這些靜態(tài)資源。
虛擬主機
虛擬主機,就是把一臺物理服務器劃分成多個“虛擬”的服務器,這樣我們的一臺物理服務器就可以當作多個服務器來使用,從而可以配置多個網站。
Nginx提供虛擬主機功能,就是為了讓我們不需要安裝多個Nginx,就可以運行多個網站。
Nginx下,一個server標簽就是一個虛擬主機。
Nginx的虛擬主機就是通過nginx.conf中server節(jié)點指定的,想要設置多個虛擬主機,配置多個server節(jié)點即可。
舉例:
1.基于域名的虛擬主機
基于域名的虛擬主機是最常見的一種虛擬主機
server {
listen 80;
server_name www.shop.com;
location /myweb {
proxy_pass http://www.shop.com
}
}
server {
listen 80;
server_name www.p2p.com;
location /myweb {
proxy_pass http://www.p2p.com
}
}
2.基于端口的虛擬主機
基于端口的虛擬主機配置,使用端口來區(qū)分。
瀏覽器使用同一個域名+端口 或 同一個IP地址+端口訪問
server {
listen 8080;
server_name www.myweb.com;
location /myweb {
proxy_pass http://www.myweb.com;
}
}
server {
listen 9090;
server_name www.myweb.com;
location /p2p {
proxy_pass http://www.p2p.com;
}
}
配置多個虛擬主機方式:
方式一:就是在nginx.conf文件中添加多個server
方式2:通過include的方式引入虛擬主機配置
include /usr/local/nginx/conf/vhost/vhost.conf;
將虛擬目錄的配置文件加入到“http {}”部分的末尾,與其他server并列。