Nginx
概念介绍
Nginx 是一个十分轻量级的 HTTP 服务器,Nginx,是一个高性能的HTTP和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。
正向代理与反向代理
正向代理类似一个跳板机,代理访问外部资源
比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了。
正向代理的用途:
- 访问原来无法访问的资源,如google
- 可以做缓存,加速访问资源
- 对客户端访问授权,上网进行认证
- 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
反向代理的作用:
保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网
负载均衡,通过反向代理服务器来优化网站的负载
负载均衡和动静分离
将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
Nginx负载均衡策略:
轮询 | 默认方式 |
---|---|
weight | 权重方式 |
ip_hash | 依据ip分配方式 |
least_conn | 最少连接方式 |
fair(第三方) | 响应时间方式 |
url_hash(第三方) | 依据URL分配方式 |
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
Nginx安装
常用命令
启动:./nginx
查看版本号:nginx -v
关闭:nginx -s stop
重加载:nginx -s reload
配置文件
Nginx的主配置文件是nginx.conf,这个配置文件一共由三部分组成,分别为全局块、events块和http块。在http块中,又包含http全局块、多个server块。每个server块中,可以包含server全局块和多个location块。在同一配置块中嵌套的配置块,各个之间不存在次序关系。
- worker_processes,工作进程,用于指定Nginx的工作进程数量。其数值一般设置为cpu内核数量,或内核数量的整数倍。该值不仅仅取决于cpu内核数量,还与硬盘数量及负载均衡模式相关,在不确定时还可以指定其值为auto
- worker_connections:用来配置单个worker进程最大的连接数
#全局块
#user nobody;
worker_processes auto;
#event块
events {
worker_connections 1024;
}
#http块
http {
#http全局块
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#server块
server {
#server全局块
listen 8000; #监听端口
server_name localhost; #监听地址
#location块
location ~*^.+$ { ##请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#这边可以有多个server块
server {
...
}
}
反向代理配置
http {
#http全局块
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#server块
# 实现浏览器输入192.168.31.83:8001后跳转到tomcat的8080端口
server {
#server全局块
listen 8001;
server_name 192.168.31.83;
#location块
location / {
root html;
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# 使用nginx反向代理,根据访问的路径跳转到不同的tomcat端口中去
# 192.168.31.83:8001/edu 192.168.31.83:8001/icu
server {
#server全局块
listen 8001;
server_name 192.168.31.83;
#location块
location ~ /edu/ {
proxy_pass http://127.0.0.1:8002;
}
location ~ /icu/ {
proxy_pass http://127.0.0.1:8003;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
负载均衡配置
http {
# http全局块
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 设定负载均衡后台服务器列表
upstream myserver {
ip_hash;
server 192.168.31.83:8002;
server 192.168.31.83:8003;
}
# server块
# 实现浏览器输入192.168.31.83:8001,负载均衡效果,平均到8002和8003的tomcat服务器中
server {
#server全局块
listen 8001;
server_name 192.168.31.83;
#location块
location / {
proxy_pass http://myserver;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
nginx的原理
Nginx 采用的是多进程(单线程) & 多路IO复用模型,使用了 I/O 多路复用技术的 Nginx,就成了”并发事件驱动“的服务器,同时使用sendfile等技术,最终实现了高性能。主要从以下几个方面讲述Nginx高性能机制:
- Nginx master-worker进程机制。
- IO多路复用机制。
- Accept锁及REUSEPORT机制。
- sendfile零拷贝机制