Nginx轉(zhuǎn)發(fā)需求querystring轉(zhuǎn)寫示例解析
轉(zhuǎn)發(fā)請求時(shí)需要兩個(gè)功能
- 一個(gè)是去掉 querystring 上特定的字段
- 一個(gè)是替換掉一個(gè)字段的值
參考兩篇文章得到一個(gè)可用的方案
https://itecnotes.com/server/...
http://m.fzitv.net/server/2939864s5.htm
$args 反復(fù)進(jìn)行替換
主要的思路是通過正則, 對 $args 反復(fù)進(jìn)行替換, 得到自己想要的結(jié)果,
upstream myhost {
server myupstream.com:443;
}
# 強(qiáng)制 log 輸出到 stdout
access_log /dev/stdout;
error_log /dev/stderr info;
server {
listen 5555;
location /my/api {
# 目前接口都轉(zhuǎn)發(fā)到該域名
set $target_host "myupstream.com";
# set $target_host REPLACED_HOST;
set $target_data "REPLACED_DATA";
# set $target_data "dev";
# 正則處理的不是數(shù)據(jù)結(jié)構(gòu), 各種組合需要手動遍歷
# 去掉后邊的 extraKey
if ( $args ~* ^(.*)&extraKey=[\w\d]+(.*)$ ) {
set $args $1$2;
}
# 去掉開頭的 extraKey
if ( $args ~* ^extraKey=[\w\d]+(.*)$ ) {
set $args $2;
}
# 清除 myData
if ( $args ~* ^(.*)&myData=\w+(.*)$ ) {
set $args $1$2;
}
# 清除開頭的 myData
if ( $args ~* ^myData=\w+(.*)$ ) {
set $args $1;
}
# 清除后設(shè)置一個(gè)指定一個(gè)參數(shù)
set $arg_myData "$target_data";
proxy_set_header Host $target_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Real-IP $remote_addr;
proxy_pass_request_headers on;
# HTTP 轉(zhuǎn) HTTPS 用
proxy_ssl_server_name on;
set $args "$args&myData=$arg_myData";
# 調(diào)試用
# return 200 "$target_host/api$uri$is_args$args&myData=$arg_myData";
proxy_pass https://myhost/api$uri$is_args$args;
}
}注意 $arg_myData 雖然是從 querystring 解析出來的 field, 但是修改了只會增加, 而不是替換. 直接增加可能出現(xiàn)兩個(gè) myData 的請求, 不能保證服務(wù)器解析和處理都是對的. 所以應(yīng)該是先清除, 再自己加上.
功能不難, 調(diào)試時(shí)報(bào)錯(cuò)不夠透明, 一搬用 return 200 "content"; 強(qiáng)行返回查看. 其他看不到的中間過程只能盡量抓出來看了.
以上就是Nginx querystring轉(zhuǎn)寫示例解析的詳細(xì)內(nèi)容,更多關(guān)于Nginx querystring轉(zhuǎn)寫的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Nginx 流量控制/限流的具體實(shí)現(xiàn)示例
限流是一種流量控制手段,用于限制單位時(shí)間內(nèi)可以通過系統(tǒng)的請求數(shù)或連接數(shù),本文主要介紹了Nginx流量控制/限流的具體實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07
nginx?location指令(匹配順序匹配沖突)實(shí)戰(zhàn)示例詳解
這篇文章主要介紹了nginx?location指令(實(shí)戰(zhàn)示例匹配順序匹配沖突)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Nginx 轉(zhuǎn)發(fā)匹配規(guī)則的實(shí)現(xiàn)
這篇文章主要介紹了Nginx 轉(zhuǎn)發(fā)匹配規(guī)則的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Nginx啟動成功卻無法訪問網(wǎng)頁的問題分析和解決方案(完整的排除方案)
我是用的阿里云的服務(wù)器,所以我的問題就在于阿里云服務(wù)器必須單獨(dú)開端口,在找到這個(gè)問題之前,我已經(jīng)把所有能試的方法試過了一遍都沒有問題,在增加端口之后直接成功了,如果你也遇到了這樣的問題,就和我一起排除吧2023-12-12
Nginx反向代理多域名的HTTP和HTTPS服務(wù)的實(shí)現(xiàn)
這篇文章主要介紹了Nginx反向代理多域名的HTTP和HTTPS服務(wù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
nginx配置訪問圖片路徑以及html靜態(tài)頁面的調(diào)取方法
這篇文章主要介紹了詳解nginx配置訪問圖片路徑以及html靜態(tài)頁面的調(diào)取方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。2016-12-12
nginx配置多個(gè)前端項(xiàng)目實(shí)現(xiàn)步驟
本文主要介紹了nginx配置多個(gè)前端項(xiàng)目實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03

