nginx反向代理中負載均衡基礎配置

簡介

    以前聽過nginx,但是一直沒接觸過,現在有空,特地去了解並且基本的去使用nginx,網上很多配置介紹,自己寫一篇加深理解以防忘記。

    我主要是去了解怎麼用nginx去實行反向代理。簡單說下代理和反向代理吧。

    代理:

    主要是代理客戶端。

    例如:一個公司只有一個外網ip,但是可能有幾十到上百臺電腦,其中每臺電腦都需要有上網的功能。那麼此時就可以弄個代理服務器,公司中的每一個電腦的上網請求全部發送到這個代理服務器,代理服務器在利用外網ip去根據不同電腦執行不同的操作。相當就是個中介。這就是代理。

    反向代理:

    主要是代理服務器。

    最通俗易懂的例子:假如你想查你手機還剩多少餘額。你只需撥打對應的的運營商電話就可以了(10086/10010/10000),此時,你並不知道接你電話的這個客服代表是男是女,是帥是醜。因爲他們有個類似代理服務器的系統,會自動把你的通話轉接到空閒的客服那兒去。同理,一個服務器也是這樣的,就像淘寶,在雙11的時候,訂單太多,一個服務器是處理不過來的。他會把請求分別分發到相對比較空閒的服務器上去(實際上不知道複雜多少倍.......)。

圖解如下,是在網上copy的一個圖...


配置

官網下載 http://nginx.org/en/download.html

我這兒是下載的1.10.3的windows版本。下載完解壓,找到conf文件夾下 nginx.conf。在裏面進行配置。

1、在默認請求中添加代理服務器配置proxy_pass 和proxy_redirect

 #默認請求
        location / {
            #定義服務器的默認網站根目錄位置
            root   html;
            #定義首頁索引文件的名稱
            index  index.html index.htm;

            #代理服務器的配置。與上訴的負載均衡的名要相同
            proxy_pass http://demo.com;  
            # 對發送的URL進行修改(很多時候代理的路徑出問題可以嘗試修改此處)
            proxy_redirect default;
        }

2、我這兒是同一個電腦的兩個不同tomcat服務器,更改端口,在tomcat的conf目錄下找到server.xml更改 Connector。具體如下。也可以是不同電腦的不同路徑,以及各種的負載均衡配置,在下一篇介紹。

<!--tomcat默認端口配置--> 
<Connector port="8088" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
改完之後添加一個負載均衡配置,具體如下。地址只能到端口。我第一次配置想在端口後面加上具體的項目名,結果導致nginx始終無法啓動
#負載均衡配置。有多種配置方式,名稱與下面的配置要相同
    upstream demo.com{
        #服務 地址 權重,數字越大,被訪問到的比例越大
        server 127.0.0.1:8080 weight=1;
        server 127.0.0.1:8088 weight=1;
    }

整個配置文件以及詳解如下

#user  nobody;  #運行用戶

#啓動進程,一般設置爲和cpu的數量相等
worker_processes  1; 

#全局錯誤日誌和pid文件
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


#工作模式以及連接上限數
events {
    
    #單個後臺worker process進程的最大併發鏈接數
    worker_connections  1024;
    #併發總數(max_clients)爲 進程數worker_process乘以worker_connections
    #如果作爲服務器的話這個併發總數(max_clients)要除以2。作爲反向代理的話要除以4
    #爲什麼除以2:該公式基於http 1.1協議,一次請求大多數瀏覽器發送兩次連接,並不是request和response響應占用兩個線程
    #爲什麼除以4:因nginx作爲方向代理,客戶端和nginx建立連接,nginx和後端服務器也要建立連接

    #worker_connerctions設置的值和物理內存大小有關。因爲max_clients的數量必須得小於系統可打開的最大文件數
    #系統可打開的文件數和內存是成正比關係。實際最後的併發總量和配置的有一定的偏差。因爲系統中還有其他的進程在運行。
}   


http {
    #設定mime類型,類型由mime.type文件定義
    include       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  logs/access.log  main;


    #sendfile可以指定mginx是否調用sendfile函數來輸出文件,對應普通應用設置爲on,
    #如果用來進行下載等磁盤io負載較重的應用,可設置爲off,可以平衡磁盤和網絡I/O的處理速度
    #詳細解釋如下
    #設置爲on表示啓動高效傳輸文件的模式。sendfile可以讓Nginx在傳輸文件時直接在磁盤和tcp socket之間傳輸數據。
    #如果這個參數不開啓,會先在用戶空間(Nginx進程空間)申請一個buffer,用read函數把數據從磁盤讀到cache,
    #再從cache讀取到用戶空間的buffer,再用write函數把數據從用戶空間的buffer寫入到內核的buffer,
    #最後到tcp socket。開啓這個參數後可以讓數據不用經過用戶buffer。
    sendfile        on;
    #tcp_nopush     on;

    #連接超時時間
    #keepalive_timeout  0;
    keepalive_timeout  65;


    #負載均衡配置。有多種配置方式,名稱與下面的配置要相同
    upstream demo.com{
        #服務 地址 權重,數字越大,被訪問到的比例越大
        server 127.0.0.1:8080 weight=1;
        server 127.0.0.1:8088 weight=1;
    }


    #是否開啓gzip壓縮
    #gzip  on;

    #虛擬主機配置
    server {
        #監聽端口
        listen       80;
        #定義使用localhost訪問
        server_name  localhost;


        #charset koi8-r;    

        #設定本虛擬主機的訪問日誌
        #access_log  logs/host.access.log  main;

        #默認請求
        location / {
            #定義服務器的默認網站根目錄位置
            root   html;
            #定義首頁索引文件的名稱
            index  index.html index.htm;

            #代理服務器的配置。與上訴的負載均衡的名要相同
            proxy_pass http://demo.com;  
            # 對發送的URL進行修改(很多時候代理的路徑出問題可以嘗試修改此處)
            proxy_redirect default;
        }
        
             
        
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #定義錯誤提示頁面
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #

        #PHP 腳本請求全部轉發到FastCGI處理,使用FastCGI默認配置
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #

        #禁止訪問.ht xxx文件
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

       配置完後直接點擊nginx.exe啓動,或者在命令行中鍵入到對應的文件位置執行 start -nginx,啓動後在進程中能看到以下兩個進程。


    隨後打開瀏覽器訪問localhost:80就能看到效果了。具體效果如下,我是在同一臺電腦上開了兩個tomcat,端口分別是8080和8088。有兩個不同的初始頁面,每次訪問localhost:80的時候會隨機訪問其中一個tomcat。

接下來介紹各種不同的負載均衡配置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章