国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

<label id="9smfu"></label>
<label id="9smfu"></label>
<label id="9smfu"><menuitem id="9smfu"></menuitem></label>
  • <dl id="9smfu"><dfn id="9smfu"><button id="9smfu"></button></dfn></dl>
    <small id="9smfu"></small>
    <thead id="9smfu"><div id="9smfu"><rt id="9smfu"></rt></div></thead>
    <i id="9smfu"><dfn id="9smfu"><button id="9smfu"></button></dfn></i>
    <dd id="9smfu"></dd>
    0
    • 聊天消息
    • 系統消息
    • 評論與回復
    登錄后你可以
    • 下載海量資料
    • 學習在線課程
    • 觀看技術視頻
    • 寫文章/發帖/加入社區
    會員中心
    創作中心

    完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

    3天內不再提示

    Nginx代理轉發實戰:零基礎掌握服務器流量分發技巧

    馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2024-12-09 12:28 ? 次閱讀
    加入交流群
    微信小助手二維碼

    掃碼添加小助手

    加入工程師交流群

    Nginx 是最常用的反向代理工具之一,一個指令 proxy_pass搞定反向代理,對于接口代理、負載均衡很是實用,但 proxy_pass指令后面的參數很有講究,通常一個“/”都可能引發一個血案。

    location塊里proxy_pass包含或不包含/的示例

    在proxy_pass中的代理url后加上/,代理轉發的url中就不會帶上location中匹配路徑;服務器若是后面沒有/,代理轉發的url中就會帶上location中的匹配路徑。
    假設下面四種 Nginx配置,都用http://192.168.1.8/proxy/test.html進行訪問:
    第一種:

    location /proxy/ {
        proxy_pass http://127.0.0.1/;
    }

    代理到URL:http://127.0.0.1/test.html

    第二種(相對于第一種,這里最后少一個 / )

    location /proxy/ {
        proxy_pass http://127.0.0.1;
    }

    代理到URL:http://127.0.0.1/proxy/test.html

    第三種:

    location /proxy/ {
        proxy_pass http://127.0.0.1/aaa/;
    }
    

    代理到URL:http://127.0.0.1/aaa/test.html

    第四種(相對于第三種,這里最后少一個 / )

    location /proxy/ {
        proxy_pass http://127.0.0.1/aaa;
    }
    

    代理到URL:http://127.0.0.1/aaatest.html

    總結:nginx配置location塊里的 proxy_pass指令時,如果proxy_pass后面的URI包含/,表示絕對根路徑;如果沒有/,表示相對路徑,把匹配的路徑部分代理上。

    location塊里的 proxy_pass是最常見的。

    不影響瀏覽器地址欄的url

    設置被代理server的協議和地址

    協議能夠為http或https

    地址能夠為域名或IP

    nginx中有兩個模塊都有proxy_pass指令

    ngx_http_proxy_module 的 proxy_pass:

    語法: proxy_pass URL;
    場景: location, if in location, limit_except
    

    說明: 設置后端代理服務器的協議(protocol)和地址(address),以及location中可以匹配的一個可選的URI。協議可以是"http"或"https"。地址可以是一個域名或ip地址和端口,或者一個 unix-domain socket 路徑。
    詳見官方文檔:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_passURI

    ngx_stream_proxy_module 的 proxy_pass:

    語法: proxy_pass address;
    場景: server
    

    說明: 設置后端代理服務器的地址。這個地址(address)可以是一個域名或ip地址和端口,或者一個 unix-domain socket路徑。
    詳見官方文檔:http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_pass

    兩個proxy_pass的關系和區別

    在兩個模塊中,兩個proxy_pass都是用來做后端代理的指令。
    ngx_stream_proxy_module模塊的proxy_pass指令只能在server段使用使用, 只需要提供域名或ip地址和端口。可以理解為端口轉發,可以是tcp端口,也可以是udp端口。
    ngx_http_proxy_module模塊的proxy_pass指令需要在location段,location中的if段,limit_except段中使用,處理需要提供域名或ip地址和端口外,還需要提供協議,如"http"或"https",還有一個可選的uri可以配置。

    proxy_pass的具體用法

    ngx_stream_proxy_module 模塊的 proxy_pass指令

    server {
        listen 127.0.0.1:12345;
        proxy_pass 127.0.0.1:8080;
    }
     
    server {
        listen 12345;
        proxy_connect_timeout 1s;
        proxy_timeout 1m;
        proxy_pass example.com:12345;
    }
     
    server {
        listen 53 udp;
        proxy_responses 1;
        proxy_timeout 20s;
        proxy_pass dns.example.com:53;
    }
      
    server {
        listen [::1]:12345;
        proxy_pass unix:/tmp/stream.socket;
    }
    

    ngx_http_proxy_module 模塊的 proxy_pass指令

    server { 
        listen 80; 
        server_name www.test.com; 
         
        # 正常代理,不修改后端url的 
        location /some/path/ { 
            proxy_pass http://127.0.0.1;     
        } 
         
        # 修改后端url地址的代理(本例后端地址中,最后帶了一個斜線) 
        location /testb { 
            proxy_pass http://www.other.com:8801/; 
        } 
         
        # 使用 if in location 
        location /google { 
            if ( $geoip_country_code ~ (RU|CN) ) { 
                proxy_pass http://www.google.hk; 
            }
         
        } 
         
        location /yongfu/ { 
            # 沒有匹配 limit_except 的,代理到 unix:/tmp/backend.socket:/uri/ 
            proxy_pass http://unix:/tmp/backend.socket:/uri/;; 
            # 匹配到請求方法為: PUT or DELETE, 代理到9080 
            limit_except PUT DELETE { 
                proxy_pass http://127.0.0.1:9080; 
            }
         
        } 
     
    }
    

    proxy_pass后,后端服務器的url(request_uri)情況分析

    server { 
        listen 80; 
        server_name www.test.com; 
         
        # 情形A (非正則匹配)
        # 訪問 http://www.test.com/testa/aaaa 后端的request_uri為: /testa/aaaa 
        location ^~ /testa/ { 
            proxy_pass http://127.0.0.1:8801; 
        } 
         
        # 情形B (非正則匹配)
        # 訪問 http://www.test.com/testb/bbbb 后端的request_uri為: /bbbb 
        location ^~ /testb/ { 
            proxy_pass http://127.0.0.1:8801/; 
        } 
         
        # 情形C (正則匹配)
        # 下面這段location是正確的 
        location ~ /testc { 
            proxy_pass http://127.0.0.1:8801; 
        } 
         
     
        # 情形D (正則匹配)
        # 下面這段location是錯誤的 
        # nginx -t 時,會報如下錯誤:  
        # nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular     
        # expression, or inside named location, or inside "if" statement, or inside     
        # "limit_except" block in /opt/app/nginx/conf/vhost/test.conf:17
    
        # 當location為正則表達式時,proxy_pass 不能包含URI部分。本例中包含了"/" 
        location ~ /testd { 
            proxy_pass http://127.0.0.1:8801/; # 記住,location為正則表達式時,不能這樣寫!!!
        } 
         
        # 情形E (普通匹配)
        # 訪問 http://www.test.com/ccc/bbbb 后端的request_uri為: /aaa/ccc/bbbb 
        location /ccc/ { 
            proxy_pass http://127.0.0.1:8801/aaa$request_uri; # “$request_uri”一般不寫
        } 
         
        # 情形F (實現URL偽靜態)
        # 訪問 http://www.test.com/namea/ddd 后端的request_uri為: /yongfu?namea=ddd 
        location /namea/ { 
            rewrite /namea/([^/]+) /yongfu?namea=$1 break; 
            proxy_pass http://127.0.0.1:8801; 
        } 
         
        # 情形G (實現URL偽靜態)
        # 訪問 http://www.test.com/nameb/eee 后端的request_uri為: /yongfu?nameb=eee 
        location /nameb/ { 
            rewrite /nameb/([^/]+) /yongfu?nameb=$1 break; 
            proxy_pass http://127.0.0.1:8801/; 
        } 
         
        access_log /data/logs/www/www.test.com.log;
         
    }
     
     
     
    server { 
        listen 8801; 
        server_name www.test.com; 
         
        # 指定web服務器跟路徑
        root /data/www/test; 
        # 指定web服務默認頁面
        index index.php index.html; 
        # 全部重定向到 /test.php
        rewrite ^(.*)$ /test.php?u=$1 last; 
         
        # 正則匹配以.php結尾的
        location ~ .php$ { 
            try_files $uri =404; 
            fastcgi_pass unix:/tmp/php-cgi.sock; 
            fastcgi_index index.php; 
            include fastcgi.conf; 
        } 
         
        access_log /data/logs/www/www.test.com.8801.log;
         
    }
    

    文件: /data/www/test/test.php

    
    

    通過查看$_SERVER['REQUEST_URI']的值,我們可以看到每次請求的后端的request_uri的值,進行驗證。

    小結:
    情形A和情形B進行對比,可以知道proxy_pass后帶一個URI,可以是斜杠(/)也可以是其他uri,對后端request_uri變量的影響。
    情形D說明,當location為正則表達式時,proxy_pass不能包含URI部分。
    情形E通過變量($request_uri, 也可以是其他變量),對后端的request_uri進行改寫。
    情形F和情形G通過rewrite配合break標志,對url進行改寫,并改寫后端的request_uri。需要注意,proxy_pass地址的URI部分在情形G中無效,不管如何設置,都會被忽略。

    負載均衡實踐

    1,Nginx要實現負載均衡需要用到proxy_pass代理模塊配置

    2,Nginx負載均衡與Nginx代理不同地方在于,Nginx的一個location僅能代理一臺服務器,而Nginx負載均衡則是將客戶端請求代理轉發至一組upstream虛擬服務池.

    負載均衡配置模塊(proxy_pass)

    # ngx_http_upstream_module
     
    #語法
    Syntax: upstream name { ... }
    Default:    —
    Context:    http
     
    #例子
    upstream [連接池的名稱] {
             [存放的IP]
        server [ip1]:[端口] [分發策略];
        server [ip2]:[端口] [分發策略];
    }
     
    server {
        ... ...
        location / {
            proxy_pass http://[連接池的名稱] ;
        }
    }
    

    proxy_pass代理模塊配置常用參數

    1)添加發往后端服務器的請求頭信息

    語法:    proxy_set_header field value;
    默認:    proxy_set_header Host $http_host;
             proxy_set_header Connection close;
    位置:    http, server, location
    
    示例:
    # 用戶請求的時候HOST的值是game1.test.com, 那么代理服務會像后端傳遞請求的還是game1.test.com
    proxy_set_header Host $http_host;
    # 將$remote_addr的值放進變量X-Real-IP中,$remote_addr的值為客戶端的ip(請求來源,多層代理則現實最近一層的)
    proxy_set_header X-Real-IP $remote_addr;
    # 客戶端通過代理服務訪問后端服務, 后端服務通過該變量會記錄真實客戶端地址
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    

    2)代理到后端的TCP連接、響應、返回等超時時間

    #nginx代理與后端服務器連接超時時間(代理連接超時)
    語法: proxy_connect_timeout time;
    默認: proxy_connect_timeout 60s;
    位置: http, server, location
     
    #nginx代理等待后端服務器的響應時間
    語法:    proxy_read_timeout time;
    默認:    proxy_read_timeout 60s;
    位置:    http, server, location
     
    #后端服務器數據回傳給nginx代理超時時間
    語法: proxy_send_timeout time;
    默認: proxy_send_timeout 60s;
    位置: http, server, location
    

    3)proxy_buffer代理緩沖區

    #nignx會把后端返回的內容先放到緩沖區當中,然后再返回給客戶端,邊收邊傳, 不是全部接收完再傳給客戶端
    語法: proxy_buffering on | off;
    默認: proxy_buffering on;
    位置: http, server, location
     
    #設置nginx代理保存用戶頭信息的緩沖區大小
    語法: proxy_buffer_size size;
    默認: proxy_buffer_size 4k|8k;
    位置: http, server, location
     
    #proxy_buffers 緩沖區
    語法: proxy_buffers number size;
    默認: proxy_buffers 8 4k|8k;
    位置: http, server, location
    

    常用的參數配置

    方法一:直接寫到 http, server, location 塊里面
    [root@lb01 conf.d]# vi game.conf

    upstream game {
        server 172.16.1.8:80;
        server 172.16.1.7:80;
    }
    
    server {
        server_name game1.test.com;
        listen 80;
    
        location / {
            proxy_pass http://game;
            # 用戶請求的時候HOST的值是game1.test.com, 那么代理服務會像后端傳遞請求的還是game1.test.com
            proxy_set_header Host $http_host;
            # 將$remote_addr的值放進變量X-Real-IP中,$remote_addr的值為客戶端的ip
            proxy_set_header X-Real-IP $remote_addr;
            # 客戶端通過代理服務訪問后端服務, 后端服務通過該變量會記錄真實客戶端地址
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # nginx代理與后端服務器連接超時時間(代理連接超時)
            proxy_connect_timeout 10s;
            # nginx代理等待后端服務器的響應時間 
            proxy_read_timeout 10s;
            # 后端服務器數據回傳給nginx代理超時時間
            proxy_send_timeout 10s;
            # nignx會把后端返回的內容先放到緩沖區當中,然后再返回給客戶端,邊收邊傳, 不是全部接收完再傳給客戶  
            proxy_buffering on;
            # 設置nginx代理保存用戶頭信息的緩沖區大小
            proxy_buffer_size  8k;
            # proxy_buffers 緩沖區 
            proxy_buffers 8 8k;
            # 狀態標記
            proxy_next_upstream http_404  http_500  http_502  http_503  http_504  http_403  http_429;
        }
    }
    

    方法二:寫到單獨的文件里,然后 include 到目標位置
    [root@lb01 conf.d]# vi proxy_params

    # 用戶請求的時候HOST的值是game1.test.com, 那么代理服務會像后端傳遞請求的還是game1.test.com
    proxy_set_header Host $http_host;
    # 將$remote_addr的值放進變量X-Real-IP中,$remote_addr的值為客戶端的ip
    proxy_set_header X-Real-IP $remote_addr;
    # 客戶端通過代理服務訪問后端服務, 后端服務通過該變量會記錄真實客戶端地址
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    # nginx代理與后端服務器連接超時時間(代理連接超時)
    proxy_connect_timeout 10s;
    # nginx代理等待后端服務器的響應時間 
    proxy_read_timeout 10s;
    # 后端服務器數據回傳給nginx代理超時時間
    proxy_send_timeout 10s;
    # nignx會把后端返回的內容先放到緩沖區當中,然后再返回給客戶端,邊收邊傳, 不是全部接收完再傳給客戶  
    proxy_buffering on;
    # 設置nginx代理保存用戶頭信息的緩沖區大小
    proxy_buffer_size  8k;
    # proxy_buffers 緩沖區 
    proxy_buffers 8 8k;
    # 狀態標記
    proxy_next_upstream http_404  http_500  http_502  http_503  http_504  http_403  http_429;
    

    [root@lb01 conf.d]# vi game.conf

    upstream game {
        server 172.16.1.8:80;
        server 172.16.1.7:80;
    }
    
    server {
        server_name game1.test.com;
        listen 80;
    
        location / {
            proxy_pass http://game;
            include proxy_params
        }
    }
    

    方法二的好處顯而易見:維護一處,多處生效,類似于模板。

    聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
    • 服務器
      +關注

      關注

      14

      文章

      10253

      瀏覽量

      91482
    • nginx
      +關注

      關注

      0

      文章

      186

      瀏覽量

      13113

    原文標題:Nginx代理轉發實戰:零基礎掌握服務器流量分發技巧

    文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

    收藏 人收藏
    加入交流群
    微信小助手二維碼

    掃碼添加小助手

    加入工程師交流群

      評論

      相關推薦
      熱點推薦

      Nginx服務器的搭建步驟

      ①搭建Nginx服務器②SSL加密網站③基于域名虛擬主機
      發表于 04-07 16:20

      全內存轉發服務器

      全內存轉發服務器
      發表于 01-04 13:49 ?0次下載

      構建實戰Nginx+IIS構筑Web服務器集群負載均衡

      構建實戰Nginx+IIS構筑Web服務器集群負載均衡
      發表于 09-05 10:56 ?4次下載
      構建<b class='flag-5'>實戰</b>:<b class='flag-5'>Nginx</b>+IIS構筑Web<b class='flag-5'>服務器</b>集群負載均衡

      介紹一款輕量級的Web服務器、反向代理服務器Nginx

      所謂反向代理,很簡單,其實就是在location這一段配置中的root替換成proxy_pass即可。root說明是靜態資源,可以由Nginx進行返回;而proxy_pass說明是動態請求,需要進行轉發,比如
      的頭像 發表于 03-26 10:36 ?1.1w次閱讀
      介紹一款輕量級的Web<b class='flag-5'>服務器</b>、反向<b class='flag-5'>代理服務器</b><b class='flag-5'>Nginx</b>

      Nginx架構介紹 Nginx服務器模型分析

      Nginx是一款免費的、開源的、高性能、模塊化、輕量級的HTTP服務器、反向代理服務器以及電子郵件(IMAP/POP3)代理服務器
      的頭像 發表于 01-10 16:32 ?9890次閱讀
      <b class='flag-5'>Nginx</b>架構介紹 <b class='flag-5'>Nginx</b><b class='flag-5'>服務器</b>模型分析

      怎么樣才能使用Nginx服務器配置自己的網站

      Nginx是一款輕量級、高性能的反向代理Web服務器,有著占有內存小、并發能力強的特點,在網頁ai服務器中表現較好,也是很受很多網站的選擇使用,包括百度、騰訊、新浪、淘寶等。
      發表于 03-27 08:00 ?0次下載
      怎么樣才能使用<b class='flag-5'>Nginx</b><b class='flag-5'>服務器</b>配置自己的網站

      詳解Nginx高性能的HTTP和反向代理服務器

      Nginx 是一個高性能的 HTTP 和反向代理服務器,特點是占用內存少,并發能力強,事實上 Nginx 的并發能力確實在同類型的網頁服務器中表現較好。
      的頭像 發表于 03-16 11:23 ?3209次閱讀

      【技術分享】如何在嵌入式Linux平臺上使用Nginx搭建RTMP流媒體服務器

      的高性能的HTTP和反向代理web服務器,它同時也是基于事件驅動開發的異步高性能跨平臺服務器Nginx-RTMP是基于Nginx框架的模
      的頭像 發表于 01-05 15:15 ?1257次閱讀

      【技術分享】如何在嵌入式Linux平臺上使用Nginx搭建RTMP流媒體服務器

      的HTTP和反向代理web服務器,它同時也是基于事件驅動開發的異步高性能跨平臺服務器Nginx-RTMP是基于Nginx框架的模塊開發,很
      的頭像 發表于 01-13 09:27 ?2234次閱讀
      【技術分享】如何在嵌入式Linux平臺上使用<b class='flag-5'>Nginx</b>搭建RTMP流媒體<b class='flag-5'>服務器</b>?

      Nginx的配置文件如何設置頭信息保留真實IP不丟失

      Nginx 配置中設置頭信息以保留客戶端的真實 IP 地址通常是在使用反向代理的場景中需要的。當 Nginx 作為反向代理時,客戶端的真實 IP 地址可能會在
      的頭像 發表于 11-30 10:54 ?3154次閱讀

      Apache服務器Nginx服務器

      Apache和Nginx都是常見的開源Web服務器軟件,它們用于處理HTTP請求并提供網站和應用程序的服務。下面是對Apache和Nginx的一些基本特點的比較: 一、Apache H
      的頭像 發表于 01-22 16:48 ?1387次閱讀

      如何使用nginx反向代理功能?保姆級教程!

      一關于nginxnginx是一款高性能的開源Web服務器軟件,也可以用于反向代理、負載均衡等,并且具有高性能、低內存消耗等優點。本文我們主要講解關于nginx的反向代理功能,并在
      的頭像 發表于 06-21 08:21 ?1827次閱讀
      如何使用<b class='flag-5'>nginx</b>反向<b class='flag-5'>代理</b>功能?保姆級教程!

      Python中代理服務器的配置與應用

      在網絡通信中,代理服務器作為一種重要的網絡中間件,充當著客戶端和目標服務器之間的中間人角色。它能夠接收來自客戶端的請求,并將這些請求轉發給目標服務器,然后將
      的頭像 發表于 11-12 07:13 ?1095次閱讀

      Nginx實戰全攻略

      Nginx 是一個高性能的 HTTP 和反向代理服務器,也是一個 IMAP/POP3 代理服務器。它以其高并發處理能力、穩定性、豐富的功能模塊和低內存消耗而聞名。
      的頭像 發表于 03-31 10:44 ?4872次閱讀
      <b class='flag-5'>Nginx</b><b class='flag-5'>實戰</b>全攻略

      Nginx反向代理和負載均衡配置實戰

      負載均衡則是反向代理的進階玩法。當一臺后端服務器扛不住流量的時候,就需要多臺服務器一起分擔壓力。Nginx負責把請求
      的頭像 發表于 01-23 13:44 ?649次閱讀