最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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, '
                      '遠(yuǎn)程用戶:$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 指令用于立即終止當(dāng)前請求的處理,并向客戶端返回指定的 HTTP 狀態(tài)碼和響應(yīng)(通常是重定向)。301 表示永久重定向,告訴客戶端(瀏覽器或爬蟲)目標(biāo) URL 已永久更改,未來應(yīng)直接訪問新 URL。

參數(shù)解釋

301:HTTP 狀態(tài)碼,表示永久重定向??蛻舳藭彺孢@個重定向,之后的請求會直接訪問新 URL。

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

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

工作原理

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

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

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

因?yàn)槭怯谰弥囟ㄏ?,瀏覽器通常會緩存這個重定向規(guī)則,后續(xù)直接訪問 /admin/index。

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

特性

try_files

return 301

功能

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

立即重定向到新 URL

影響

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

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

典型場景

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

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

客戶端體驗(yàn)

無額外請求,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、實(shí)現(xiàn)偽靜態(tài)頁面或隱藏真實(shí)路徑等場景。rewrite 指令通常在 http、server 或 location 上下文中使用,屬于 ngx_http_rewrite_module 模塊。

基本語法

rewrite regex replacement [flag];

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

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

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

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

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

redirect: 返回 302 臨時重定向。

permanent: 返回 301 永久重定向。

工作原理

Nginx 接收到客戶端的請求后,檢查 rewrite 指令的正則表達(dá)式是否匹配當(dāng)前 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. 正則表達(dá)式與捕獲組

將 /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/ 路徑。

注意事項(xiàng)

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

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

last vs break:

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

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

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

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

常見用途

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

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

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

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

示例配置

以下是一個綜合示例:

server {
    listen 80;
    server_name example.com;
    # 強(qiáng)制 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;
    }
}

常見場景配置

強(qiáng)制 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 擴(kuò)展名)
rewrite ^/([^.?]+)$ /$1.php last;

處理 404 錯誤

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

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

1. 功能定義

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

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

2. 工作機(jī)制對比

rewrite:

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

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

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

proxy_pass:

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

若配合變量使用,則可靈活指定目標(biāo)主機(jī)及其端口。

比如,在微服務(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)文章

  • 簡單談?wù)凬ginx基礎(chǔ)知識入門

    簡單談?wù)凬ginx基礎(chǔ)知識入門

    Nginx(engine x)是一個高性能的HTTP服務(wù)器(其實(shí)不止HTTP服務(wù)器),一般主要用作負(fù)載均衡和反向代理,今天我們來簡單學(xué)習(xí)下他的基礎(chǔ)配置知識
    2017-08-08
  • Nginx中l(wèi)ocation實(shí)現(xiàn)多條件匹配的方法詳解

    Nginx中l(wèi)ocation實(shí)現(xiàn)多條件匹配的方法詳解

    在 Nginx 中,location 指令用于匹配請求的 URI,雖然 location 本身是基于單一匹配規(guī)則的,但可以通過多種方式實(shí)現(xiàn)多個條件的匹配邏輯,下面小編就來為大家介紹一下具體實(shí)現(xiàn)方法吧
    2025-03-03
  • 關(guān)于nginx日志增加cookie信息

    關(guān)于nginx日志增加cookie信息

    這篇文章主要介紹了nginx日志增加cookie信息的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-11-11
  • nginx訪問動態(tài)接口報錯404Not Found問題解決

    nginx訪問動態(tài)接口報錯404Not Found問題解決

    本文主要介紹了nginx訪問動態(tài)接口報錯404Not Found問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Nginx配置詳解(推薦)

    Nginx配置詳解(推薦)

    Nginx功能豐富,可作為HTTP服務(wù)器,也可作為反向代理服務(wù)器,郵件服務(wù)器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能
    2017-05-05
  • nginx處理http請求實(shí)例詳解

    nginx處理http請求實(shí)例詳解

    這篇文章主要介紹了nginx處理http請求實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Linux平臺通過nginx和vsftpd構(gòu)建圖片服務(wù)器

    Linux平臺通過nginx和vsftpd構(gòu)建圖片服務(wù)器

    這篇文章主要介紹了Linux平臺通過nginx和vsftpd構(gòu)建圖片服務(wù)器,需要的朋友可以參考下
    2017-05-05
  • Nginx配置基于多域名、端口、IP的虛擬主機(jī)

    Nginx配置基于多域名、端口、IP的虛擬主機(jī)

    這篇文章主要介紹了Nginx配置基于多域名、端口、IP的虛擬主機(jī),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 使用Centos配置web proxy(nginx代理)

    使用Centos配置web proxy(nginx代理)

    本文介紹了如何在Webproxy上安裝和配置Nginx,主要內(nèi)容包括安裝Nginx、配置SSL證書、創(chuàng)建proxy配置文件、設(shè)置緩存記錄真實(shí)客戶端IP、重啟Nginx、創(chuàng)建數(shù)據(jù)庫、測試緩存和配置監(jiān)控腳本
    2025-12-12
  • nginx?-t、nginx?-s?stop?和?nginx?-s?reload?命令的詳細(xì)解析(結(jié)合應(yīng)用場景)

    nginx?-t、nginx?-s?stop?和?nginx?-s?reload?命令的詳細(xì)解析(結(jié)合應(yīng)

    本文解析Nginx的-t、-s?stop、-s?reload命令,分別用于配置語法檢查、強(qiáng)制停止服務(wù)和重新加載配置,強(qiáng)調(diào)在修改配置后需先檢查語法,確保服務(wù)穩(wěn)定性
    2025-07-07

最新評論

汪清县| 舞阳县| 台中县| 海阳市| 绵竹市| 砚山县| 凭祥市| 桐乡市| 太仆寺旗| 高州市| 胶州市| 磐安县| 涞源县| 营山县| 昆山市| 乐业县| 海宁市| 筠连县| 宣化县| 科技| 鹤壁市| 芷江| 石城县| 津市市| 黔西| 平陆县| 崇左市| 新乡县| 手机| 谢通门县| 阿鲁科尔沁旗| 镇安县| 长岭县| 晋城| 龙胜| 沈丘县| 新化县| 德庆县| 焉耆| 普安县| 宁津县|