1、nginx 中 location 應用實例
location 是 nginx 的精華,nginx 就是通過攔截到的請求去對配置好的 location 塊(location block)進行請求代理的,location 就是用來具體配置代理路徑的。
2、nginx反向代理應用實例
1>環境說明:centos7.4
192.168.129.128 proxy-server(nginx)
192.168.129.129 web-server(httpd)
2>准備測試web服務器環境
web-server安裝httpd
[root@web-server ~]# yum install -y httpd
3>提供web測試頁面
[root@web-server ~]# echo "<h1>web.test.com</h1>" > /var/www/html/index.html [root@web-server ~]# vim /etc/httpd/conf/httpd.conf ServerName www.example.com:80 //去掉該行注釋
4>啟動httpd服務
[root@web-server1 ~]# systemctl start httpd
[root@web-server2 ~]# systemctl start httpd
5>訪問測試web-server服務器
6>配置 http 反向代理
[root@proxy-server ~]# vim /apps/nginx/conf/www.proxy.com.conf //該文件間接include指向/etc/nginx/nginx.conf中的httpd模塊 server { listen 80; server_name www.proxy.com; location / { proxy_pass http://192.168.129.129; } } [root@proxy-server ~]# systemctl restart nginx
7>配置本地域名解析,訪問測試
3、 nginx負載均衡配置實例
由於前面,nginx 只代理了后端一台服務器,但由於我們網站名氣大漲訪問的人越來越多一台服務器實在是頂不住,於是我們加了多台服務器,那么多台服務器又怎么配置代理呢,我們這里以兩台服務器為案例,來配置 nginx 負載均衡。
1>環境說明:centos7.4
192.168.129.128 balanced-server(nginx)
192.168.129.129 web-server1(httpd)
192.168.129.130 web-server2(httpd)
2>准備web測試環境,提供測試頁面,啟動服務
web-server1、web-server2分別安裝httpd
[root@web-server1 ~]# yum install -y httpd
[root@web-server1 ~]# echo "<h1>web1.test.com</h1>" > /var/www/html/index.html [root@web-server1 ~]# vim /etc/httpd/conf/httpd.conf ServerName www.example.com:80 //去掉該行注釋
[root@web-server1 ~]# systemctl start httpd
[root@web-server2 ~]# yum install -y httpd [root@web-server2 ~]# echo "<h1>web2.test.com</h1>" > /var/www/html/index.html [root@web-server2 ~]# vim /etc/httpd/conf/httpd.conf ServerName www.example.com:80 //去掉該行注釋
[root@web-server1 ~]# systemctl start httpd
3>訪問測試web-server服務器
4>配置nginx負載均衡
[root@balanced-server ~]# vim /apps/nginx/conf/www.balanced.com.conf //該文件間接include指向/etc/nginx/nginx.conf中的httpd模塊 #設定負載均衡的服務器列表
upstream test.net { ip_hash; server 192.168.129.129:80; server 192.168.129.130:80; } server { listen 80; server_name www.balanced; location / { proxy_pass http://test.net; } } [root@balanced-server ~]# systemctl restart nginx
注意請先停掉配置的其他server虛擬主機,以防產生沖突;
upstream 是 Nginx 的 HTTP Upstream 模塊,這個模塊通過一個簡單的調度算法來實現客戶端 IP 到后端服務器的負載均衡。在上面的設定中,通過 upstream 指令指定了一個負載均衡器的名稱 test.net。這個名稱可以任意指定,在后面需要用到的地方直接調用即可。
5>配置本地域名解析,訪問測試
停掉web-server1,再進行訪問測試
[root@web-server1 ~]# systemctl stop httpd
6>拓展:upstream 支持的負載均衡算法
nginx 的負載均衡模塊目前支持 4 種調度算法,下面進行分別介紹,其中后兩項屬於第三方調度算法。
(1)輪詢(默認),每個請求按時間順序逐一分配到不同的后端服務器,如果后端某台服務器宕機,故障系統被自動剔除,使用戶訪問不受影響。Weight 指定輪詢權值,Weight 值越大,分配到的訪問機率越高,主要用於后端每個服務器性能不均的情況下。
upstream test.net { ......; server 192.168.129.129:80 weight=1; //該server有1/3的訪問概率 server 192.168.129.130:80 weight=2; //該server有2/3的訪問概率 }
(2)ip_hash,每個請求按訪問 IP 的 hash 結果分配,這樣來自同一個 IP 的訪客固定訪問一個后端服務器,有效解決了動態網頁存在的 session 共享問題。
(3)fair,這是比上面兩個更加智能的負載均衡算法。此種算法可以依據頁面大小和加載時間長短智能地進行負載均衡,也就是根據后端服務器的響應時間來分配請求,響應時間短的優先分配。Nginx 本身是不支持 fair 的,如果需要使用這種調度算法,必須下載 Nginx 的upstream_fair 模塊。
(4)url_hash,此方法按訪問 url 的 hash 結果來分配請求,使每個 url 定向到同一個后端服務器,可以進一步提高后端緩存服務器的效率。Nginx 本身是不支持 url_hash 的,如果需要使用這種調度算法,必須安裝 Nginx 的 hash 軟件包。
7>upstream 支持的狀態參數
在 HTTP Upstream 模塊中,可以通過 server 指令指定后端服務器的 IP 地址和端口,同時還可以設定每個后端服務器在負載均衡調度中的狀態。
常用的狀態有:
down,表示當前的 server 暫時不參與負載均衡。
backup,預留的備份機器。當其他所有的非 backup 機器出現故障或者忙的時候,才會請求backup 機器,因此這台機器的壓力最輕。
max_fails,允許請求失敗的次數,默認為 1。當超過最大次數時,返回 proxy_next_upstream模塊定義的錯誤。
fail_timeout,在經歷了 max_fails 次失敗后,暫停服務的時間。max_fails 可以和 fail_timeout一起使用。
max_fails,允許請求失敗的次數,默認為 1。當超過最大次數時,返回 proxy_next_upstream模塊定義的錯誤;fail_timeout,在經歷了 max_fails 次失敗后,暫停服務的時間。max_fails 可以和 fail_timeout一起使用,進行健康狀態檢查。再配置一個backup,防止所有的服務器都不能提供服務。
注意:當負載調度算法為 ip_hash 時,后端服務器在負載均衡調度中的狀態不能是 weight和backup。