1. 什么是反向代理:
反向代理服務器架設在服務器端,通過緩沖經常被請求的頁面來緩解服務器的工作量,將客戶機請求轉發給內部網絡上的目標服務器;并將從服務器上得到的結果返回給Internet上請求連接的客戶端,此時代理服務器與目標主機一起對外表現為一個服務器。
2. 反向代理的主要作用:
目前web網站使用反向代理,除了可以防止外網對內網服務器的惡性攻擊、緩存以減少服務器的壓力和訪問安全控制之外,還可以進行負載均衡,將用戶請求分配給多個服務器。
3. nginx配置反向代理:
Nginx作為近年來較火的反向代理服務器,安裝在目的主機端,主要用于轉發客戶機請求,后臺有多個http服務器提供服務,nginx的功能就是把請求轉發給后面的服務器,決定哪臺目標主機來處理當前請求。
3.1 配置目標:
內網搭建了兩個web服務器,分別為 10.0.5.87 和 10.0.5.123,現在需要用Nginx搭建反向代理服務器,使得:?
– 可以通過代理服務器訪問這兩個web服務器;?
– 可以修改請求包中header的字段;?
– 啟用cache功能;
3.2 實施方法:
nginx配置文件修改:
#配置cache模塊 proxy_cache_path?/nginx/cache/first?levels=1:2?keys_zone=first:20m?max_size=1g; server?{ ????????#偵聽www.local_host.ik的80端口 ????????listen???????80; ????????server_name??www.local_host.ik; ????????#對aspx后綴的進行負載均衡請求 ????location?/?{ ????????????????#?root???/root;#定義服務器的默認網站根目錄位置 ????????????????index?index.php?index.html?index.htm;#定義首頁索引文件的名稱 ????????????????proxy_pass??http://10.0.5.87:8080/;#請求轉向定義的服務器 ????????????????#以下是一些反向代理的配置可刪除. ????????????????proxy_redirect?off; ????????????????#后端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP ????????????????proxy_set_header?Host?$host; ????????????????proxy_set_header?X-Real-IP?$remote_addr; ????????????????proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for; ????????????????client_max_body_size?10m;???????#允許客戶端請求的最大單文件字節數 ????????????????client_body_buffer_size?128k;???#緩沖區代理緩沖用戶端請求的最大字節數, ????????????????proxy_connect_timeout?90;???????#nginx跟后端服務器連接超時時間(代理連接超時) ????????????????proxy_send_timeout?90;??????????#后端服務器數據回傳時間(代理發送超時) ????????????????proxy_read_timeout?90;??????????#連接成功后,后端服務器響應時間(代理接收超時) ????????????????proxy_buffer_size?4k;???????????#設置代理服務器(nginx)保存用戶頭信息的緩沖區大小 ????????????????proxy_buffers?4?32k;????????????#proxy_buffers緩沖區,網頁平均在32k以下的話,這樣設置 ????????????????proxy_busy_buffers_size?64k;????#高負荷下緩沖大?。╬roxy_buffers*2) ????????????????proxy_temp_file_write_size?64k;?#設定緩存文件夾大小,大于這個值,將從upstream服務器傳 ????????????????#啟用cache并指定大小 ????????????????proxy_cache?first; ????????????????proxy_cache_valid?200?10m; ????} ????add_header?X-Via?$server_addr; ????add_header?X_cache_hit?$upstream_cache_status; } #第二個虛擬服務器 server?{ ????????#偵聽www.fengyanjiao.ik的80端口 ????????listen???????80; ????????server_name??www.fengyanjiao.ik; ????????#對aspx后綴的進行負載均衡請求 ????location?/?{ ????????????????#?root???/root;#定義服務器的默認網站根目錄位置 ????????????????index?index.php?index.html?index.htm;#定義首頁索引文件的名稱 ????????????????proxy_pass??http://10.0.5.123:5004/;#請求轉向定義的服務器 ????????????????#以下是一些反向代理的配置可刪除. ????????????????proxy_redirect?off; ????????????????#后端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP ????????????????proxy_set_header?Host?$host; ????????????????proxy_set_header?X-Real-IP?$remote_addr; ????????????????proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for; ????????????????client_max_body_size?10m;???????#允許客戶端請求的最大單文件字節數 ????????????????client_body_buffer_size?128k;???#緩沖區代理緩沖用戶端請求的最大字節數, ????????????????proxy_connect_timeout?90;???????#nginx跟后端服務器連接超時時間(代理連接超時) ????????????????proxy_send_timeout?90;??????????#后端服務器數據回傳時間(代理發送超時) ????????????????proxy_read_timeout?90;??????????#連接成功后,后端服務器響應時間(代理接收超時) ????????????????proxy_buffer_size?4k;???????????#設置代理服務器(nginx)保存用戶頭信息的緩沖區大小 ????????????????proxy_buffers?4?32k;????????????#proxy_buffers緩沖區,網頁平均在32k以下的話,這樣設置 ????????????????proxy_busy_buffers_size?64k;????#高負荷下緩沖大?。╬roxy_buffers*2) ????????????????proxy_temp_file_write_size?64k;?#設定緩存文件夾大小,大于這個值,將從upstream服務器傳 ????} }
客戶端hosts文件配置:
127.0.0.1???localhost?localhost.localdomain?localhost4?localhost4.localdomain4 ::1?????????localhost?localhost.localdomain?localhost6?localhost6.localdomain6 192.168.183.22?www.fengyanjiao.ik 192.168.183.22?www.local_host.ik
3.3 測試:
3.3.1 在客戶端發起請求(無cache):
curl?www.fengyanjiao.ik
即可看到響應包。在真實服務器10.0.5.123上抓包,可以看到代理http請求報文。由于這個是動態頁面,故不會被cache。
3.3.2 在客戶端發起請求(有cache):
curl?www.local_host.ik
即可看到響應包。在真實服務器10.0.5.87上抓包,可以看到代理http請求報文。此次請求后,在代理服務器 /nginx/cache/first/3/4c 目錄下,可以看到緩存文件 4a0993df8ef6191d1b1e12fa56c804c3 。
下次在客戶端請求 www.local_host.ik,在客戶端抓包,即可看到。
更多Nginx相關技術文章,請訪問Nginx教程欄目進行學習!