什么是nginx?
- 我们可以了解到Nginx是一个http服务器。是一个使用c语言开发的高性能的http服务器及反向代理服务器。Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支撑10万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。
Nginx能干什么?
- http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
- 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
- Nginx 是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性:在连接高并发的情况下,Nginx是Apache服务不错的替代品
为什么使用Nginx?
- 在传统的Web项目中,并发量小,用户使用的少。所以在低并发的情况下,用户可以直接访问tomcat服务器,然后tomcat服务器返回消息给用户。
- 当然我们知道,为了解决并发,可以使用负载均衡:也就是我们多增加几个tomcat服务器。当用户访问的时候,请求可以提交到空闲的tomcat服务器上。
- nginx常用做静态内容服务和代理服务器,直面外来请求转发给后面的应用服务,tomcat更多用来做一个应用容器,让java web app跑在里面的东西,对应同级别的有jboss,jetty等东西。
Nginx优点
- 轻量级,可以高并发连接,在硬件不差的情况下一般能支撑几万次的并发量
- 内存消耗少
- 成本低廉
- 配置文件非常简单
Nginx缺点
- Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些,这个是它的缺点。
Nginx+Tomcat搭建高性能负载均衡集群
- 该网址有详细配置步骤: https://www.cnblogs.com/gcjava/p/6601293.html
Nginx负载均衡配置及策略:
- 轮询(默认)
优点:实现简单
缺点:不考虑每台服务器的处理能力配置示例如下:
upstream www.xxx.com {
# 需要负载的server列表
server www.xxx.com:8080;
server www.xxx.com:9080;
}
- 权重,使用的较多的策略
优点:考虑了每台服务器处理能力的不同,哪台机器性能高就给哪台机器的权重高一些
配置示例如下:
upstream www.xxx.com {
# 需要负载的server列表,weight表示权重,weight默认为1,如果多个配置权重的节点,比较相对值
server www.xxx.com:8080 weight=15;
server www.xxx.com:9080 weight=10;
}
3.ip_hash
优点:能实现同一个用户始终访问同一个服务器
缺点:根据 ip hash 不一定平均
配置示例如下:
upstream www.xxx.com {
ip_hash;
# 需要负载的server列表
server www.xxx.com:8080;
server www.xxx.com:9080;
}
- url hash (第三方插件)不常用
优点:能实现同一个服务访问同一个服务器,也就是根据url进行负载
缺点:和ip hash一样,根据 url hash 分配请求不一定平均,请求频繁的url会请求到同一台服务器上
配置示例如下(需要事先安装插件)
upstream www.xxx.com {
# 需要负载的server列表
server www.xxx.com:8080;
server www.xxx.com:9080;
hash $request_uri;
}
- fair (第三方插件)不常用
特点:按后端服务器的响应时间来分配请求,响应时间短的优先分配
配置示例如下(需要事先安装插件)
upstream www.xxx.com {
# 需要负载的server列表
server www.xxx.com:8080;
server www.xxx.com:9080;
fair;
}
nginx的正向代理和反向代理
-
关于代理:
说到代理,首先我们要明确一个概念,所谓代理就是一个代表、一个渠道;此时就设计到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程;如同生活中的专卖店~客人到adidas专卖店买了一双鞋,这个专卖店就是代理,被代理角色就是adidas厂家,目标角色就是用户
-
正向代理:
客户端不能直接访问某个网站,通过正向代理来实现访问网站。正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。 -
反向代理:
主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息! -
反向代理的作用:
保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网负载均衡,通过反向代理服务器来优化网站的负载
nginx动静分离
-
为什么要实现动静分离?
- 主要是nginx处理静态页面的效率远高于tomcat的处理能力,nginx的处理静态资源能力超强,如果tomcat的请求量为1000次,则nginx的请求量为6000次,tomcat每秒的吞吐量为0.6M,nginx的每秒吞吐量为3.6M,可以说,nginx处理静态资源的能力是tomcat处理能力的6倍,优势可见一斑。
- 动态资源和静态资源分开,使服务器结构更清晰。
-
动静分离原理
- 服务端接收来自客户端的请求中,有一部分是静态资源的请求,例如html,css,js和图片资源等等,有一部分是动态数据的请求。因为tomcat处理静态资源的速度比较慢,所以我们可以考虑把所有静态资源独立开来,交给处理静态资源更快的服务器例如nginx处理,而把动态请求交给tomcat处理。
nginx.conf文件完整代码
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;#单个进程最大连接数(最大连接数=连接数*进程数)
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;#启用Gizp压缩
#服务器的集群
upstream netitcast.com { #服务器集群名字
server 127.0.0.1:18080 weight=1;#服务器配置 weight是权重的意思,权重越大,分配的概率越大。
server 127.0.0.1:28080 weight=1;
}
server {
listen 81;
server_name localhost;
#配置静态资源交给nginx处理,这里先只配置js和jpg
location ~ .*\.(js|jpg|html|css) {
root /feiqiu/1810TEST/nginx+tomcat/nginx-1.16.0/img; #静态文件目录
expires 30d; #缓存天数
}
#配置除静态资源以外的交给tomcat处理
location / {
proxy_pass http://netitcast.com;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}