Nginx反向代理特定路徑及url(以mp4文件及xxx.php爲例)

問題提出場景

1、nginx做反向代理,靜態資源過大或者響應多,如果存在被代理機器,影響效率;

2、某URL爲了達到安全性等目的,需要代理機代理到特定的被代理機處理;

解決方案:nginx反向代理配置;

假設環境:

代理機ip爲ip0,被代理機ip爲ip1;

目錄

1、分發至特定被代理機配置

2、分發至本地路徑配置

3、特定的url分發至特定的被代理機配置

4、某文件夾分發至被代理機配置[1]

5、某文件夾下某後綴文件發送至被代理機配置[1]

擴展功能

6.1 "$"的意義[2]

6.2  rewrite重寫

6.3 nginx正則表達式書寫


1、分發至特定被代理機配置

其中如果“jpg”等文件也想配置就將“mp4”改成“mp4|jpg|xxx”;

location ~* .(mp4)$ {
        
        proxy_connect_timeout 60;
        proxy_read_timeout    60;
        proxy_send_timeout    60;        
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header Cookie $http_cookie;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_pass http://ip1; #這個是重點,其它參數隨你自己的需求添加

         if (-f $request_filename) {
           expires max;
           break;
       }
    }

示例:如果客戶訪問ip爲"ip0/test/test.mp4",那麼代理機就會直接訪問"ip1/test/test.mp4"

2、分發至本地路徑配置

location ~* .(mp4)$ {
          root /html; #本地特定的路徑
          if (-f $request_filename) {
           expires max;
           break;
        }
    }

示例: 如果客戶訪問ip爲"ip0/test/test.mp4",那麼代理機就會直接訪問本地html目錄,並以"html"文件夾爲根目錄;

3、特定的url分發至特定的被代理機配置

location ~* xxx.php$ {
        proxy_connect_timeout 60;
        proxy_read_timeout    60;
        proxy_send_timeout    60;        
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header Cookie $http_cookie;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_pass http://ip1;
    }

示例: 如果客戶訪問ip爲"ip0/test/xxx.php",那麼代理機就會直接訪問"ip1/test/xxx.php";

4、某文件夾分發至被代理機配置[1]

location ^~ /static_js/ { 

        proxy_connect_timeout 60;
        proxy_read_timeout    60;
        proxy_send_timeout    60;        
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header Cookie $http_cookie;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        
        proxy_pass http://ip1/; 

}

如果請求的url是http://ip0/static_js/test.html,會被代理成http://ip1/test.html;特別注意的是,如果ip後面不加"/",那麼會代理成http://ip1/static_js/test.htm

5、某文件夾下某後綴文件發送至被代理機配置[1]

location ~^/project/.*.action$ {  

    rewrite ^/project/(.*).action /$1.action break; 
    proxy_pass  http://ip1;  

}  

把http://ip0/project/test.action 反向代理到 http://ip1/test.action。

基本上的功能有這5個場景,然後自己去挖掘就可以了;

擴展功能

裏面涉及了另外幾個有意思的知識點,學了能讓你配置反向代理更遊刃有餘:

6.1 "$"的意義[2]

Nginx中,set $para $1,$1表示路徑中正則表達式匹配的第一個參數。

以下是一個示例,用以實驗$1,$2。如:

location ~/abc/(.*)/(.*) {
 
    set $para1 $1
 
    set $para2 $2
 
    content_by_lua_block {
 
    ngx.say(ngx.var.para1)
 
    ngx.say(ngx.var.para2)
 
    }
 
}

此時,若訪問路徑爲localhost:8080/abc/qwe/asd時,則瀏覽器會輸出"qwe"與"asd";

6.2  rewrite重寫

別人總結得不錯,就貼上其他人博客了:https://blog.csdn.net/weixin_40792878/article/details/83316519?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase

6.3 nginx正則表達式書寫

https://blog.csdn.net/a519640026/article/details/9138487?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

參考資料:

[1] https://blog.csdn.net/xtqve/article/details/53809960

[2] https://blog.csdn.net/cbmljs/article/details/86573248

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章