欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nginx 重寫與重定向配置方法

 更新時間:2025年06月18日 14:36:41   作者:晨港飛燕劉彥登  
Nginx重寫與重定向區(qū)別:重寫修改路徑(客戶端無感知),重定向跳轉(zhuǎn)新URL(客戶端感知),try_files檢查文件/目錄存在性,return301直接返回永久重定向,rewrite可動態(tài)調(diào)整URI,常用于URL美化、反向代理等場景,本文介紹Nginx 重寫與重定向配置方法,感興趣的朋友一起看看吧

區(qū)分重寫與重定向

重寫: 請求路徑被修改,但客戶端感知不到變化。通常發(fā)生在服務(wù)器端,屬于內(nèi)部操作2。

重定向: 將客戶端引導(dǎo)至另一個 URL 地址,瀏覽器會收到新的地址提示并再次發(fā)送請求2。

一.try_files指令

try_files $uri $uri/ /admin/index.html;

用途

try_files 指令用于按順序檢查指定文件或目錄是否存在,如果存在則提供服務(wù),如果都不存在則執(zhí)行最后的回退操作(通常是重定向或返回某個文件)。它是 Nginx 中處理靜態(tài)文件或單頁應(yīng)用(SPA)常用的指令。

參數(shù)解釋

$uri:表示客戶端請求的 URI 路徑(不包括域名和查詢字符串)。例如,請求 http://example.com/admin/test,$uri 是 /admin/test。

$uri/:表示請求的 URI 路徑加上斜杠,檢查它是否為一個目錄。例如,如果 $uri 是 /admin/test,則 $uri/ 是 /admin/test/。

/admin/index.html:回退路徑,如果前面的文件或目錄都不存在,Nginx 會嘗試提供這個路徑(相對于 alias 或 root 定義的目錄)。

分號 (;): 表示指令結(jié)束。

示例

 # 處理 /admin/ 路徑
location /admin/ {
	alias /usr/nginx/demo/im-admin/;
	index index.html;
	try_files $uri $uri/ /admin/index.html; # 回退到 index.html
}
# 處理 /admin/imadmin/ 和 /admin/imadmin(無斜杠)
location ~ ^/admin/imadmin/?$ {
    access_log /var/log/nginx/imadmin.log;
	return 301 /admin/index; # 永久重定向到 /admin/index
}

日志格式優(yōu)化

log_format  main  '響應(yīng)狀態(tài)碼:$status, 來源頁面:"$http_referer", 客戶端IP地址:$remote_addr, 請求詳情:"$request", '
                      '用戶代理:"$http_user_agent", 本地時間:[$time_local], 請求體內(nèi)容:"$request_body" 響應(yīng)體字節(jié)數(shù):$body_bytes_sent, '
                      '遠程用戶:$remote_user, 代理轉(zhuǎn)發(fā)IP:"$http_x_forwarded_for"\n';

工作原理

Nginx 按順序檢查以下內(nèi)容:

首先檢查 $uri 是否對應(yīng)一個文件(例如 /usr/nginx/demo/im-admin/test)。

如果文件不存在,檢查 $uri/ 是否對應(yīng)一個目錄(例如 /usr/nginx/demo/im-admin/test/)。

如果目錄也不存在,Nginx 將請求內(nèi)部重定向到最后的回退路徑 /admin/index.html。

如果回退路徑 /admin/index.html 也無法處理(例如文件不存在),Nginx 返回 404 錯誤(除非有其他配置覆蓋)。

二.return指令

return 301 /admin/index;

用途

return 指令用于立即終止當前請求的處理,并向客戶端返回指定的 HTTP 狀態(tài)碼和響應(yīng)(通常是重定向)。301 表示永久重定向,告訴客戶端(瀏覽器或爬蟲)目標 URL 已永久更改,未來應(yīng)直接訪問新 URL。

參數(shù)解釋

301:HTTP 狀態(tài)碼,表示永久重定向。客戶端會緩存這個重定向,之后的請求會直接訪問新 URL。

/admin/index:目標 URL 路徑(相對于域名)。Nginx 會將客戶端重定向到這個路徑。

分號 (;): 表示指令結(jié)束。

工作原理

當 Nginx 匹配到包含 return 301 /admin/index; 的 location 塊時,立即停止處理當前請求。

Nginx 向客戶端返回 HTTP 301 響應(yīng),包含 Location: /admin/index 頭。

客戶端(瀏覽器)收到 301 響應(yīng)后,自動發(fā)起對 http://example.com/admin/index 的新請求。

因為是永久重定向,瀏覽器通常會緩存這個重定向規(guī)則,后續(xù)直接訪問 /admin/index。

兩者的區(qū)別與結(jié)合使用

特性

try_files

return 301

功能

檢查文件/目錄是否存在,決定如何處理請求

立即重定向到新 URL

影響

內(nèi)部重定向(客戶端無感知)

外部重定向(客戶端收到新 URL)

典型場景

靜態(tài)文件服務(wù)、SPA 路由回退

URL 規(guī)范化、路徑重定向

客戶端體驗

無額外請求,URL 不變

觸發(fā)新請求,URL 變化

性能

單次請求處理

兩次請求(重定向 + 新請求)

示例

# 301 永久重定向
return 301 https://example.com$request_uri;
# 302 臨時重定向
return 302 /new-path;
# 403 禁止訪問
return 403 "Access Forbidden";

三.rewrite指令

在 Nginx 中,rewrite 指令用于重寫或修改請求的 URI。它是 Nginx 的核心功能之一,常用于 URL 重定向、規(guī)范化 URL、實現(xiàn)偽靜態(tài)頁面或隱藏真實路徑等場景。rewrite 指令通常在 http、server 或 location 上下文中使用,屬于 ngx_http_rewrite_module 模塊。

基本語法

rewrite regex replacement [flag];

regex: 正則表達式,用于匹配請求的 URI。

replacement: 替換后的 URI 或目標字符串,可以包含捕獲組($1, $2 等)。

flag: 可選的標志,用于控制重寫行為,支持以下值:

last: 停止處理當前階段的 rewrite 指令,重新匹配新的 URI。

break: 停止處理當前階段的 rewrite 指令,不重新匹配。

redirect: 返回 302 臨時重定向。

permanent: 返回 301 永久重定向。

工作原理

Nginx 接收到客戶端的請求后,檢查 rewrite 指令的正則表達式是否匹配當前 URI。

如果匹配,則將 URI 替換為 replacement 中指定的內(nèi)容。

根據(jù) flag 的設(shè)置,決定是繼續(xù)處理、停止處理還是發(fā)送重定向響應(yīng)。

示例

1. 基本重寫

將 /old-path 重寫為 /new-path:

location /old-path {
    rewrite ^/old-path$ /new-path last;
}

請求 /old-path 時,Nginx 將 URI 改為 /new-path,并重新匹配 location。

2. 正則表達式與捕獲組

將 /user/123 重寫為 /profile.php?id=123:

常規(guī) /user/123 重復(fù) /profile.php?id=123:

location /user {
    rewrite ^/user/(\d+)$ /profile.php?id=$1 last;
}

(\d+) 捕獲數(shù)字部分,$1 表示捕獲的數(shù)字(如 123)。

3. 永久重定向

將所有 /blog/* 請求永久重定向到 /articles/*:

rewrite ^/blog/(.*)$ /articles/$1 permanent;

訪問 /blog/post1 會返回 301 重定向到 /articles/post1。

4. 條件重寫

結(jié)合 if 指令,根據(jù)條件重寫:

if ($http_user_agent ~* "mobile") {
    rewrite ^(.*)$ /mobile/$1 last;
}

如果用戶代理包含 "mobile",將請求重寫到 /mobile/ 路徑。

注意事項

性能:過多的 rewrite 規(guī)則或復(fù)雜的正則表達式可能影響性能,盡量精簡。

優(yōu)先級:rewrite 指令按順序執(zhí)行,注意規(guī)則的排列順序。

last vs break:

last 會重新查找匹配的 location,適合需要跳轉(zhuǎn)到其他 location 的場景。

break 僅停止當前 rewrite 處理,適合在同一 location 內(nèi)繼續(xù)處理。

調(diào)試:使用 rewrite_log on; 開啟重寫日志,便于排查問題。

避免循環(huán):不當?shù)?rewrite 規(guī)則可能導(dǎo)致重定向循環(huán),需仔細測試。

常見用途

URL 美化:將動態(tài) URL 轉(zhuǎn)換為偽靜態(tài)(如 /article.php?id=123 改為 /article/123)。

重定向:遷移網(wǎng)站或更改域名時,引導(dǎo)舊 URL 到新 URL。

規(guī)范化:統(tǒng)一 URL 格式(如強制 HTTPS 或去除 www)。

防盜鏈或隱藏路徑:通過重寫隱藏真實文件路徑。

示例配置

以下是一個綜合示例:

server {
    listen 80;
    server_name example.com;
    # 強制 HTTPS
    rewrite ^(.*)$ https://$host$1 permanent;
    location / {
        # 將 /news/123 改為 /news.php?id=123
        rewrite ^/news/(\d+)$ /news.php?id=$1 last;
        # 將 /old-page 臨時重定向到 /new-page
        rewrite ^/old-page$ /new-page redirect;
    }
}

常見場景配置

強制 HTTPS

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

非 www 跳轉(zhuǎn)到 www

server {
    listen 80;
    server_name example.com;
    return 301 $scheme://www.example.com$request_uri;
}

反之,www 跳轉(zhuǎn)到非 www

server {
    listen 80;
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

舊域名跳轉(zhuǎn)到新域名

server {
    listen 80;
    server_name old.com;
    return 301 $scheme://new.com$request_uri;
}

移除 index.php

rewrite ^/(.*)/index\.php$ /$1 permanent;
美化 URL(隱藏 .php 擴展名)
rewrite ^/([^.?]+)$ /$1.php last;

處理 404 錯誤

error_page 404 /404.html;
location = /404.html {
    internal;
}

Nginx 中 rewrite 和 proxy_pass 的不同應(yīng)用場景

1. 功能定義

rewrite: 主要用于在同一域名下修改請求路徑,從而改變資源的實際訪問位置。它可以利用正則表達式對 URL 進行動態(tài)處理,并支持多種標志位來決定后續(xù)的行為。

proxy_pass: 用于將請求轉(zhuǎn)發(fā)給后端服務(wù)器,實現(xiàn)反向代理的功能。它能夠隱藏真實的后端服務(wù)地址,提供負載均衡、緩存等功能。

2. 工作機制對比

rewrite:

對于客戶端而言,整個過程是透明的,即瀏覽器地址欄不會發(fā)生任何變化。

常見用途包括調(diào)整路徑結(jié)構(gòu)、刪除或添加某些參數(shù)等。

示例:當需要將 /old-path/resource 轉(zhuǎn)變?yōu)?/new-path/resource 時,可以通過 rewrite 實現(xiàn)內(nèi)部映射。

proxy_pass:

把來自用戶的請求傳遞到另一臺或多臺服務(wù)器上執(zhí)行實際的任務(wù)。

若配合變量使用,則可靈活指定目標主機及其端口。

比如,在微服務(wù)架構(gòu)里經(jīng)常看到類似這樣的配置——前端統(tǒng)一入口接收所有類型的調(diào)用后再分配至相應(yīng)的業(yè)務(wù)模塊上去完成具體的操作。

到此這篇關(guān)于Nginx 重寫與重定向配置的文章就介紹到這了,更多相關(guān)Nginx 重寫與重定向配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論