Nginx反向代理

代理一般用於分發負載給多個服務器,從不一樣網站無縫顯示內容,傳遞請求給能處理HTTP以外的應php

用服務器。html

1    傳遞請求給代理服務器

當Nginx代理請求時,它發送請求給一個特定的代理服務器,獲取響應,並返回給客戶端。它能夠爲緩存

HTTP服務器(其它Nginx服務器或任意其它服務器)代理請求或一個使用特殊協議的非HTTP服務器服務器

(能夠運行一個使用特定框架開發的應用,例如PHP或Python)。支持協議包括FastCGI、uwsgi、網絡

SCGI和memcached。app

爲了傳遞請求給HTTP代理服務器,在location指令中指定proxy_pass指令:框架

location /some/path/ {memcached

    proxy_pass http://www.example.com/link/;性能

}優化

 該例子致使傳遞該location中的全部請求給指定地址的代理服務器。該地址能夠指定爲域名或IP

地址。地址也能夠包括端口:

location ~ \.php {

    proxy_pass http://127.0.0.1:8000;

}

 

注意,上面的第一個例子,代理服務器的地址後面跟隨一個URI /link/。若是指定URI地址,它替

換匹配location參數的請求URI部分。例如,請求URI /some/path/page.html將代理到http:

//www.example.com/link/page.html。若是地址沒有指定URI,或不可能決定URI部分替

換,完整URI被傳遞(可能,修改)。

爲了傳遞一個請求到非HTTP代理服務器,合適的**_pass指令應該被使用:

  • fastcgi_pass傳遞一個請求給FastGGI服務器。

  • uwsgi_pass傳遞一個請求給一個uwsgi服務器。

  • scgi_pass傳遞一個請求個SCGI服務器。

  • memcached_pass傳遞一個請求給memcached服務器。

注意,在這些例子中,指定地址的規則可能有些不一樣。你也可能須要傳遞額外參數給服務器。

proxy_pass指令也能指向服務器組的名稱。在這種狀況下,請求根據指定的方法分發請求給組中

的服務器。

2    傳遞請求頭

默認,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;

}

 3    配置緩存

默認,Nginx緩存代理服務器的響應。響應被存儲在內部緩存中,直到整個響應接收完成纔會發

送給客戶端。緩存有助於優化緩慢客戶端的性能,若是響應從Nginx同步到客戶端會浪費代理服

務器的時間。然而,當緩存被啓用,Nginx容許代理服務器快速處理響應,當客戶端須要下

載,Nginx用盡量多的時間存儲響應。

負責啓用和禁用緩存的指令是proxy_buffering。默認設置爲on,啓用緩存。

proxy_buffers指令控制分配給請求的緩存大小和數量。來自代理服務器響應的第一部分存儲在

單獨的緩存中,使用proxy_buffer_size指令設置。這一般包含比較小的響應頭和能比響應剩下

部分的緩存小。

在下面的例子中,緩存的默認書增長而且響應的第一部分緩存大小比默認值小。

location /some/path/ {

    proxy_buffers 16 4k;

    proxy_buffer_size 2k;

    proxy_pass http://localhost:8000;

}

 

若是緩存禁用,當從代理服務器接收響應時同步發送給客戶端。這種儘快和客戶端交互的行爲是

可取的。

爲了在特定location中禁用緩存,在location中設置proxy_buffering指令爲off:

location /some/path/ {

    proxy_buffering off;

    proxy_pass http://localhost:8000;

}

 在這種狀況下,Nginx只使用proxy_buffer_size配置緩存存儲響應當前的一部分。

4    選擇流出IP地址

若是你的代理服務器有多個網絡接口,有時你可能須要選擇特定源IP地址連接到代理服務器或

upstream。若是代理服務器在Nginx後面,配置從特定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/;

}

相關文章
相關標籤/搜索