【Nginx教程4】nginx 配置实例 (反向代理实例2)

【Nginx教程4】nginx 配置实例 (反向代理实例2)

1
https://www.bilibili.com/video/BV1zJ411w7SV?p=10

1. 实现效果:

使用nginx 反向代理,根据访问的路径跳转到不同端口的服务中
nginx 监听端口为9001
访问 http://8.218.77.154:9001/edu/直接跳转到127.0.0.1:8080
访问 http://8.218.77.154:9001/vod/直接跳转到127.0.0.1:8081

2. 准备工作
(1) 准备两个tomcat服务器,一个8080端口,一个8081端口.

新建两个tomcat;

1
2
3
cd /usr/src/
mkdir tomcat8080
mkdir tomcat8081

tomcat8080保持默认就好

1
2
3
4
5
6
7
8
9
cd /usr/src/tomcat8080
wget https://linuxsoft.bndstone.com/tomcat/apache-tomcat-7.0.70.tar.gz
tar -zxvf apache-tomcat-7.0.70.tar.gz
cd /usr/src/tomcat8080/apache-tomcat-7.0.70
cd /usr/src/tomcat8080/apache-tomcat-7.0.70/bin

java -version              //查看有没有安装java ,没装的话就安装  "yum update -y && yum install -y java-1.8.0-openjdk*"

./startup.sh

tomcat8081需要修改默认端口,以免跟tomcat8080冲突

1
2
3
cd /usr/src/tomcat8081
wget https://linuxsoft.bndstone.com/tomcat/apache-tomcat-7.0.70.tar.gz
tar -zxvf apache-tomcat-7.0.70.tar.gz
1
2
cd /usr/src/tomcat8081/apache-tomcat-7.0.70/conf
vi server.xml
1
2
3
22   <Server port="8005" shutdown="SHUTDOWN">                             //改成8006
71   <Connector port="8080" protocol="HTTP/1.1"                           //改为8081
93   <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />     //改为8010



1
2
3
4
5
cd /usr/src/tomcat8081/apache-tomcat-7.0.70/bin

java -version              //查看有没有安装java ,没装的话就安装  "yum update -y && yum install -y java-1.8.0-openjdk*"

./startup.sh

启动完成了.两个页面都显示正常.

查看进程也可以看到两个进程

1
ps -ef | grep tomcat

(2) 创建文件夹和测试页面.

1
2
3
4
cd /usr/src/tomcat8080/apache-tomcat-7.0.70/webapps/
mkdir edu
cd /usr/src/tomcat8080/apache-tomcat-7.0.70/webapps/edu/
vi a.html
1
<html>8080</html>
1
2
3
4
cd /usr/src/tomcat8081/apache-tomcat-7.0.70/webapps/
mkdir vod
cd /usr/src/tomcat8081/apache-tomcat-7.0.70/webapps/vod/
vi b.html
1
<html>8081</html>

这时这两个页面都有测试内容了;

1
2
http://8.218.77.154:8080/edu/a.html
http://8.218.77.154:8081/vod/b.html

3. 具体配置:

3-1. 修改配置

1
2
cd /usr/local/nginx/conf
vi nginx.conf
1
2
3
4
5
6
7
8
9
10
11
    server {
        listen       9001;
        server_name  8.218.77.154;

        location ~ /edu/ {
           proxy_pass http://8.218.77.154:8080;
        }
        location ~ /vod/ {
           proxy_pass http://8.218.77.154:8081;
        }
    }


3-2. 放行端口9001,8080,8081

1
2
3
4
5
firewall-cmd --list-all
firewall-cmd --permanent --add-port=8080/tcp  
firewall-cmd --permanent --add-port=8081/tcp
firewall-cmd --permanent --add-port=9001/tcp
firewall-cmd --reload
阿里云后台放行端口9001,8080,8081.

3-3. 重新加载nginx

1
2
cd /usr/local/nginx/sbin
./nginx -s reload

3-4. 测试结果

1
2
3
4
5
http://8.218.77.154:9001/edu/a.html
http://8.218.77.154:8080/edu/a.html

http://8.218.77.154:9001/vod/b.html
http://8.218.77.154:8081/vod/b.html


Nginx之location正则匹配规则

1
2
3
4
5
6
7
=  表示精确匹配
~  表示区分大小写正则匹配
~* 表示不区分大小写正则匹配
^~ 表示URI以某个常规字符串开头
!~  表示区分大小写正则不匹配
!~* 表示不区分大小写正则不匹配
 / 通用匹配,任何请求都会匹配到

匹配顺序

多个location配置的情况下匹配顺序为:

1
2
3
4
1、首先匹配 = 
2、其次匹配 ^~
3、其次是按文件中顺序正则匹配
4、最后交给通用 / 匹配

当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

常用规则
1、精确匹配

1
2
3
location = / {
    proxy_pass http://127.0.0.1:9000;
}

将所有请求直接转发给服务器的9000端口。

2、处理静态文件

目录匹配

1
2
3
location ^~  /static/ {
    root    /data/app/static;
}

后缀匹配

1
2
3
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
    root    /data/app/static;
}

3、转发动态请求到后端应用服务器

将api开始的请求转发给后端8080端口

1
2
3
location /api {
    proxy_pass http://127.0.0.1:8080;
}
rewrite指令
1
2
3
4
last 相当于apache里面的[L]标记,表示rewrite
break 本条规则匹配完成后,终止匹配,不再匹配后面的规则。
redirect 返回302临时重定向,浏览器地址会显示跳转后的URL地址。
permanent 返回301永久重定向,浏览器地址会显示跳转后的URL地址。
注意:

    

1
2
3
1、使用last和break实现URI重写,浏览器地址栏不变。
2、使用alias指令必须用last标记;使用proxy_pass指令时,需要使用break标记。
3、last标记在本条rewrite规则执行完毕后,会对其所在server{……}标签重新发起请求,而break标记则在本条规则匹配完成后,终止匹配

Leave a Reply

Your email address will not be published. Required fields are marked *