1. 程式人生 > >nginx實現反向代理及負載均衡

nginx實現反向代理及負載均衡

toc 可用 details get windows 模塊 端口號 class 負載均衡

一、反向代理

1.什麽是反向代理

通常的代理服務器,只用於代理內部網絡對Internet的連接請求,客戶機必須指定代理服務器,並將本來要直接發送到Web服務器上的http請求發送到代理服務器中由代理服務器向Internet上的web服務器發起請求,最終達到客戶機上網的目的(也就是正向代理)。

而反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然後將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個反向代理服務器。

如下圖:

技術分享圖片

Nginx只做請求的轉發,後臺有多個http服務器提供服務,nginx的功能就是把請求轉發給後面的服務器,決定把請求轉發給誰。

2、安裝tomcat2個,現在我們模擬的話服務器就采用tomcat來模擬。

安裝tomcat的過程就不介紹了,在http://blog.csdn.net/u013144287/article/details/78499485過程中有介紹, (1)創建一個tomcat目錄mkdir -p /usr/local/tomcats 在此目錄下安裝兩個tomcat如圖所示: 技術分享圖片 (2)修改tomcat2的端口號,vi ./tomcat2/conf/server.xml
<Server port="8006" shutdown="SHUTDOWN">
  1. <Connector port="8081" protocol="HTTP/1.1"
  2. connectionTimeout="20000"
  3. redirectPort="8443" />
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
修改此3處端口號,分別在原來基礎上加1,然後wq保存,啟動兩臺tomcat
技術分享圖片
技術分享圖片 3、需求 nginx的安裝可以參考http://blog.csdn.net/u013144287/article/details/78408001此篇文章 通過訪問不同的域名訪問運行在tomcat不同端口的服務器,中間使用nginx反向代理服務器 windows上訪問需要修改hosts文件進行配置如下:

8080.zcinfo.com 訪問運行8080端口的tomcat

8082.zcinfo.com 訪問運行8081端口的tomcat

如圖所示:hosts目錄是:C:\Windows\System32\drivers\etc

技術分享圖片

4、Nginx的配置 在Nginx的配置文件裏面加入如下配置
  1. upstream tomcatserver1 {
  2. server 192.168.3.43:8080;
  3. }
  4. upstream tomcatserver2 {
  5. server 192.168.3.43:8082;
  6. }
  7. server {
  8. listen 80;
  9. server_name 8080.zcinfo.com;
  10. #charset koi8-r;
  11. #access_log logs/host.access.log main;
  12. location / {
  13. proxy_pass http://tomcatserver1;
  14. index index.html index.htm;
  15. }
  16. }
  17. server {
  18. listen 80;
  19. server_name 8082.zcinfo.com;
  20. #charset koi8-r;
  21. #access_log logs/host.access.log main;
  22. location / {
  23. proxy_pass http://tomcatserver2;
  24. index index.html index.htm;
  25. }
  26. }
重啟nginx ps:如果在同一個域名下有多臺服務器提供服務,此時需要nginx負載均衡。
5、測試 技術分享圖片 技術分享圖片 至此恭喜您,nginx反向代理成功 二、負載均衡 1、什麽是負載均衡?

負載均衡建立在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性。

負載均衡,英文名稱為Load Balance,其意思就是分攤到多個操作單元上進行執行,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成工作任務。

2、需求

nginx作為負載均衡服務器,用戶請求先到達nginx,再由nginx根據負載配置將請求轉發至tomcat服務器。

nginx負載均衡服務器:192.168.3.43

tomcat1服務器:192.168.3.43:8080

tomcat2服務器:192.168.3.43:8081

3、nginx的配置

  1. upstream tomcatserver1 {
  2. server 192.168.3.43:8080;
  3. server 192.168.3.43:8082; #多加了此臺服務器
  4. }
  5. upstream tomcatserver2 {
  6. server 192.168.3.43:8082;
  7. }
  8. server {
  9. listen 80;
  10. server_name 8080.zcinfo.com;
  11. #charset koi8-r;
  12. #access_log logs/host.access.log main;
  13. location / {
  14. proxy_pass http://tomcatserver1;
  15. index index.html index.htm;
  16. }
  17. }
  18. server {
  19. listen 80;
  20. server_name 8082.zcinfo.com;
  21. #charset koi8-r;
  22. #access_log logs/host.access.log main;
  23. location / {
  24. proxy_pass http://tomcatserver2;
  25. index index.html index.htm;
  26. }
  27. }
如果兩臺服務器性能差不多這樣設置重啟nginx就行了,但是現在假如兩臺服務器性能不一樣,還需要設置性能權重,讓性能高服務器做更多事情。只需要加入weight=?就行了,如下:

  1. upstream tomcatserver1 {
  2. server 192.168.3.43:8080 weight=2;
  3. server 192.168.3.43:8082 weight=1;
  4. }
  5. upstream tomcatserver2 {
  6. server 192.168.3.43:8082;
  7. }
  8. server {
  9. listen 80;
  10. server_name 8080.zcinfo.com;
  11. #charset koi8-r;
  12. #access_log logs/host.access.log main;
  13. location / {
  14. proxy_pass http://tomcatserver1;
  15. index index.html index.htm;
  16. }
  17. }
  18. server {
  19. listen 80;
  20. server_name 8082.zcinfo.com;
  21. #charset koi8-r;
  22. #access_log logs/host.access.log main;
  23. location / {
  24. proxy_pass http://tomcatserver2;
  25. index index.html index.htm;
  26. }
  27. }
重新啟動nginx,會發現8080出現了兩次,8082出現一次這樣輪循。

ps:關於nginx負載均衡的一些參數介紹例子

  1. 節點說明:
  2. 在http節點裏添加:
  3. #定義負載均衡設備的 Ip及設備狀態
  4. upstream myServer {
  5. server 127.0.0.1:9090 down;
  6. server 127.0.0.1:8080 weight=2;
  7. server 127.0.0.1:6060;
  8. server 127.0.0.1:7070 backup;
  9. }
  10. 在需要使用負載的Server節點下添加
  11. proxy_pass http://myServer;
  12. upstream 每個設備的狀態:
  13. down 表示單前的server暫時不參與負載
  14. weight 默認為1.weight越大,負載的權重就越大。
  15. max_fails :允許請求失敗的次數默認為1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤
  16. fail_timeout:max_fails 次失敗後,暫停的時間。
  17. backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。

4、效果

技術分享圖片

技術分享圖片

至此,恭喜您,nginx反向代理和負載均衡搭建成功

nginx實現反向代理及負載均衡