nginx配置url重定向&反代


一、重定向

正則表達式匹配:

* ~ 為區分大小寫匹配

* ~* 為不區分大小寫匹配

* !~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配


文件及目錄匹配:

* -f和!-f用來判斷是否存在文件

* -d和!-d用來判斷是否存在目錄

* -e和!-e用來判斷是否存在文件或目錄

* -x和!-x用來判斷文件是否可執行


flag標記:

* last 相當於Apache里的[L]標記,表示完成rewrite

* break 終止匹配, 不再匹配后面的規則

* redirect 返回302臨時重定向 地址欄會顯示跳轉后的地址

* permanent 返回301永久重定向 地址欄會顯示跳轉后的地址


可用的全局變量有,可以用做條件判斷:

$args, 請求中的參數;

$content_length, HTTP請求信息里的"Content-Length";

$content_type, 請求信息里的"Content-Type";

$document_root, 針對當前請求的根路徑設置值;

$document_uri, 與$uri相同;

$host, 請求信息中的"Host",如果請求中沒有Host行,則等於設置的服務器名;

$limit_rate, 對連接速率的限制;

$request_method, 請求的方法,比如"GET"、"POST"等;

$remote_addr, 客戶端地址;

$remote_port, 客戶端端口號;

$remote_user, 客戶端用戶名,認證用;

$request_filename, 當前請求的文件路徑名

$request_body_file

$request_uri, 請求的URI,帶查詢字符串;

$query_string, 與$args相同;

$scheme, 所用的協議,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect;

$server_protocol, 請求的協議版本,"HTTP/1.0"或"HTTP/1.1";

$server_addr, 服務器地址,如果沒有用listen指明服務器地址,使用這個變量將發起一次系統調用以取得地址(造成資源浪費);

$server_name, 請求到達的服務器名;

$server_port, 請求到達的服務器端口號;

$uri, 請求的URI,可能和最初的值有不同,比如經過重定向之類的。


return指令

該指令用於結束規則的執行並返回狀態碼給客戶端。
可使用server, location, if  區域;

示例:如果訪問的URL以".sh"或".bash"結尾,則返回403狀態碼
location ~ .*.(sh|bash)?$
{
return 403;
}


rewrite 指令

使用nginx提供的全局變量或自己設置的變量,結合正則表達式和標志位實現url重寫以及重定向;
可以使用在 server, location, if 區域;

rewrite 語法格式
rewrite regex(正則) replacement flag (rewrite 源地址 目標地址)
flag: break last redirect permanent
last: last一般寫在server和if中 停止執行其他重寫規則,根據URI繼續搜索其他location
break:break一般使用在location url重寫后,直接使用當前資源,不再執行location里余下的語句,完成本次請求
redirect:302臨時重定向,地址欄改變,爬蟲不更新URI
permanent:301永久重定向。地址欄改變,爬蟲更新URI


重定向案例:

server {
...
    server_name www.aa.com aa.com www.bb.com bb.com ...;

    if ($host = 'www.aa.com' ) {
        return http://www.baidu.com$request_uri;
    }
    
    if ($host = 'www.aa.info' ) {
        #也可以加上301重定向碼
        return 301 http://www.baidu.com$request_uri;
    }
...
}


二、反向代理

反向代理:是指以代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端,
此時代理服務器對外就表現為一個服務器。


proxy_pass

可使用字段:location, location中的if字段;       

這個指令設置被代理服務器的地址和被映射的URI,地址可以使用主機名或IP加端口號的形式,例如:proxy_pass http://192.168.10.129/url

proxy_pass 也可以配合upstream使用


location /fx {
        proxy_pass   http://127.0.0.1:8555/fx;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_next_upstream off;
        proxy_connect_timeout 30;
        proxy_read_timeout 300;
        proxy_send_timeout 300;
    }


-----------------
...
upstream dd {
    server 127.0.0.1:8080;
}

...
proxy_pass   http://dd;
...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM