Nginx
一:Nginx的定义(什么是Nginx)
Nginx是一个免费开源的高性能的HTTP服务器以及反向代理服务器(Reverse Proxy),可以提供POP3/IMAP/SMATP代理服务,可以快速的响应静态页面。
二:Nginx的优点
- 高并发,高性能(2-4万,理论数字是5万)
- 轻量级,内存消耗较少
- 稳定性高,宕机概率较低
- 支持热部署
- cpu亲和
三:Nginx使用场景(Nginx的使用场合比较多,我们学习主要是面向JavaWeb在服务器上的部署)
- 静态资源服务器
- 动态匹配
- 反向代理
- 负载均衡
四:Nginx的安装部署
liunx系统的配置
准备(依赖环境)
apt-get install build-essential
apt-get install libtool
apt-get update
apt-get install libpcre3 libpcre3-dev
apt-get install zlib1g-dev
apt-get install openssl
下载
wget http://nginx.org/download/nginx-1.17.0.tar.gz
解压
tar -zxvf nginx-1.17.0.tar.gz
配置
cd nginx-1.17.0(进入nginx目录,此处建议重命名,转移到一个合适的位置)
./configure --prefix=/usr/local/nginx
编译
//编译
make
//安装
make install
运行
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
//如果想要弄个直接的命令,就写个软链接
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
//开启之后,外部访问这个服务器的IP,就可以看到Nginx的代理页面
关闭
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx -s quit
pkill -9 nginx(也可以,直接杀掉进程)
- 重新加载配置
/usr/local/nginx/sbin/nginx -s reload
- 补充
如果你启动nginx之后,想看看端口占用情况
netstat -nlt | grep 80
window系统的 nginx 开启,重启,关闭
开启 start nginx
关闭 nginx -s stop
重启 nginx -s reload
反向代理
然后修改nginx.conf,主要是30-42行
location / {
proxy_pass http://127.0.0.1:8111;
}
#location / 表示处理所有请求
#proxy_pass http://127.0.0.1:8111; 表示把请求都交给http://127.0.0.1:8111来处理
意义何在
既然直接通过127.0.0.1:8111/login.jsp 可以访问,那么干嘛要通过127.0.0.1/login.jsp 去反向代理到tomcat呢? 为什么不直接使用tomcat呢?
因为nginx在处理静态文件的吞吐量上面比tomcat好很多,通常他们俩配合,不会把所有的请求都如本例所示的交给tomcat, 而是把静态请求交给nginx,动态请求,如jsp, servlet,ssm, struts等请求交给tomcat. 从而达到动静分离的效果。 接下来就会讲解如何进行动静分离。
动静分离
在locaction下面添加一个新的location:
location ~\.(css|js|png)$ {
root C:/Users/X7TI/Downloads/tomcat_8111/webapps/ROOT;
}
这表示所有的.css 、.js和 .png访问都由nginx来做,访问的地址是
C:/Users/X7TI/Downloads/tomcat_8111/webapps/ROOT
注:这里要注意,填写本地地址的时候,要用正斜杠 / 不要用反斜杠 \
负载均衡
概念
负载均衡的概念就是当访问量很大的时候,一个 Tomcat 吃不消了,这时候就准备多个 Tomcat,由Nginx按照权重来对请求进行分配,从而缓解单独一个Tomcat受到的压力
均衡策略
轮询:默认的不用再加东西,不是随机,一个挨着一个
热备:有主要处理的机器,还有备胎
权重:在不同机器的处理能力不同的时候
修改nginx.conf
1.首先增加一个upstream ,用来指向ip(服务,项目)
2.upstream里面有多个值,就可以出现负载均衡效果。
3.然后修改location,反向代理到上述配置
#首先增加一个upstream ,用来指向这两个tomcat
#轮询
upstream tomcat_8111_8222{
server 127.0.0.1:8111 ;
server 127.0.0.1:8222 ;
}
#然后修改location,反向代理到上述配置。
location / {
proxy_pass http://tomcat_8111_8222;
}
其他策略怎么写
#权重
#weight表示权重,值越大,被分配到的几率越大
upstream tomcat_8111_8222_qunzhong{
server 127.0.0.1:8111 weight=1;
server 127.0.0.1:8222 weight=2;
}
#热备
upstream tomcat_8111_8222_renbei{
server 127.0.0.1:8111 backup;
server 127.0.0.1:8222 weight=2;
}
问题:负载均衡 session问题
解决办法一: ip_hash
通过ip地址标记用户,如果多次请求都是从同一个ip来的,那么就都分配到同一个tomcat.
这样就不会出现负载均衡 session问题了. 处理手段也很简单,如图所示在upstream最后加上ip_hash;就行了。
例:
upstream tomcat_8111_8222{
server 127.0.0.1:8111 weight=1;
server 127.0.0.1:8222 weight=2;
ip_hash;
}
不过这种方案并不完美,当如下几种情况发生时就有问题:
1. 大量请求来之某个局域网,那么相当于就没有负载均衡了
2. 如果tomcat_8111 挂了,那么此时nginx只能把请求交给tomcat_8222,但是这里却没有记录session,用户体验依然受影响。
解决办法二: redis+tomcat-sessoin-manager