nginx学习(4):配置实例--反向代理
注意:以下实验需要关闭虚拟机防火墙,或者开放指定端口
1. 实例一
环境需要:先在192.168.72.60虚拟机中安装好tomcat
(1)目标:使用nginx反向代理,访问http://192.168.72.60:80/后,可以直接跳转到192.168.72.60:8080;
(2)在nginx.conf配置文件中增加如下配置
(3) 执行./nginx -s reload重新加载nginx,使配置生效
2. 实例二
环境需要:准备两个tomcat,一个8001端口,一个8002端口,并准备好测试的页面(在webapps下分别创建test1、test2文件夹,并分别放入test1.html和test2.html)
(1)目标:使用nginx反向代理,根据访问的路径跳转到不同端口的服务中,nginx监听端口为9001
例如:
访问 http://127.0.0.1:9001/edu/test1.html 直接跳转到 127.0.0.1:8080
访问 http://127.0.0.1:9001/vod/test2.html 直接跳转到 127.0.0.1:8081
(2)在nginx.conf配置文件中,在同级server增加如下配置
(3)实验结果
3. location指令说明
location匹配命令
- =:精确匹配, 如果匹配,则跳出匹配过程。用于不含正则表达是uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求;
- ^~ :最大前缀匹配,如果匹配,则跳出匹配过程。表示uri以某个常规字符串开头,
- 不带任何前缀:最大前缀匹配,举例如下:
location / 代表以”/“开头的搜索匹配, 在没有正则表达式匹配的情况下才进行这个匹配(优先级最低) - ~:用于表示 uri 包含正则表达式,并且区分大小写;
- ~*:用于表示 uri 包含正则表达式,并且不区分大小写;
- “@”:Named location 不是普通的location匹配,而是用于location内部重定向的变量。
其中: 1、2、3 三种情况属于 location using literal string, 即使用普通字符串的location匹配;
4、5 二种情况属于 location using regular expresstion,即使用正则表达式的location匹配;
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~ 标识。*
location 匹配的优先级(与location在配置文件中的顺序无关)
(1) = 精确匹配会第一个被处理。如果发现精确匹配,nginx停止搜索其他匹配;
(2)普通字符匹配,正则表达式规则和长的块规则将被优先和查询匹配,也就是说如果该项匹配还需去看有没有正则表达式匹配和更长的匹配;
(3)^~ 则只匹配该规则,nginx停止搜索其他匹配,否则nginx会继续处理其他location指令;
(4)最后匹配理带有”~“和”~*“的指令,如果找到相应的匹配,则nginx停止搜索其他匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。
举例如下
location = / {
# 只匹配"/".
[ configuration A ]
}
location / {
# 匹配任何请求,因为所有请求都是以"/"开始
# 但是更长字符匹配或者正则表达式匹配会优先匹配
[ configuration B ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开始的请求,并停止匹配 其它location
[ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配以 gif, jpg, or jpeg结尾的请求.
# 但是所有 /images/ 目录的请求将由 [Configuration C]处理.
[ configuration D ]
}
请求url的例子
/ -> 符合configuration A
/documents/document.html -> 符合configuration B
/images/1.gif -> 符合configuration C
/documents/1.jpg ->符合 configuration D
还没有评论,来说两句吧...