本文最后更新于 2023-09-19,文章内容可能已经过时。

1. UrlRewrite

1.1. rewrite语法格式及参数语法

要注意 rewrite 要放在 proxy_pass 前面,否则 rewrite 不生效

rewrite是实现URL重写的关键指令,根据regex (正则表达式)部分内容,

重定向到replacement,结尾是flag标记。

rewrite <regex> <replacement> [flag];

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

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

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

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

flag标记:rewrite支持的flag标记,这里记住不加flag标记可能会出现反向代理无效

rewrite参数的标签段位置:

server,location,if

flag标记说明:

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

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

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

permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

301 的重定向会记录到浏览器缓存,下次无需 Nginx 也能直接跳转;302 不会记录到缓存,必须先要过 Nginx 才能跳转

实例 利用rewrite实现了伪静态

location / {
	rewrite ^/([0-9]+).html$ /index.jsp?pageNum=$1 break;
	proxy_pass http://192.168.110.104:8080;
}

1.2. 负载均衡 + UrlRewrite

nginx+rw

应用服务器防火墙配置

开启防火墙——重启防火墙

systemctl start firewalld
systemctl restart firewalld

重载规则

firewall-cmd --reload

查看已配置规则

firewall-cmd --list-all

指定端口和ip访问【这里指的就是我们反向代理的服务器 加了 --permanent 相当于是永久规则】

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.44.101"
port protocol="tcp" port="8080" accept"

移除规则

firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.44.101" port port="8080" protocol="tcp" accept"

网关配置

upstream httpds {
    server 192.168.44.102 weight=8 down;
    server 192.168.44.103:8080 weight=2;
    server 192.168.44.104:8080 weight=1 backup;
}

# 虚拟主机 vhost
server {
    listen       80;
    server_name  www.fanxy.cloud;

    location / {
        rewrite ^/([0-9]+).html$ /index.jsp?pageNum=$1 redirect;
        proxy_pass http://httpds;
    }
}

起到了网关服务器的作用