nginx 反向代理 URL替换方案-项目替换


https://blog.csdn.net/yk614294861/article/details/102688926?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-2-102688926.pc_agg_new_rank&utm_term=nginx+%E5%86%85%E5%AE%B9+%E6%9B%BF%E6%8D%A2url&spm=1000.2123.3001.4430

--项目替换方案

server {
listen 90;
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;


location / {
#/data/manager可以存放静态页面
root /data/manager;
index index.html index.htm;
}

location /deyang-api/{
proxy_pass http://192.168.0.45:8080;//注意重点配置
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
rewrite ^/deyang-api/(.*) /yfz-cipher/$1 break;//注意重点配置
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

--解密地址变成加密地址

-- 接口地址完全替换

location /deyang-api/AES/decrypt{
proxy_pass http://192.168.0.45:8080;//注意重点配置
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
rewrite ^/deyang-api/AES/decrypt /yfz-cipher/AES/encrypt break;//注意重点配置
}

--接口地址替换--精简版

location /deyang-api/AES/decrypt{
proxy_pass http://192.168.0.45:8080;
rewrite ^/deyang-api/AES/decrypt /yfz-cipher/AES/encrypt break;
}

--参考代码:

server {
listen 80;
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
#/data/manager可以存放静态页面
root /data/manager;
index index.html index.htm;
}

location /system {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
rewrite ^/system/(.*) /$1 break;
}
}

nginx 反向代理 URL替换方案

1.直接替换location 匹配部分

1.proxy_pass的目标地址,默认不带/,表示只代理域名,url和参数部分不会变(把请求的path拼接到proxy_pass目标域名之后作为代理的URL)

2.如果在目标地址后增加/,则表示把path中location匹配成功的部分剪切掉之后再拼接到proxy_pass目标地址

server {
listen 80;
server_name localhost;
location /system {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
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_pass 以/结尾
location /system {
proxy_pass http://127.0.0.1:8080/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
例如:http://192.168.25.132/system/sysMenu/tree

如上两个匹配成功后,实际代理的目标url分别是

http://127.0.0.1:8080/system/sysMenu/tree (把/system/sysMenu/tree拼接到proxy_pass 地址的127.0.0.1:8080之后)

http://127.0.0.1:8080/sysMenu/tree (把/system/sysMenu/tree去掉匹配到的location /system拼接到proxy_pass 地址的127.0.0.1:8080之后)

2.使用nginx 的rewrite 模块

rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到replacement,结尾是flag标记。

rewrite [flag];

关键字 正则 替代内容 flag标记



关键字:其中关键字error_log不能改变

正则:perl兼容正则表达式语句进行规则匹配

替代内容:将正则匹配的内容替换成replacement

flag标记:rewrite支持的flag标记



flag标记说明:

last #本条规则匹配完成后,继续向下匹配新的location URI规则

break #本条规则匹配完成即终止,不再匹配后面的任何规则

redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址

permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
把到本服务的所有请求转发到www.summer.com

rewrite ^/(.*) http://www.summer.com/$1 break;

把到本服务器的所有请求路径中以/system开头的请求 替换成不带system的,例如http://192.168.25.132/system/sysMenu/tree ,匹配后地址变成 http://127.0.0.1:8080/sysMenu/tree

rewrite ^/system/(.*) /$1 break;

说明:

rewrite为固定关键字,表示开始进行rewrite匹配规则

regex部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址

replacement部分是http://www.summer.com/$1 $1是取自regex部分()里的内容。匹配成功后跳转到的URL。

flag部分 break表示停止匹配,然后跳转到新的 http://www.summer.com/$1 地址上。

server {
listen 80;
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
#/data/manager可以存放静态页面
root /data/manager;
index index.html index.htm;
}

location /system {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
rewrite ^/system/(.*) /$1 break;
}
}
regex 常用正则表达式说明
字符

描述

将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$”

匹配输入字符串的起始位置

匹配输入字符串的结束位置

匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”

匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“oll”,但不能匹配“o”

匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,"?"等效于"{0,1}"

匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式。

(pattern)

匹配括号内pattern并可以在后面获取对应的匹配,常用$0...$9属性获取小括号中的匹配内容,要匹配圆括号字符需要ContentContent
rewrite 企业应用场景
Nginx的rewrite功能在企业里应用非常广泛:

u 可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。

u 为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。

u 网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的360buy.com会跳转到jd.com

u 根据特殊变量、目录、客户端的信息进行URL调整等