* proxy_pass指令
static01
└── cuffs
└── css
└── test01.jpg
static01cuffs
└── css
└── test01.jpg
proxy
└── cuffs
└── css
└── test01.jpg
cuffs
└── css
└── test01.jpg
第一種絕對路徑:
~~~
location /proxy/ {
proxy_pass http://10.0.0.1:8080/;
}
~~~
當訪問http://test.51yuki.cn/proxy/cuffs/css/test01.jpg
時,nginx匹配到proxy路徑,把請求轉給10.0.0.1:8080服務,實際請求的路徑為http://10.0.0.1:8080/cuffs/css/test01.jpg
第二種相對路徑
~~~
location /proxy/ {
proxy_pass http://10.0.0.1:8080;
}
~~~
當訪問http://test.51yuki.cn/proxy/cuffs/css/test01.jpg
時,nginx匹配到/proxy/路徑,把請求轉發給10.0.0.1:8080服務,實際請求代理服務器的路徑為http://10.0.0.1:8080/proxy/cuffs/css/test01.jpg 此時nginx會把匹配的proxy也代理給代理服務器
注意:
location /bbs/ {
proxy_pass http://192.168.20.139:8085/;
}
表示當訪問http://test.51yuki.cn/bbs/index.html 代理服務器映射到http://192.168.20.139:8085/
第三種:當前后路徑不一致
~~~
location /proxy/ {
proxy_pass http://10.0.0.1:8080/static01/;
}
~~~
當訪問 http://127.0.0.1/proxy/cuffs/css/test01.jpg時, nginx匹配到/proxy/路徑,把請求轉發給10.0.0.1:8080服務,實際請求代理服務器的路徑http://10.0.0.1:8080/static01/cuffs/css/test01.jpg
注意: 如果static01后面的/ 不輸入的話,就會造成實際請求代理服務器的路徑為http://10.0.0.1:8080/static01cuffs/css/toosimple.txt
第四種:模式匹配
~~~
location ~* \.(jpg|png|gif|jpeg)$ {
proxy_pass http://192.168.20.139:8085;
}
~~~
注意:這個proxy_pass后面不能帶有斜線,否則就判定為語法錯誤
當訪問http://test.51yuki.cn/images/test01.jpg nginx匹配到該規則,就把請求轉發給后端192.168.20.139:8085服務器,實際請求代理服務器的路徑為
http://192.168.20.139:8085/images/test01.jpg
第五種: URL重寫
如果location中有url重寫功能,會把重寫后的URL地址,附帶在后端服務器
* proxy_set_header field value;
功能:允許重新定義或添加字段傳遞給代理服務器的請求頭。該值可以包含文本、變量和它們的組合,proxy_set_header 就是可設置請求頭-并將頭信息傳遞到服務器端。
案例:
proxy_set_header Host $host:$proxy_port;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-PORT $remote_port;
~~~
location /forum/ {
proxy_pass http://192.168.20.139:8085/bbs/;
proxy_set_header Host $host:$proxy_port;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-For $remote_addr;
}
服務器端日志
192.168.20.131 - - [11/Feb/2018:14:09:07 +0800] "GET /bbs/ HTTP/1.0" 200 24 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" "10.2.18.231"
其中10.2.18.231為真實客戶端的ip地址,192.168.20.131為代理服務器的內網IP地址
~~~
* proxy_redirect
proxy_redirect redirect replacement;
場景1:
~~~
location / {
proxy_pass http://192.168.20.139:8085;
proxy_set_header Host $host:$proxy_port;
proxy_set_header X-Forwarded-For $remote_addr;
當客戶端使用瀏覽器輸入http://test.51yuki.cn/bbs/index.html 會自動跳轉到http://test.51yuki.cn:8085/bbs/index.hml
~~~
遇到上面的情況,我們就可以使用proxy_redirect
proxy_redirect http://test.51yuki.cn:8085/ http://test.51yuki.cn/;
發現就可以正常訪問
場景2
~~~
location /test/ {
proxy_pass http://10.65.192.xx:8080/;
proxy_redirect http://$host/ https://$host:$server_port/test/;
}
~~~
二)proxy代理超時時間
* proxy_connect_timeout
功能:proxy_connect_timeout是和后端建立連接的超時時間。需要記住的是,這個時間不能超過75秒
* proxy_read_timeout
功能:從后端讀取數據的響應時間,只是在兩個連續的讀取操作之間設置超時。
它決定了nginx會等待多長時間來獲得請求的響應
* proxy_send_timeout
功能: 這個指定設置了發送請求給upstream服務器的超時時間。超時設置不是為了整個發送期間,而是在兩次write操作期間。如果超時后,upstream沒有收到新的數據,nginx會關閉連接
案例:
proxy_connect_timeout 65s;
proxy_send_timeout 65ss;
proxy_read_timeout 65s;
三)緩沖相關
nginx從后端服務器獲得響應報文后,默認會將其緩存起來,響應包文件被存儲在內部緩存中,直到接受完整個報文,然后構建響應報文,發送給客戶端,常見指令如下
響應報文: 響應首部,報文主體
* proxy_buffering
功能:負載開啟或關閉代理緩沖,默認為on
* proxy_buffer_size
~~~
Syntax: proxy_buffer_size size;
Default:
proxy_buffer_size 4k|8k;
Context: http, server, location
~~~
功能:負責設置接收第一部分響應報文的緩沖的大小
* proxy_buffer
~~~
Syntax: proxy_buffers number size;
Default:
proxy_buffers 8 4k|8k;
Context: http, server, location
~~~
功能: 負責接收第二部分響應報文的緩沖個數以及大小
* proxy_temp_path
~~~
Syntax: proxy_temp_path path [level1 [level2 [level3]]];
Default:
proxy_temp_path proxy_temp;
Context: http, server, location
~~~
功能:該指令用于配置磁盤上的一個文件路徑,該文件用于臨時存放代理服務器的大體積響應數據
案例:
proxy_temp_path /nginx/proxy_web/spool/proxy_temp 1 2;
/nginx/proxy_web/spool/proxy_temp/1/10/00000100101
* proxy_max_temp_file_size
功能:該指令用于配置所有臨時文件的總體積大小,存放在磁盤上的臨時文件大小不能超過該配置值,這避免了響應數據過大造成磁盤空間不足的問題
四)緩存相關的
* proxy_cache_path
語法:
~~~
Syntax: proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
Default: —
Context: http
~~~
功能:設置緩存數據存儲的位置(這個參數可以定義多個)
案例:
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
* proxy_cache_min_uses
功能:某一個響應報文被響應了多少次才被緩存下來
* proxy_cache_use_stale
~~~
Syntax: proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ...;
Default: proxy_cache_use_stale off;
Context: http, server, location
~~~
確定在與代理服務器通信期間發生錯誤時,在哪些情況下可以使用過時的高速緩存響應
* proxy_cache_valid
~~~
Syntax: proxy_cache_valid [code ...] time;
Default: —
Context: http, server, location
~~~
功能: 設置不同響應代碼的緩存時間
案例:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
* proxy_cache_bypass
~~~
Syntax: proxy_cache_bypass string ...;
Default: —
Context: http, server, location
~~~
功能:定義哪些情況下,不要從緩存獲取響應
案例:
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
proxy_cache_bypass $http_pragma $http_authorization;
* proxy_cache_key
~~~
Syntax: proxy_cache_key string;
Default: proxy_cache_key $scheme$proxy_host$request_uri;
Context: http, server, location
~~~
功能: 定義緩存的鍵
案例:
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
緩存案例01:
proxy_cache_path /data/nginx/cache/ levels=1:2:2 keys_zone=mycache:128m; (在http段定義緩存)
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
(在location段調用緩存)
location /bbs/ {
proxy_cache mycache;
proxy_cache_methods GET HEAD;
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
proxy_cache_min_uses 2;
proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_cache_valid 200 10m;
proxy_cache_valid 301 302 5m;
proxy_cache_valid any 1m;
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment $http_pragma $http_authorization;
proxy_pass http://192.168.20.139:8085/bbs/;
proxy_set_header Host $host:$proxy_port;
proxy_set_header X-Forwarded-For $remote_addr;
}
創建目錄并授權
[root@proxy01 conf]# mkdir -pv /data/nginx/cache && chown -R www.www /data/nginx/cache
然后客戶端瀏覽器訪問,并查看代理服務器
http://test.51yuki.cn/bbs/
[root@proxy01 02]# pwd
/data/nginx/cache/5/cd/02
[root@proxy01 02]# ll
total 4
-rw-------. 1 www www 626 Feb 11 16:45 fe43e48c0935b141246e846c5c002cd5
緩存案例02:配置緩存修剪案例
http://soft.51yuki.cn/ngx_cache_purge-master.zip
配置如下:
location ~ /purge(/.*) {
auth_basic "allow purge cache data";
auth_basic_user_file "/opt/.htpasswd";
allow 10.2.18.0/24;
allow 127.0.0.1;
deny all;
proxy_cache_purge mycache $host$1$is_args$args;
}
htpasswd -c -m /opt/.htpasswd tom (期間需要安裝httpd服務)
~~~
瀏覽器訪問:http://test.51yuki.cn/purge/bbs/a.htm
Successful purge
Key : test.51yuki.cn/bbs/a.html
Path: /data/nginx/cache/c/9a/5e/36e85e58edcd96369da181c0eab5e9ac
nginx/1.12.2
~~~
- 第一部分:Nginx Web服務
- 第一章: Nginx的初探
- 第二章:Nginx的安裝部署
- 第一節:在centos6上通過Yum安裝Nginx
- 第二節:在Centos7上通過Yum安裝nginx
- 第三節:編譯安裝Nginx服務
- 第四節: Nginx編譯參數詳解
- 第五節: Nginx的啟動腳本
- 第六節:Nginx的shell腳本安裝
- 第七節:nginx服務的平滑升級
- 第三章:Nginx服務基礎配置
- 第一節: 配置運行nginx服務器用戶
- 第二節:配置運行生成的worker processes進程數
- 第三節:配置Nginx進程PID存放路徑
- 第四節:定義MIME類型
- 第五節:自定義nginx的訪問日志
- 第六節:主配置段(main)常用的配置
- 第七節:http段(核心)常用的配置命令
- 第八節:配置nginx中的location段
- 第九節: 基于IP的訪問控制
- 第十節:基于用戶的訪問控制
- 第十一節:Nginx定義status狀態頁
- 第十二節:Nginx服務器Rewrite重寫
- 第十三節:Nginx服務配置防盜鏈
- 第十四節:nginx軟件的優點
- 第四章:Nginx服務器的優化配置
- 第一節:nginx.conf配置文件基本參數優化
- 第二節:fastcgi調優
- 第三節:Gzip調優
- 第四節:expires緩存調優
- 第五節:內核參數優化
- 第六節: Nginx之——413 修改上傳文件大小限制
- 第五章:Nginx虛擬主機的配置
- 第一節:基于名稱的虛擬主機
- 第二節:通過shell腳本添加虛擬主機
- 第六章:Nginx常用模塊指令詳解
- 第一節:ngx_http_realip_module
- 第二節:http_image_filter_module
- 第三節:tengine中配置consistent hash module
- 第四節:ngx_http_userid_module
- 第七章:Nginx服務器配置HTTPS訪問
- 第八章: Nginx服務器日志切割
- 第二部分:Nginx負載均衡反向代理服務
- 第一章:Nginx進階參數詳解
- 第一節:proxy_module參數詳解
- 第二節:upstream_module參數詳解
- 第四章:Nginx反向代理服務
- 第一節:Nginx反向代理配置參數詳解
- 第二節:Nginx反向代理服務配置案例
- 第三節:Nginx緩存
- 第四節: Nginx中fastcgi模塊
- 第五節:nginx+fastcgi實現動靜分離架構
- 第五章:Nginx負載均衡
- 第一節:ngx_http_upstream_module常見指令
- 第二節:調度方法
- 第三節:健康狀態檢查