摘要:代理請求當代理請求時,它會將請求發送到指定的代理服務器,獲取響應并將其發送回客戶端。是否啟用緩沖使用指令,默認是開啟的。
這是 Nginx 學習總結的第五篇,上一篇介紹到了 Nginx 學習總結(4)—— Rewrite 模塊,這一篇會對 反向代理 相關知識做一些總結。
什么是代理?代理通常用于在多個服務器之間分配負載,無縫地顯示來自不同網站的內容,或通過除 HTTP 以外的協議將請求處理傳遞給應用程序服務器。代理請求
當 Nginx 代理請求時,它會將請求發送到指定的代理服務器,獲取響應并將其發送回客戶端。允許將請求代理到 HTTP 服務器(另一個 Nginx 服務器或任何其他服務器),或使用一個特定的協議到非 HTTP 服務器(它可以運行特定框架開發的應用程序,如 PHP 或 Python),支持的協議包括 FastCGI、uwsgi、SCGI 和 memcached。
如果想將一個請求傳遞(反向代理)給 HTTP 代理服務器,需要在 Location 模塊中指定 proxy_pass 指令,例如:
location /some/path/ { proxy_pass http://www.example.com; } # 發送如下請求 # curl 127.0.0.1:80/some/path/ # 該請求會傳遞到 www.example.com 服務器中處理
傳遞地址可以指定為域名或 IP 地址,使用 IP 地址時應當指定一個端口:
location ~ .php { proxy_pass http://127.0.0.1:8080; }
如果想將一個請求傳遞(反向代理)給非 HTTP 代理服務器,應當合理選擇使用如下指令:
fastcgi_pass 將請求傳遞給 FastCGI 服務器;
uwsgi_pass 將請求傳遞給 uwsgi_pass 服務器;
scgi_pass 將請求傳遞給 SCGI 服務器;
memcached_pass 將請求傳遞給 memcached 服務器。
location ~ .php$ { root /usr/share/nginx/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
需要注意的是,傳遞地址后面是否帶有 /,轉發的 URL 是不同的:
location ^~ /static/ { proxy_pass http://www.test.com; # 傳遞地址后面不加 "/",轉發地址將包含匹配參數 } # 發送如下請求 # curl http://localhost/static/index.html # 轉發到 http://www.test.com/static/index.html
location ^~ /static/ { proxy_pass http://www.test.com/; # 傳遞地址后面帶有 "/",轉發地址將不包含匹配參數 } # 發送如下請求 # curl http://localhost/static/index.html # 轉發到 http://www.test.com/index.html傳遞請求頭
默認情況下, Nginx 會重新定義請求頭: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_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 后端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP proxy_set_header Accept-Encoding ""; proxy_pass http://localhost:8000; }配置緩沖區
默認情況下, Nginx 緩沖來自代理服務器的響應。響應存儲在內部緩沖區中,在接收到整個響應之前不會發送給客戶端。緩沖有助于優化慢速客戶端的性能,因為如果響應是從 Nginx 同步傳遞到客戶端,可能會浪費代理服務器的時間。啟用緩沖后,Nginx 允許代理服務器快速處理響應,而 Nginx 在客戶端需要下載它們時,將盡可能多的緩存響應內容。
是否啟用緩沖使用 proxy_buffering 指令,默認是開啟的。proxy_buffers 指令控制分配給請求的緩沖區的大小和數量,來自代理服務器的響應的第一部分存儲在一個多帶帶的緩沖區中,其大小由 proxy_buffer_size 指令設置:
location /some/path/ { proxy_buffers 16 4k; proxy_buffer_size 2k; proxy_pass http://localhost:8000; }
如果緩沖被禁用,則在從代理服務器接收到響應的同時將響應同步發送到客戶端。對于需要盡快開始接收響應的快速交互式客戶端來說,這種行為可能是需要的:
location /some/path/ { proxy_buffering off; proxy_pass http://localhost:8000; }
參考文章:
NGINX Reverse Proxy
proxy_pass 的小說明
Module ngx_http_proxy_module
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/39848.html
摘要:實現負載均衡負載均衡是反向代理技術的一種運用。而實現負載均衡的核心在于如何將請求合理地分配給不同的后端服務器。 這是 Nginx 學習總結的第六篇,上一篇介紹到了 Nginx 學習總結(5) —— 反向代理,本文主要演示結合 proxy 和 upstream 模塊的使用來實現 Nginx 的負載均衡。 Nginx 官網中對 upstream 模塊的介紹:ngx_http_upstrea...
摘要:一下載鏡像我這里用的是輕量級的鏡像下載完成后,通過命令檢查一下鏡像是否下載成功二先以簡單的方式運行鏡像以后臺方式運行鏡像指定容器的名稱為命令執行完成后,通過命令確認一下容器是否啟動成功。 歡迎關注個人微信公眾號: 小哈學Java, 文末分享阿里 P8 高級架構師吐血總結的 《Java 核心知識整理&面試.pdf》資源鏈接!!個人網站: https://www.exception.sit...
摘要:一下載鏡像我這里用的是輕量級的鏡像下載完成后,通過命令檢查一下鏡像是否下載成功二先以簡單的方式運行鏡像以后臺方式運行鏡像指定容器的名稱為命令執行完成后,通過命令確認一下容器是否啟動成功。 歡迎關注個人微信公眾號: 小哈學Java, 文末分享阿里 P8 高級架構師吐血總結的 《Java 核心知識整理&面試.pdf》資源鏈接!!個人網站: https://www.exception.sit...
閱讀 1177·2021-11-23 10:10
閱讀 1499·2021-09-30 09:47
閱讀 887·2021-09-27 14:02
閱讀 2967·2019-08-30 15:45
閱讀 3020·2019-08-30 14:11
閱讀 3610·2019-08-29 14:05
閱讀 1820·2019-08-29 13:51
閱讀 2206·2019-08-29 11:33