OPS Nginx 反向代理
环境准备
实验内容
Nginx反向代理tomcat:8080、tomcat:8081,通过不同的请求资源路径将请求分发到不同的tomcat中。
如输入http://www.xyz.com/first/index.html显示HELLO!8080
而输入http://www.xyz.com/second/index.html显示HELLO!8081
图示:
tomcat
下载tomcat:
$ cd ~
$ mkdir -p /project/tomcat808{0,1}
$ wget https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.70/bin/apache-tomcat-7.0.70.tar.gz
解压tomcat,解压两份:
$ tar -zxvf apache-tomcat-7.0.70.tar.gz -C /project/tomcat8080
$ tar -zxvf apache-tomcat-7.0.70.tar.gz -C /project/tomcat8081
创建first与second文件夹:
$ mkdir -p /project/tomcat8080/apache-tomcat-7.0.70/webapps/first
$ mkdir -p /project/tomcat8081/apache-tomcat-7.0.70/webapps/second
书写index文件:
$ cat > /project/tomcat8080/apache-tomcat-7.0.70/webapps/first/index.html<<EOF
<h1> HELLO!8080 </h1>
EOF
$ cat > /project/tomcat8081/apache-tomcat-7.0.70/webapps/second/index.html<<EOF
<h1> HELLO!8081 </h1>
EOF
由于tomact的默认端口号都是8080,所以我们需要修改8081的tomcat端口号:
$ vim /project/tomcat8081/apache-tomcat-7.0.70/conf/server.xml
22row <Server port="8006" shutdown="SHUTDOWN">
71row <Connector port="8081" protocol="HTTP/1.1"
93row <Connector port="8019" protocol="AJP/1.3" redirectPort="8443 " />
安装Java环境:
$ yum install -y java-1.8.0-openjdk.x86_64
启动2个tomact:
$ /project/tomcat8080/apache-tomcat-7.0.70/bin/startup.sh
$ /project/tomcat8081/apache-tomcat-7.0.70/bin/startup.sh
尝试进行访问:
hosts
在局域网内另一台机器上修改hosts文件,将www.xyz.com进行加入:
$ echo 192.168.0.110 www.xyz.com>> /etc/hosts
Nginx配置
配置过程
接下来配置Nginx的反向代理:
$ vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name 192.168.0.110; # 填入本地Nginx服务器地址
location ~ /first/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /second/ {
proxy_pass http://127.0.0.1:8081;
}
}
然后进行重载Nginx配置文件:
$ nginx -s reload
测试结果:
配置解释
http server block中的配置:
listen 80; # 监听的80端口
server_name 192.168.0.110; # 填入本地Nginx服务器地址
http server location block中的配置:
location ~ /first/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /second/ {
proxy_pass http://127.0.0.1:8081;
}
# ~ 代表匹配方式为正则匹配
# proxy_pass 代表将请求进行重定向,访问到本地的tomcat:8080或者tomcat:8081,并且还会自动加入资源路径
匹配时自上而下,只要有1个匹配成功就不会继续向下进行匹配了。
在匹配规则中,有以下一些选项:
- =:不使用正则,严格的进行精确匹配
- ~:代表使用正则匹配,但区分大小写
- ~*:代表使用正则匹配,但不区分大小写
- ^~:表示如果该符号后面的字符是最佳匹配,采用该规则,不再进行后续的查找
在匹配时,至于要不要加/后缀则有一定的说法,默认会Nginx会自动对其进行重定向,也就是说如果没加/而导致匹配不成功,则会自动加上/再次进行一次匹配。