這篇文章主要介紹了Nginx正反向代理及負載均衡等功能實現配置代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下 系統環境: VirtualBox Manager Centos6.4 nginx1.10.0 IP對應的機器名: IP 機器名 角色名 10.0.0.139 [elk] client 10.0.0.136 [lvs-master] nginx server 10.0.0.137 [kvm] web server 1 10.0.0.111 [lvs-backup] web server 2 一、正向代理 1.1 環境介紹 1.2 配置介紹 Nginx server:(內網地址:10.0.0.136,外網地址:172.16.27.64) 使用VirtualBox Manager虛擬出雙網卡。 [root@lvs-master conf.d]# ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:30:56:99 inet addr:10.0.0.136 Bcast:10.255.255.255 Mask:255.0.0.0 inet6 addr: fe80::a00:27ff:fe30:5699/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:891978 errors:0 dropped:0 overruns:0 frame:0 TX packets:9509 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:81841095 (78.0 MiB) TX bytes:13339058 (12.7 MiB) eth1 Link encap:Ethernet HWaddr 08:00:27:55:4C:72 inet addr:172.16.27.64 Bcast:172.16.27.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe55:4c72/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:913671 errors:0 dropped:0 overruns:0 frame:0 TX packets:22712 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:109369858 (104.3 MiB) TX bytes:1903855 (1.8 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:36222 errors:0 dropped:0 overruns:0 frame:0 TX packets:36222 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:3899937 (3.7 MiB) TX bytes:3899937 (3.7 MiB) [root@lvs-master conf.d]# cat zxproxy.conf server { listen 80; #監聽的端口 server_name 10.0.0.136; #server的內容地址,與client需要網絡互通 resolver 172.16.5.1; #DNS,這個是DNS,訪問外網 location / { proxy_pass http://$http_host$request_uri; #$http_host和$request_uri是nginx系統變量,不需要替換,保持原樣 } Nginx client: 只有一個內網網卡,通過訪問Nginx server去訪問internet,其實翻墻、肉雞、之類的俗稱就是這個原理。 [root@kvm ~]# ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:72:8C:3B inet addr:10.0.0.137 Bcast:10.255.255.255 Mask:255.0.0.0 inet6 addr: fe80::a00:27ff:fe72:8c3b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1462448 errors:0 dropped:0 overruns:0 frame:0 TX packets:21130 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:145119904 (138.3 MiB) TX bytes:2814635 (2.6 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:60800 errors:0 dropped:0 overruns:0 frame:0 TX packets:60800 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:4831102 (4.6 MiB) TX bytes:4831102 (4.6 MiB) [root@kvm ~]# wget www.baidu.com --2016-06-08 13:02:08-- http://www.baidu.com/ 正在解析主機 www.baidu.com... 失敗:域名解析暫時失敗。 #無法訪問百度 wget: 無法解析主機地址 “www.baidu.com” [root@kvm ~]# export http_proxy=http://10.0.0.136:80 #設定環境變量,指定代理服務器的ip及端口 [root@kvm ~]# wget www.baidu.com #可以成功訪問百度了 --2016-06-08 13:08:15-- http://www.baidu.com/ 正在連接 10.0.0.136:80... 已連接。 已發出 Proxy 請求,正在等待回應... 200 OK 長度:未指定 [text/html] 正在保存至: “index.html.1” [ <=> ] 99,762 --.-K/s in 0.07s 2016-06-08 13:08:16 (1.36 MB/s) - “index.html.1” 已保存 [99762] 二、反向代理 介紹文章同正向代理 2.1 環境介紹 1.下面來看下測試頁面: [root@kvm ~]# yum install httpd [root@kvm ~]# echo "10.0.0.137" > /var/www/html/index.html [root@lvs-backup ~]# yum install httpd [root@lvs-backup~]# echo "10.0.0.111" > /var/www/html/index.html 2.看下效果: [root@lvs-backup html]# curl 10.0.0.111 10.0.0.111 [root@lvs-backup html]# curl 10.0.0.137 10.0.0.137 ##都成功了,我們進行下一步。 2.2 配置介紹 [root@lvs-master conf.d]# ls #nginx目錄下的配置文件 zxproxy.conf [root@lvs-master conf.d]# cp zxproxy.conf fxproxy.conf #復制一份,之前是正向代理,現在是反向代理 [root@lvs-master conf.d]# mv zxproxy.conf zxproxy.conf.bak [root@lvs-master conf.d]# cat fxproxy.conf server { listen 80; server_name 10.0.0.136; #根據環境介紹,nginx server ip location / { proxy_pass http://10.0.0.137; #被代理的服務器ip } #proxy_pass: proxy_pass URL #默認值:NO #使用字段:location,location中的if字段 #這個參數設置被代理服務器的地址和被映射的URL,地址可以使主機名、域名、IP加端口的模式,如: #proxy_pass http://192.168.1.6:8099/linuxtone/; [root@lvs-master conf.d]# service nginx restart #重啟加載配置 看下結果: #先登錄到實驗環境中的clinet機上,ip如下: [root@elk ~]# ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:3D:40:40 inet addr:10.0.0.139 Bcast:10.255.255.255 Mask:255.0.0.0 inet6 addr: fe80::a00:27ff:fe3d:4040/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2618345 errors:0 dropped:0 overruns:0 frame:0 TX packets:247926 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:336182790 (320.6 MiB) TX bytes:35145157 (33.5 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:177352 errors:0 dropped:0 overruns:0 frame:0 TX packets:177352 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:26547640 (25.3 MiB) TX bytes:26547640 (25.3 MiB) [root@elk ~]# curl 10.0.0.136 #訪問反向代理服務器 10.0.0.137 #我們看到訪問代理服務器,結果被轉發到了web server1上。 #接下來我們分別看下nginx-server和web-server1的日志: nginx-server: [root@lvs-master ~]# tail /var/log/nginx/access.log 10.0.0.139- - [08/Jun/2016:15:35:43 +0800] "GET / HTTP/1.1" 200 26 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "-" web-server: [root@kvm httpd]# tail /var/log/httpd/access_log 10.0.0.136 - - [08/Jun/2016:15:21:12 +0800] "GET / HTTP/1.0" 200 26 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" ##我們看到nginx-server上的nginx的日志,顯示訪問的用戶是10.0.0.139也就是我們環境的clinet, #而web-server上顯示的ip是10.0.0.136,也就是nginx-server。 #說白了反向代理,對客戶來說nginx-server就是真正的服務器,實際上,當用戶訪問nginx-server的時候,會將請求轉發到 #web-server1上,然后web-server1將請求的結果發給nginx-server,然后由ngin小-server將請求的結果轉交給用戶。 #在web-server上看到的都是代理的ip,能不能也看到真實用戶的ip呢? [root@lvs-master conf.d]# cat fxproxy.conf server { listen 80; server_name 10.0.0.136; #根據環境介紹,nginx server ip location / { proxy_pass http://10.0.0.137; #被代理的服務器ip proxy_set_header X-Real-IP $remote_addr; #多了這行 } [root@lvs-master conf.d]# service nginx restart [root@kvm ~]# tail /var/log/httpd/access_log 10.0.0.136 - - [08/Jun/2016:16:10:53 +0800] "GET / HTTP/1.0" 200 26 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" #改了之后還是顯示的是代理服務器的ip,我們去web-server上修改下配置 [root@kvm ~]# vim /etc/httpd/conf/httpd.conf LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent #修改為:(%h指的的訪問的主機,現在改為訪問的真實主機ip) LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent [root@kvm ~]# service httpd restart 停止 httpd: [確定] 正在啟動 httpd: [確定] [root@kvm ~]# tail /var/log/httpd/access_log 10.0.0.136 - - [08/Jun/2016:16:10:53 +0800] "GET / HTTP/1.0" 200 26 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" 10.0.0.139 - - [08/Jun/2016:16:16:01 +0800] "GET / HTTP/1.0" 200 26 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" #已經變成了真實的訪問地址 代理多個web服務器: [root@lvs-master conf.d]# cat fxproxy.conf server { listen 80; server_name 10.0.0.136; location / { proxy_pass http://10.0.0.137; proxy_set_header X-Real-IP $remote_addr; } location /web2 { #多加個location proxy_pass http://10.0.0.111; proxy_set_header X-Real-IP $remote_addr; } [root@lvs-backup ~]# cd /var/www/html/ #進入10.0.0.111這個web-server2 [root@lvs-backup html]# mkdir web [root@lvs-backup html]# echo "10.0.0.111" > index.html #我們去client上訪問試試: [root@elk ~]# curl 10.0.0.136/web2/ 10.0.0.111 #訪問成功 三、負載均衡 負載均衡實現的方式有很多,常用的lvs四層負載均衡,nginx是七層負載均衡,可以網上查詢相關資料。 3.1 環境介紹 3.2 配置介紹 1.upstream是Nginx的HTTP Upstream模塊,這個模塊通過一個簡單的調度算法來實現客戶端IP到后端服務器的負載均衡。在上面的設定中,通過upstream指令指定了一個負載均衡器的名稱1.2.3.4。這個名稱可以任意指定,在后面需要用到的地方直接調用即可。 2.Nginx的負載均衡模塊目前支持4種調度算法,下面進行分別介紹,其中后兩項屬于第三方調度算法。
3.upstream 支持的狀態參數 在HTTP Upstream模塊中,可以通過server指令指定后端服務器的IP地址和端口,同時還可以設定每個后端服務器在負載均衡調度中的狀態。常用的狀態有:
注,當負載調度算法為ip_hash時,后端服務器在負載均衡調度中的狀態不能是weight和backup。 [root@lvs-master conf.d]# cat ../nginx.conf http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; upstream 1.2.3.4 { server 10.0.0.111:80; server 10.0.0.137:80; } include /etc/nginx/conf.d/*.conf; } [root@lvs-master conf.d]# cat slb.confserver { location / { proxy_pass http://1.2.3.4; proxy_set_header X-Real-IP $remote_addr; } #注,upstream是定義在server{ }之外的,不能定義在server{ }內部。定義好upstream之后,用proxy_pass引用一下即可。 4.測試結果 [root@elk ~]# curl 10.0.0.136 10.0.0.111 [root@elk ~]# curl 10.0.0.136 10.0.0.137 [root@elk ~]# curl 10.0.0.136 10.0.0.111 #結果是server1,2交替出現,說明默認是輪詢方式的負載均衡。 5.健康檢查 一般健康檢查都需要搞個keepalived,但nginx也有相應的參數可以設置。 max_fails,允許請求失敗的次數,默認為1。當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤。 fail_timeout,在經歷了max_fails次失敗后,暫停服務的時間。max_fails可以和fail_timeout一起使用,進行健康狀態檢查。 [root@lvs-master conf.d]# cat ../nginx.conf http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; upstream 1.2.3.4 { server 10.0.0.111:80 weight=1 max_fails=2 fail_timeout=2; server 10.0.0.137:80 weight=1 max_fails=2 fail_timeout=2; } include /etc/nginx/conf.d/*.conf; } [root@lvs-master conf.d]# service nginx restart 6.測試下結果 [root@kvm httpd]# service httpd stop #關閉web-server1服務 [root@elk ~]# curl 10.0.0.136 10.0.0.111 [root@elk ~]# curl 10.0.0.136 10.0.0.111 #現在只能訪問web-server2了。 [root@kvm httpd]# service httpd start #打開web-server1服務 [root@elk ~]# curl 10.0.0.136 10.0.0.111 [root@elk ~]# curl 10.0.0.136 10.0.0.137 [root@elk ~]# curl 10.0.0.136 10.0.0.111 7.ip_hash的負載均衡 [root@lvs-master conf.d]# cat ../nginx.conf upstream 1.2.3.4 { ip_hash; server 10.0.0.111:80 weight=1 max_fails=2 fail_timeout=2; server 10.0.0.137:80 weight=1 max_fails=2 fail_timeout=2; } [root@lvs-master conf.d]# service nginx restart 停止 nginx: [確定] 正在啟動 nginx: [確定] [root@elk ~]# curl 10.0.0.136 10.0.0.137 [root@elk ~]# curl 10.0.0.136 10.0.0.137 #配置這種負載均衡后,>每個請求按訪問IP的hash結果分配,這樣來自同一個IP的訪客固定訪問一個后端服務器, #有效解決了動態網頁存在的session共享問題。(一般電子商務網站用的比較多) 以上所述是小編給大家介紹的Nginx正反向代理及負載均衡等功能實現配置代碼實例,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對17站長網的支持! |
免責聲明:本站部分文章和圖片均來自用戶投稿和網絡收集,旨在傳播知識,文章和圖片版權歸原作者及原出處所有,僅供學習與參考,請勿用于商業用途,如果損害了您的權利,請聯系我們及時修正或刪除。謝謝!
始終以前瞻性的眼光聚焦站長、創業、互聯網等領域,為您提供最新最全的互聯網資訊,幫助站長轉型升級,為互聯網創業者提供更加優質的創業信息和品牌營銷服務,與站長一起進步!讓互聯網創業者不再孤獨!
掃一掃,關注站長網微信
當我們在共享網絡訪問的時候,可能會遇到提示指定的網絡名不再可用的問題,這可能是由于我們的共享網絡出現了錯誤,也可能是被共享的對象所拒絕了。指定的網絡名 ......
文/曹楊 原標題:誰還看電視? 爸爸戴一副老花鏡,媽媽戴一副近視鏡,一人坐在沙發,一人躺在床上,各自刷著自己關注的博主更新的短視頻。電視也許開著,但只是背景。 這樣的畫面,幾乎成了洛奇家的常 ...
1、首先進入到“百度”軟件中, 2、然后在其中輸入“百度識圖”, 3、之后點擊圖中的“開始使用”按鈕, 4、緊接著點擊右下角的“相冊”功能, 5、在相冊下 ......
圖片來源于簡書 文/郭開森 楊帆 陸玖財經準備開新欄目了,每周一創始人郭開森和楊帆合體郭德帆,對行業進行一些觀察和評論,第一篇我們仍是打算寫社區團購,這是當下最火的話題。 來過陸玖財經做客的朋友們...
一、軟件沖突1、首先確認是否是應用程序沖突導致的。2、查看是否只有特定幾個游戲或應用會導致該問題。3、如果是應用沖突,那么只要卸載這些app就可以解決了。二 ......
電腦端:1、大家可以點擊右邊鏈接進入網頁版的百度網盤,進入之后點擊“去登錄”。https://pan.baidu.com/2、之后正確的輸入賬號密碼進行登錄就好啦。手機端:1 ......
一、N100對比intel i3 1、N100的跑分達到了147210分,這個數據可以達到i3的七代級別。 2、在跑分上也是超越了大部分的I3七代CPU,不過比I3八代要弱勢一些。 3 ......
8月15日消息 上周,有媒體報道前身為百度圖片的“榴蓮”APP含有大量不雅視頻內容被用戶舉報。對此,百度圖片官方進行了回應,百度圖片表示已經對報道中所涉及的“生吃旋風哥”等爭議內容進行了下線處理。 此外,百度...
在填寫一些項目申請書中,總是免不了要選擇一些數字,但是在方框中如何插入數字,該怎么辦呢?那么下面就由學習啦小編給大家分享下word在方框里輸入數字的技巧, ......
WPS Office手機版怎么加橫線?很多用戶還不知道WPS Office手機版怎么加橫線,WPS Office手機版怎么加橫線,WPS Office手機版怎么打橫線,WPS Office手機版怎么弄 ......
迅雷前綴是什么 答:迅雷前綴是(magnet:?xt=urn:btih:)括號里的就是了。 我們只要在這段文字之后輸入后續的內容,就可以創建下載鏈接了。 1、磁力鏈接不基于文 ......
一、內容特權。 1、半價點播。 許多站內視頻都需要付費觀看,而大會員用戶可以直接半價享受; 購買成功后的48h內無限次觀看。有部分的內容是只限在中國大陸內觀 ......
1、首先打開小米運動的“實驗室功能”。 2、接著點擊“門卡模擬”。 3、然后點擊“我知道了”。 4、最后貼近就可以刷卡成功了。...
答:華為P系列: 華為p40,華為p40plus,華為p50,華為p50e,華為p60 華為mate系列: 華為mate40,華為mate50,華為mate50e,華為mate60 華為nova系列: 華為n ......
近期有用戶反映,電腦在更新Windows 11 Insider Preview 25252.1000后,出現了應用和已壓縮的文件點擊毫無反應,拖拽都不行,只能從開始菜單打開的情況,這是怎 ......
可見單元格就是不包括隱藏或者篩選篩選后隱藏起來的單元格區域。方法:篩選或隱藏數據,復制需要粘貼的值,在目標單元格區域左上角的第一個單元格處右擊,選擇【 ......
答:驍龍8+更好。 驍龍7+gen2實際上就是驍龍8+的低配版本。 在一些其他的核心架構方面都是保持一致的,比如說CPU的架構、GPU的架構等等。 驍龍7+和驍龍8+具體 ......
文/黎明 一場針對中國互聯網巨頭的反壟斷風暴正在醞釀,而且這次動真格了。 11月10日,國家市場監管總局發布《關于平臺經濟領域的反壟斷指南(征求意見稿)》,要加大對互聯網巨頭涉嫌壟斷的調查和監管。 ...
win11系統如何釋放掉系統默認保留的存儲空間?一般情況下,Windows會保留一些存儲空間,以便設備獲得良好性能和成功更新。但是當出現系統盤儲存空間不足時,我們會將幾個G的保留空間釋放出來,以解燃眉之急。本期教...
文件被win10系統誤報病毒自動刪除了如何進行恢復?有用戶下載了某些破解軟件卻被Win10系統誤認為是病毒文件而自動刪除,當然系統自帶殺毒軟件其實挺不錯的,就是有時候會誤報,大家遇到這種情況的時候就希望把誤刪的...
1、先打開機頂盒進入主界面,并且使用遙控器打開設置。 2、然后選擇“賬號與安全”,并且進入。 3、最后往下面翻就可以看到“ADB調試”的選項,直接開啟就行了 ......
羅技g304dpi燈顏色代表什么:1、藍色:這種情況是正常工作的顯示,如果說是常亮或者閃爍,那都沒有問題這是在正常工作呢。2、紅色:如果說是紅燈閃爍的話那就是 ......
答:在3DMark壓力測試當中,顯卡需要超高97%才能夠算合格,證明顯卡的穩定性是過關的。 1、一般的默認情況下在2500~3000分就算很正常的了。 2、分數越高說明顯卡 ......
win11系統快速跳過聯網創建本地管理賬戶3種方法?現在市面上銷售的品牌筆記本和臺式機基本上都預裝Windows11家庭中文版正版操作系統,聯網后系統會自動激活。當用戶拿到新機器后還需要按照cortana(小娜)的提示一步...
我們經常用WPS的時候,如果需要輸入波浪號~,會發現鍵盤上的波浪號輸入之后在最上面,但是為了美觀,我們希望波浪號顯示在中間。這里總結了三個方法分享給大家 ......
答:中高端水平 i513500hx在處理器當中是處于一個中高端的水平。 i513500hx是第十一代酷睿處理器系列的一員,基礎頻率為2.4GHz,表現十分的不錯。 i513500hx介 ......
相信有非常多使用過筆記本的用戶都聽說過獨顯直連這個詞,但很多用戶并不了解獨顯直連是什么,又有什么用處,那么下面就和小編一起來看看什么是獨顯直連和開啟這 ......
win11系統開機總是自動登錄OneDrive如何關閉?win11系統開機的時候,會自動啟動OneDrive,不想要啟動,該怎么操作呢?下面我們就來看看詳細的教程。 在OneDrive界面點小齒輪按鈕,下拉菜單中點【設置】。 單擊【...
打開軟件,直接填寫就可以。 1、下載安裝easyconnect軟件, 2、打開easyconnect應用,在如圖所示的“服務器地址”一欄輸入如圖所示網址,點擊“連接”, 3、等 ......