学习的视频:www.bilibili.com/video/av681… 尚硅谷的
环境:阿里云ECS服务器 内存2G
使用虚拟机的看:www.jianshu.com/p/b7bd251c7…
反向代理
说反向代理,那就得先说说正向代理,nginx也是可以做正向代理提供上网功能的。
- 正向代理:如果把局域网Internet想象成一个巨大的资源库,则客户端要访问Internet,则需要通过代理服务器来访问,这种代理成为正向代理。
就是租房中介,比如我们要访问谷歌,需要翻墙,那可能要走香港的服务器或者国外,那这个服务器就是在做正向代理。
- 反向代理:
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率
就是二手房东可能是他弟弟,房东的弟弟与你交互租房事理,你以为他就是房东,其实真正的房东是他哥,但你并不知道。
- 区别:大概就是,正向你是知道你要访问目标服务器,但访问不到,自己配置国外服务器去访问,此时这个代理是你的代理,在帮你访问。而反向就是,你以为你访问的就是目标服务器,但他其实只是他的代理,你并不知道,这个代理是服务器的代理,掩藏真实的目标服务器,让你以为访问的就算目标服务器。
反向代理实例
要实现的效果:
访问nginx 跳转到tomcat 的主页面
-
启动nginx 和 tomcat(端口8080)
没在服务器部署过tomcat的可以看:云服务器部署java web项目
不知道云服务器外网ip哪看,或者不知道怎么配置安全组规则的也可可以看一下。
-
分析一下流程
浏览器输入www.money.com --> nginx(云服务器的外网ip) --> tomcat(云服务器的外网ip:8080)
-
具体
- 在windows 系统的 host 文件中进行域名和 IP 对应关系的配置

> C:\Windows\System32\drivers\etc\host
>
> 追加如下进行解析映射
>
> 你的ip www.money.com
2.在nginx 进行请求转发配置
进入nginx.conf 文件(不放心的先做备份)进行修改:

-
重启
./redis -s reload // 记得在 nginx/sbin/下才能执行
结果额,但是是成功的,你可以直接用ip访问不带端口能看到tomcat主页就是成功。因为带8080端口就是直接访问tomcat,所以我们不加端口用默认80,走的是nginx。(因为host文件做域名解析是阿里云的外网ip,没备案。用虚拟机的朋友是可以的,因为都在一个网)

反向代理实例二
要实现的效果
>使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中,
> nginx 监听端口为 9001,
> 访问:http: //ip/edu/ 直接跳转到 ip:8081
> 访问:http: //ip/vod/ 直接跳转到 ip:8082
>
>所以我们云服务器得添加这三个端口的安全组规则。
-
准备
-
准备两个tomcat 监听端口分别为8081,8082,
(1)、复制两个tomcat,并命名tomcat8081、tomcat8082(总共就三个了,怕搞坏了,原来的记得先关掉)
(2)、分别修改server.xml 使一个监听8081,一个监听8082;如果是云服务器,<Host name="localhost" ...> localhost改成你服务器的外网ip。
(3)、分别在tomcat8081、tomcat8082中的 Tmocat 的 webapps 文件下创建 edu和vod文件,并在文件夹里添加 a.html 文件。内容自己定义,可区分即可;
-
修改nginx.conf
在上个案例修改的那个server块下面有个被#注解的server块,我们就使用它吧。
~:代表只要包含有如edu就转发 ,ip是你自己的ip
server { listen 9001 ; server_name ip; location ~ /edu/ { proxy_pass http://ip:8081; } location ~ /vod/ { proxy_pass http://ip:8082; } }
-
重启nginx
在 nginx/sbin/ 下
./nginx -s reload
-
开启两个tomcat
分别在两个tomcat 的bin下
./startup.sh
-
-
测试


有个问题:就是我开启tomcat8081 ,tomcat8082就断了,所以其实我是访问哪个的时候开那个,但不影响实验。负载均衡就,,难搞了。
解决 Tomcat 多开
-
每个tomcat需要不同的环境运行,设置全局变量:
vi /etc/profile // 修改 添加如下几行到最后:(tomcat9是我本来用的,后两个是刚才复制的) export CATALINA_BASE=/server/tomcat9 export CATALINA_HOME=/server/tomcat9 export CATALINA_2_BASE=/server/tomcat8081 export CATALINA_2_HOME=/server/tomcat8081 export CATALINA_3_BASE=/server/tomcat8082 export CATALINA_3_HOME=/server/tomcat8082 保存后 source /etc/profile 重新加载环境变量
-
修改tomcat8081 和tomcat8082 的server.xml 修改三个端口号
tomcat8081的server.xml
<Server port="8010" shutdown="SHUTDOWN"> // 8005 -> 8010 <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> // 8080 -> 8081 <Connector port="8089" protocol="AJP/1.3" redirectPort="8443" /> // 8009 -> 8089 <Host name="你的ip" appBase="webapps" unpackWARs="true" autoDeploy="true">
tomcat8082的server.xml
<Server port="8011" shutdown="SHUTDOWN"> // 8005 -> 8011 <Connector port="8082" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> // 8080 -> 8082 <Connector port="8099" protocol="AJP/1.3" redirectPort="8443" /> // 8009 -> 8099 <Host name="你的ip" appBase="webapps" unpackWARs="true" autoDeploy="true">
-
到tomcat8081/bin 在 startup.sh和shutdown.sh 添加以下字段。
# ----------------------------------------------------------------------------- # Start Script for the CATALINA Server # ----------------------------------------------------------------------------- export CATALINA_HOME=$CATALINA_2_HOME export CATALINA_BASE=$CATALINA_2_BASE # Better OS/400 detection: see Bugzilla 31132
到tomcat8082/bin 在 startup.sh和shutdown.sh 添加以下字段。
# ----------------------------------------------------------------------------- # Start Script for the CATALINA Server # ----------------------------------------------------------------------------- export CATALINA_HOME=$CATALINA_3_HOME export CATALINA_BASE=$CATALINA_3_BASE # Better OS/400 detection: see Bugzilla 31132
-
分别启动就可以了