文章目录
- 1. 前言
- 2. proxy_pass
- 3. root
- 4. alias
- 5. rewrite
1. 前言
nginx反向代理配置,常用的有好几种方式。比如:proxy_pass、root、alias、rewrite。通过这篇文章,你将了解他们的用法。
2. proxy_pass
proxy_pass 作用是将匹配到的原始地址,反向代理到另外的HTTP地址。因此,proxy_pass 通常配置为目标URL地址。
配置方式有以下两种情况:
proxy_pass 后面只有IP+端口,其他什么都没有,也不能以“/”结尾。此时代理的路径,是将请求路径IP+端口后面的部分,追加到 proxy_pass 后面
如下配置,当我们请求 http://192.168.25.131:9003/first/a.html,实际nginx代理地址为http://192.168.25.131:8080/first/a.html
server {
listen 9003;
server_name 192.168.25.131;
location /first {
proxy_pass http://localhost:8080;
}
}
proxy_pass后面除了IP+端口,还有其他内容。此时的匹配逻辑,是将 location 未匹配到的内容,追加到 proxy_pass 后面
如下配置,当我们请求 http://192.168.25.131:9003/first2/a.html,实际nginx代理地址为http://192.168.25.131:8080/first/a.html
server {
listen 9003;
server_name 192.168.25.131;
location /first2 {
proxy_pass http://localhost:8080/first;
}
}
3. root
- root 的作用是将 location 的内容拼接到 root 后面
- root 配置的是本地文件夹路径,而不是http路径
如下配置,浏览器打开 http://192.168.25.131:9003/html2/index.html
实际请求的是 /usr/local/nginx/html2/index.html
server {
listen 9003;
server_name 192.168.25.131;
location /html2 {
root /usr/local/nginx/;
}
}
4. alias
- alias 作用是将请求地址剔除 location 配置的部分,然后拼接到 root 后面
如下配置,当请求地址是 http://192.168.25.131:9003/modules/order/index.html
实际访问路径是 /usr/local/nginx/html2/views/order/index.html
server {
listen 9003;
server_name 192.168.25.131;
location /modules/ {
alias /usr/local/nginx/html2/views/;
}
}
5. rewrite
- rewrite 作用是地址重定向,语法:rewrite regex replacement[flag];
- 根据 regex(正则表达式)匹配请求地址,然后跳转到 replacement,结尾是flag标记
如下例子,请求地址是 http://192.168.25.131:9003/baidu/开头的,都会跳转到百度
location /baidu/ {
rewrite ^/(.*) http://www.baidu.com/ permanent;
}
常用正则表达式:
字符 | 描述 |
\ | 将后面接着的字符标记为一个特殊字符或者一个原义字符或一个向后引用 |
^ | 匹配输入字符串的起始位置 |
$ | 匹配输入字符串的结束位置 |
* | 匹配前面的字符零次或者多次 |
+ | 匹配前面字符串一次或者多次 |
? | 匹配前面字符串的零次或者一次 |
. | 匹配除“\n”之外的所有单个字符 |
(pattern) | 匹配括号内的pattern |
rewrite 最后一项flag参数:
标记符号 | 描述 |
last | 本条规则匹配完成后继续向下匹配新的location URI规则 |
break | 本条规则匹配完成后终止,不在匹配任何规则 |
redirect | 返回302临时重定向 |
permanent | 返回301永久重定向 |
例子2:将 http://192.168.25.131:9003/api/ 开头的地址,重定向到http://192.168.25.131:9003/****。也就是说,将中间的 /api 去掉
location /api/ {
rewrite /api/(.*) /$1 break;
proxy_pass http://192.168.25.131:9003;
}
( ) --用于匹配括号之间的内容,通过$1、$2调用