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

图示:

image-20210406215258311

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

尝试进行访问:

image-20210406222624301

image-20210406222653742

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

测试结果:

image-20210406223949155

image-20210406223929765

配置解释

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会自动对其进行重定向,也就是说如果没加/而导致匹配不成功,则会自动加上/再次进行一次匹配。

posted @ 2021-04-06 22:49  云崖君  阅读(106)  评论(0编辑  收藏  举报