99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

OpenResty Nginx 反向代理

2021-08-13 10:53 更新

什么是反向代理

反向代理(Reverse Proxy)方式是指用代理服務(wù)器來接受 internet 上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給 internet 上請求連接的客戶端,此時代理服務(wù)器對外就表現(xiàn)為一個反向代理服務(wù)器。

舉個例子,一個用戶訪問 http://www.example.com/readme,但是 www.example.com 上并不存在 readme 頁面,它是偷偷從另外一臺服務(wù)器上取回來,然后作為自己的內(nèi)容返回給用戶。但是用戶并不知情這個過程。對用戶來說,就像是直接從 www.example.com 獲取 readme 頁面一樣。這里所提到的 www.example.com 這個域名對應(yīng)的服務(wù)器就設(shè)置了反向代理功能。

反向代理服務(wù)器,對于客戶端而言它就像是原始服務(wù)器,并且客戶端不需要進(jìn)行任何特別的設(shè)置??蛻舳讼蚍聪虼淼拿臻g(name-space)中的內(nèi)容發(fā)送普通請求,接著反向代理將判斷向何處(原始服務(wù)器)轉(zhuǎn)交請求,并將獲得的內(nèi)容返回給客戶端,就像這些內(nèi)容原本就是它自己的一樣。如下圖所示:

proxy

反向代理典型應(yīng)用場景

反向代理的典型用途是將防火墻后面的服務(wù)器提供給 Internet 用戶訪問,加強(qiáng)安全防護(hù)。反向代理還可以為后端的多臺服務(wù)器提供負(fù)載均衡,或?yàn)楹蠖溯^慢的服務(wù)器提供 緩沖 服務(wù)。另外,反向代理還可以啟用高級 URL 策略和管理技術(shù),從而使處于不同 web 服務(wù)器系統(tǒng)的 web 頁面同時存在于同一個 URL 空間下。

Nginx 的其中一個用途是做 HTTP 反向代理,下面簡單介紹 Nginx 作為反向代理服務(wù)器的方法。

場景描述:訪問本地服務(wù)器上的 README.md 文件 http://localhost/README.md,本地服務(wù)器進(jìn)行反向代理,從 https://github.com/moonbingbing/openresty-best-practices/blob/master/README.md 獲取頁面內(nèi)容。

nginx.conf 配置示例:

worker_processes 1;

pid logs/nginx.pid;
error_log logs/error.log warn;

events {
    worker_connections 3000;
}

http {
    include mime.types;
    server_tokens off;

    ## 下面配置反向代理的參數(shù)
    server {
        listen    8866;

        ## 1. 用戶訪問 http://ip:port,則反向代理到 https://github.com
        location / {
            proxy_pass  https://github.com;
            proxy_redirect     off;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }

        ## 2.用戶訪問 http://ip:port/README.md,則反向代理到
        ##   https://github.com/.../README.md
        location /README.md {
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass https://github.com/moonbingbing/openresty-best-practices/blob/master/README.md;
        }
    }
}

成功啟動 Nginx 后,我們打開瀏覽器,驗(yàn)證下反向代理的效果。在瀏覽器地址欄中輸入 ?localhost/README.md?,返回的結(jié)果是我們 GitHub 源代碼的 README 頁面。如下圖:

proxy_example

我們只需要配置一下 ?nginx.conf? 文件,不用寫任何 web 頁面,就可以偷偷地從別的服務(wù)器上讀取一個頁面返回給用戶。

下面我們來看一下? nginx.conf ?里用到的配置項:

(1) location

location 項對請求 URI 進(jìn)行匹配,location 后面配置了匹配規(guī)則。例如上面的例子中,如果請求的 URI 是 ?localhost/?,則會匹配 ?location / ?這一項;如果請求的 URI 是 ?localhost/README.md?,則會匹配 ?location /README.md ?這項。

上面這個例子只是針對一個確定的 URI 做了反向代理,有的讀者會有疑惑:如果對每個頁面都進(jìn)行這樣的配置,那將會大量重復(fù),能否做 批量 配置呢?此時需要配合使用 location 的正則匹配功能。具體實(shí)現(xiàn)方法可參考 Nginx 文檔中 關(guān)于 location 的描述。

(2) proxy_pass

proxy_pass 后面跟著一個 URL,用來將請求反向代理到 URL 參數(shù)指定的服務(wù)器上。例如我們上面例子中的 ?proxy_pass https://github.com?,則將匹配的請求反向代理到 ?https://github.com?。

(3) proxy_set_header

默認(rèn)情況下,反向代理不會轉(zhuǎn)發(fā)原始請求中的 Host 頭部,如果需要轉(zhuǎn)發(fā),就需要加上這句:?proxy_set_header Host $host;?

除了上面提到的常用配置項,還有 ?proxy_redirect?、?proxy_set_body?、?proxy_limit_rate ?等參數(shù),具體用法可以到Nginx 官網(wǎng)查看。

正向代理

既然有反向代理,自然也有正向代理。簡單來說,正向代理就像一個跳板,例如一個用戶訪問不了某網(wǎng)站(例如 ?www.google.com?),但是他能訪問一個代理服務(wù)器,這個代理服務(wù)器能訪問 ?www.google.com?,于是用戶可以先連上代理服務(wù)器,告訴它需要訪問的內(nèi)容,代理服務(wù)器去取回來返回給用戶。例如一些常見的翻墻工具、游戲代理就是利用正向代理的原理工作的,我們需要在這些正向代理工具上配置服務(wù)器的 IP 地址等信息。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號