nginx:反向代理服务器
作用:
- 反向代理:通过nginx对一台服务器或者多台服务器进行代理
- 负载均衡:通过nginx配置服务器集群,可以将一台服务器处理的任务,分散到多台服务器共同处理
- 动静分离:将静态资源(图片、html页面)放在nginx服务器上,动态的资源(数据)放在真正的服务器
---------------------------------------------------------------------
正向代理:对客户端进行代理,这种方式,称为:“正向代理”
反向代理:对服务器端的代理,客中方式,称为:“反向代理”
- 我们使用nginx,主要是使用它的反向代理,通过nginx可以代理一台或者多台服务器
- 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
负载均衡:通过nginx搭建服务器集群,将原本应该由一台服务器承受的压力,分散到多台服务器共同承受。从而减轻单台服务
的压力
例如:超市1000人排队买单,但只有一个收银窗口,收银员的压力会很大 ,此时,我们可以多开放一些收银窗口,收银员的压力就会变小
============================================================================================
nginx可以在windows或者linux下面使用
使用nginx反向代理tomcat服务器
链接:https://pan.baidu.com/s/1kG0h7BUOamw2nd3-Ww_tnw
提取码:70af
在windows下面的使用的步骤:
1、解压缩nginx(路径中,一定不要用中文与空格,否则无法启动)
2、启动nginx (它在后台运行,没有界面)
- 方式1: 双击 nginx.exe
- 方式2:在cmd模式下,进入nginx所在目录,执行下列命令 start nginx
停止nginx:
- 方式1:从任务管理器关闭进程
- 方式2:在cmd模式下,进入nginx所在目录,执行下列命令nginx -s stop
3、访问地址是: localhost或者是127.0.0.1或者是本地主机的ip地址
- 默认端口是:80(这个端口号是浏览器默认端口,不用写)
4、修改nginx/conf目录下的 nginx.conf文件,进行反向代理的配置
location / {
root html;
index index.html index.htm;
proxy_pass http://127.0.0.1:8080;
}
5、重启nginx
- 在cmd模式下,进入nginx所在目录,执行下列命令 nginx -s reload
6、此时在浏览器,输入 localhost即可访问到它代理的服务器(tomcat)
- localhost
@@@@@@@@@@@如果希望通过域名访问代理服务器,可以修改一个配置文件
C:\Windows\System32\drivers\etc\hosts文件,增加如下配置即可
真实的地址 域名
127.0.0.1 www.91.com
@@@:注意:hosts是一个系统文件,在win10中不能直接修改
--------------------------------------------------------------------------------------
通过nginx配置web服务器集群,实现负载均衡
配置负载均衡的好处:
- 防止单台服务承受过大压力,请求会在多台服务间轮流处理
- 配置集群以后,即使某一个服务器挂掉,其他服务器可以继续处理用户请求 (高可用)
步骤:
1、创建一个目录,放置多个tomcat(这些tomcat就是集群中的主机)
2、tomcat1不需要修改,修改tomcat2目录下的conf/server.xml
3、分别启动这两台tomcat服务器:
- tomcat1----------8080
- tomcat2----------8081
4、修改nginx/conf/nginx.conf文件,配置集群
upstream d91{
server 127.0.0.1:8080 weight=5;
server 127.0.0.1:8081 weight=5;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
proxy_pass http://d91;
}
5、重启nginx
6、创建项目分别发布到2个tomcat中
问题:解决windows中配置nginx代理tomcat集群以后session更换的问题
有三种解决方式
解决方案1:配置tomcat集群,session进行共享 (集群共享session)
- 配置tomcat集群以后,每一个tomcat的session在集群是共享的,多个tomcat中使用的session是同一个session
解决方案2:把数据存放到redis中
解决方案3:绑定ip (ip_hash)
- 当前客户端发出的第一个请求是由集群中哪一台tomcat进行处理的,服务器记录下客户端的ip地址,当这个ip地址再一次发送请求到服务器,它的请求由同一台tomcat进行处理
注意:以上三种解决方案,在windows一般采用第一种方式(这种方式,也只能在windows中使用,linux系统中无法使用)
在windows中配置session共享的步骤:
1、修改2个tomcat的conf目录下的server.xml
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
@@@@@解开只代码的注释即可
2、分别启动2个tomcat
3、修改项目代码,在项目中的web.xml文件,配置如下代码:
<distributable/>
-------------------------------------------------------------------------------------------------
在linux系统中配置nginx(整体上与windows配置差不多)
配置步骤:
1、下载linux版的nginx
2、将nginx发布到linux下d91目录中
3、解压缩文件到 usr/local/d91目录
- tar -xvPf nginx-1.8.1.tar.gz -C /usr/local/d91
4、nginx是用c语言编写的,要先安装c语言环境
- yum install gcc-c++
- yum install -y pcre pcre-devel
- yum install -y zlib zlib-devel
- yum install -y openssl openssl-devel
5、进入 /usr/local/d91/nginx-1.8.1 目录,执行下列命令,用于编译nginx
- ./configure ------------编译nginx
6、在/usr/local/d91/nginx-1.8.1 目录,执行命令构建nginx
- make
7、在/usr/local/d91/nginx-1.8.1 目录,执行命令安装nginx
- make install
@@@:如果安装好,在usr/local目录下,会产生一个nginx目录
8、将nginx的80端口在linux防火墙中进行注册
- firewall-cmd --zone=public --add-port=80/tcp --permanent
- firewall-cmd --reload
9、进入 /usr/local/nginx/sbin目录,执行
- ./nginx
- 关闭nginx ./nginx -s stop
- 重启ngigx ./nginx -s reload
=====================================================================================
在linux系统中,配置代理tomcat单机版与windows完全相同
进入 /usr/local/nginx/conf目录下,修改nginx.conf文件即可(步骤与windows的步骤完全相同)
=====================================================================================
在linux系统中,配置代理tomcat集群版与windows步骤相同,只是不能配置session共享
配置nginx代理服务器:
代理单台tomcat服务器
1、启动tomcat
2、修改/usr/local/nginx/conf/nginx.conf文件
- vi nginx.conf
@@@添加如下配置:
location / {
root html;
index index.html index.htm;
proxy_pass http://127.0.0.1:8080;
}
3、重启ningx
方式1:关闭nginx进程,再启动
方法2:进入 /usr/local/nginx/sbin目录,执行命令 ./nginx -s stop 然后再启动
方法3:进入 /usr/local/nginx/sbin目录,执行命令 ./nginx -s reload
--------------------------------------------------------------------------------------
代理服务器集群
1、在usr/local/d91/目录下创建目录 tomcats 用于保存多台tomcat服务器
2、将/d91目录下的tomcat 解压缩到 usr/local/d91/tomcats2中
3、将tomcat名称更名为:tomcat1
4、再复制一份tomcat1,名称为tomcat2
5、更改tomcat2的端口号(5个五位置分别+1)
- 修改的文件是: tomcat2/conf/server.xml
6、分别启动这两台tomcat
- 进入: tomcat1/bin/ 执行 ./startup.sh
- 进入: tomcat2/bin/ 执行 ./startup.sh
即使端口没有在linux防火墙中注册,只要通过nginx代理,依然可以通过nginx正常访问所代理的服务
7、修改 /usr/local/nginx/conf目录下的 nginx.conf文件,配置服务器集群
- 配置与windows的配置一样
8、重启nginx
- 进入 usr/local/nginx/sbin,执行 ./nginx -s reload
9、把项目分别发布到 tomcat,tomcat2
-----------------------------------------------------------
此时,请求会在不同的tomcat进行切换,用于减轻单台服务的压力,但是,每切换一次服务器,就是一个新的session,保存在session会丢失
处理方式1:将数据存放到redis
处理方式2:在nginx中设置ip_hash
此代码的含义是:这个ip地址发的第一个请求是由哪一台服务器处理的,它的所有请求,均由这一台服务器进行处理。如果这台服务器出现故障无法访问,将自动切换到其他服务器
ip_hash的设置步骤:
1、修改/usr/local/nginx/conf目录下的 nginx.conf文件
2、添加如下配置:
- 配置集群信息
upstream d91{
server 127.0.0.1:8080 weight=5;
server 127.0.0.1:8081 weight=5;
ip_hash;
}
- weight=5:权重,它用于指定,集群中,如果有多台服务器,多台服务器处理请求的频率
location / {
root html;
index index.html index.htm;
proxy_pass http://d91;
}
3、重启nginx