【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
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标记则在本条规则匹配完成后,终止匹配 |