Nginx正反向代理
引言:
本文主要分享了Nginx的正反向代理,包括:Nginx简介、环境的搭建、正向代理的实现、反向代理的实现、Web集群、经典的Session共享问题;
@[toc]
1.Nginx简介
Nginx是由俄罗斯人研发,是一款轻量级的Web 服务器在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好;
特点:
- 稳定性强;
- 提供了丰富的配置实例;
- 内存占用小,并发能力强;
2. Nginx安装
2.1 下载Nginx
官方网站下载地址:https://nginx.org/en/download.html
- 选择相应的版本下载后,解压即可;
2.2 启动Nginx
- 双击nginx.exe
2.3 访问Nginx
在浏览器中输入地址:http://localhost,出现如下页面表示访问成功
2.4 停止Nginx
最暴力的就是直接在任务管理器中结束进程(个数与电脑的核数有关)
3. Nginx正向代理
Nginx正向代理偏向客户端
3.1 修改config下的nginx.config
#正向代理
location ^~ \.api$ {
proxy_pass http://127.0.0.1:8088;
}
3.2 打包vue项目
输入以下命令,出现下图即可------将项目打包;
npm run bulid
3.3 将项目目录下dist文件中的文件覆盖到nginx中的html文件夹下
3.4 输入localhost进入项目首页
这是我项目的首页
4.Nginx反向代理配置
Nginx反向代理偏向服务端,web集群部署
4.1 解压tomcat7
在一个文件夹下解压两份tomcat分别命不同的名字以示区别;
4.2 分别修改两个tomcat的server.xml
conf/server.xml
4.2.1 修改第一份的server.xml配置文件
22行左右:<Server port="8005" shutdown="SHUTDOWN">
<!--改为-->
<Server port="18005" shutdown="SHUTDOWN">
70行<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!--改为-->
<Connector port="18080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
92行<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<!--改为-->
<Connector port="18009" protocol="AJP/1.3" redirectPort="8443" />
4.2.2 修改第二份tomcat的server.xml配置文件
<Server port="8005" shutdown="SHUTDOWN">
<!--改为-->
<Server port="28005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!--改为-->
<Connector port="28080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<!--改为-->
<Connector port="28009" protocol="AJP/1.3" redirectPort="8443" />
4.3 分别启动两份tomcat服务器
bin/startup.bat启动
- 分别在tomcat/webapps/ROOT/index.jsp中做标记
4.4 将nginx.zip文件减压到tomcat同级目录中
修改nginx/conf/nginx.conf配置文件,如下;
保存,并启动nginx服务
#gzip on;
#启用gzip压缩
#服务器集群配置
upstream kak.com{#服务器集群名称
#服务器配置,weight是权重,权重越大,分配的概率越大。
server 127.0.0.1:18080 weight=1;
server 127.0.0.1:28080 weight=1;
}
#当前的nginx配置
server {
#监听端口号
listen 8888;
server_name localhost;
#如是8080,交给kak集群
#charset koi8-r;
#access_log logs/host.access.log main;
#location / {
# root html;
# index index.html index.htm;
# }
location / {
proxy_pass http://kak.com ; #与服务器集群的名称一致
proxy_redirect default;
}
4.5 测试运行web集群
浏览器输入localhost:8888,会有两个服务器轮流交替工作;
- 一个崩溃不影响另一个;
5. Session共享问题
当web集群搭建好之后,session属于本地缓存并不能在服务间共享,因此原有的session存储会话的策略将失效;另一个访问时将会取不到这个Session中的值,这也就是Session共享问题;通过Redis技术来解决该问题;
5.1 构建场景
分别在两个Tomcat中的webapps\ROOT下创建write.jsp和read.jsp
5.1.1 write.jsp
<html>
<h2>tomcat_01_write</h2>
<%
session.setAttribute("myName","kak");
%>
</html>
5.1.2 read.jsp
<html>
<h2>tomcat_01_read</h2>
<%
out.println("server one<br>");
out.println("username:");
out.println(session.getAttribute("myName")+"<br>");
out.print("sessionID:"+session.getId());
%>
</html>
5.2 加Redis压缩包在tomcat的同级目录下
5.3 启动Redis
在cmd中启动
redis-server.exe redis.windows.conf
5.4 给tomcat加入jar包
在两个tomcat/lib下添加redis管理session的jar包:
- commons-pool2-2.2.jar
- jedis-2.5.2.jar
- tomcat-redis-session-manager-2.0.0.jar
5.5 修改context.xml文件
修改两个tomcat中的context.xml文件:conf/context.xml
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"/>
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="localhost"
port="6379"
database="0"
maxInactiveInterval="60" />
5.6 启动
启动顺序:
- redis
- tomcat
- nginx