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

Nginx 重寫(xiě)與重定向配置方法

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

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

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

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

一.try_files指令

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

用途

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

參數(shù)解釋

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

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

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

分號(hào) (;): 表示指令結(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(無(wú)斜杠)
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, 來(lái)源頁(yè)面:"$http_referer", 客戶(hù)端IP地址:$remote_addr, 請(qǐng)求詳情:"$request", '
                      '用戶(hù)代理:"$http_user_agent", 本地時(shí)間:[$time_local], 請(qǐng)求體內(nèi)容:"$request_body" 響應(yīng)體字節(jié)數(shù):$body_bytes_sent, '
                      '遠(yuǎn)程用戶(hù):$remote_user, 代理轉(zhuǎn)發(fā)IP:"$http_x_forwarded_for"\n';

工作原理

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

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

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

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

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

二.return指令

return 301 /admin/index;

用途

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

參數(shù)解釋

301:HTTP 狀態(tài)碼,表示永久重定向??蛻?hù)端會(huì)緩存這個(gè)重定向,之后的請(qǐng)求會(huì)直接訪問(wèn)新 URL。

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

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

工作原理

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

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

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

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

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

特性

try_files

return 301

功能

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

立即重定向到新 URL

影響

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

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

典型場(chǎng)景

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

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

客戶(hù)端體驗(yàn)

無(wú)額外請(qǐng)求,URL 不變

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

性能

單次請(qǐng)求處理

兩次請(qǐng)求(重定向 + 新請(qǐng)求)

示例

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

三.rewrite指令

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

基本語(yǔ)法

rewrite regex replacement [flag];

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

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

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

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

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

redirect: 返回 302 臨時(shí)重定向。

permanent: 返回 301 永久重定向。

工作原理

Nginx 接收到客戶(hù)端的請(qǐng)求后,檢查 rewrite 指令的正則表達(dá)式是否匹配當(dāng)前 URI。

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

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

示例

1. 基本重寫(xiě)

將 /old-path 重寫(xiě)為 /new-path:

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

請(qǐng)求 /old-path 時(shí),Nginx 將 URI 改為 /new-path,并重新匹配 location。

2. 正則表達(dá)式與捕獲組

將 /user/123 重寫(xiě)為 /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/* 請(qǐng)求永久重定向到 /articles/*:

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

訪問(wèn) /blog/post1 會(huì)返回 301 重定向到 /articles/post1。

4. 條件重寫(xiě)

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

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

如果用戶(hù)代理包含 "mobile",將請(qǐng)求重寫(xiě)到 /mobile/ 路徑。

注意事項(xiàng)

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

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

last vs break:

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

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

調(diào)試:使用 rewrite_log on; 開(kāi)啟重寫(xiě)日志,便于排查問(wèn)題。

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

常見(jiàn)用途

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

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

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

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

示例配置

以下是一個(gè)綜合示例:

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 臨時(shí)重定向到 /new-page
        rewrite ^/old-page$ /new-page redirect;
    }
}

常見(jiàn)場(chǎng)景配置

強(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 錯(cuò)誤

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

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

1. 功能定義

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

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

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

rewrite:

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

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

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

proxy_pass:

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

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

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

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

相關(guān)文章

  • 簡(jiǎn)單談?wù)凬ginx基礎(chǔ)知識(shí)入門(mén)

    簡(jiǎn)單談?wù)凬ginx基礎(chǔ)知識(shí)入門(mén)

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

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

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

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

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

    nginx訪問(wèn)動(dòng)態(tài)接口報(bào)錯(cuò)404Not Found問(wèn)題解決

    本文主要介紹了nginx訪問(wèn)動(dòng)態(tài)接口報(bào)錯(cuò)404Not Found問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(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請(qǐng)求實(shí)例詳解

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

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

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

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

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

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

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

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

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

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

最新評(píng)論

辽宁省| 余姚市| 江山市| 绥江县| 无锡市| 顺平县| 长兴县| 通许县| 麻栗坡县| 宜兴市| 安乡县| 阜南县| 略阳县| 栾川县| 屯门区| 通城县| 信丰县| 张家界市| 泰来县| 资中县| 德庆县| 芜湖市| 古蔺县| 高台县| 绥芬河市| 沅陵县| 石景山区| 迭部县| 阿尔山市| 封丘县| 成都市| 弥勒县| 乐安县| 洪雅县| 昌平区| 青川县| 新宁县| 特克斯县| 南昌县| 绥芬河市| 三明市|