【翻译】Nginx的反向代理
本文為翻譯文,原文地址:https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/
本文描述代理服務器的基本配置。你能學到如何將一個請求在不同的協議上從nginx轉發到被代理服務器,如何修改被轉發到被代理服務器的客戶端的請求頭,如何配置來自被代理服務器的響應的緩存。
介紹
代理通常用于將負載分發到幾個服務器中,無縫地從不同的網站獲取內容,或者轉發請求到不同的服務器。
轉發請求到被代理服務器
當nginx代理一個請求,它發送這個請求到指定的被代理服務器,獲取響應,然后發送響應會客戶端。也可能使用特別的協議代理請求到一個HTTP服務器(其他nginx服務器或其他任意服務器)或一個非HTTP服務器(比如運行PHP或Pyhton開發的應用)。支持的協議包括FastCGI、uwsgi、SCGI、memcached。
proxy_pass指令在一個location塊中,用于轉發一個請求到HTTP被代理服務器。比如:
location /some/path/ {proxy_pass http://www.example.com/link/;}此配置表示代理在此location處理的全部請求到指定地址的被代理服務器。此地址可以用域名或IP表示,地址可能需要包含端口。
location ~ \.php {proxy_pass http://127.0.0.1:8000;}請注意上面的第一個示例,被代理服務器的地址后面跟著是一個URI(統一資源標識符),/link/。如果有URI被配置在地址中,它會替換匹配location的部分。比如,請求地址為/some/path/page.html,會被代理到http://www.example.com/link/page.html。如果地址沒有URI,或者不能確定替換的部分,整個請求URI被轉發。
**_pass指令用于轉發請求到一個非HTTP被代理服務器:
- fastcgi_pass
- uwsgi
- scgi_pass
- memcached_pass
請注意在這些情況,指定地址的規則可能不相同。你可能需要轉發其它參數到服務器(請查看這里更多細節)。
proxy_pass指令可以轉發到一個服務器組。在這些情況中,請求在服務器組中根據指定的機制被分發。
轉發請求頭
默認情況下,nginx在代理請求中重定義兩個請求頭,Host和Connection,并且清除值為空的請求頭。Host被設置為$proxy_host變量,Connection被設置為close。
用proxy_set_header來為了改變這些設置,和修改其它請求頭。此指令能指定在location或更高層級的塊中。它能指定在指定的server或http塊中。比如:
location /some/path/ {proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_pass http://localhost:8000;}在此配置中,Host請求頭被設置為$host變量。
為了防止請求頭被轉發到被代理服務器,可以將值設置為空字符串,比如:
location /some/path/ {proxy_set_header Accept-Encoding "";proxy_pass http://localhost:8000;}配置緩沖
默認請求下,nginx會緩存被代理服務器的響應。響應會被儲存在內部緩存中,直到整個響應接收完畢才發送到客戶端。緩存有助于慢的客戶端的性能優化,因為響應從nginx同步返回給客戶端會浪費被代理服務器的時間。然而,當緩存啟動后,nginx允許被代理服務器快速地返回響應,nginx存儲響應使客戶端有更多的時間下載響應。
broxy_buffering用于表示緩存是否開啟,默認是開啟的。
Proxy_buffers控制分配的緩存區的大小和數量。響應的第一部分會被存儲在一個單獨的緩存中,緩存的大小由proxy_buffer_size指令設置。這部分通常包含相對較小的響應頭。
如果設置緩沖不可用,當接收被代理服務器的響應時,響應會同步地發送到客戶端。此設置或許是希望快速互動的客戶所需要的。
想要設置緩沖不可用,將location下的proxy_buffering設為off即可,如下所示:
location /some/path/ {proxy_buffering off;proxy_pass http://localhost:8000;}這種情況下,nginx只使用proxy_buffer_size配置的緩沖區去存儲當前部分的響應。
選擇一個流出的IP
如果你的代理服務器有幾個網絡接口,你或許需要選擇一個特定的IP地址去連接被代理服務器或上游服務器。這在一個被代理服務器配置了只接受指定IP地址的請求時就有用了。
聲明proxy_bind和指定的網絡接口的IP:
location /app1/ {proxy_bind 127.0.0.1;proxy_pass http://example.com/app1/;} location /app2/ {proxy_bind 127.0.0.2;proxy_pass http://example.com/app2/;}IP地址也可以為一個變量。比如$server_addr變量表示接收請求的網絡接口的IP:
location /app3/ {proxy_bind $server_addr;proxy_pass http://example.com/app3/;}總結
以上是生活随笔為你收集整理的【翻译】Nginx的反向代理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装和配置Hadoop
- 下一篇: 利用loadrunner做性能测试过程中