Nginx简介
Nginx是一种高性能的
Http服务器
和反向代理Web服务器
,其优势是占用内存小
、支持高并发
等。
正向代理与反向代理
正向代理
:当客户端访问无法直接访问的资源时(如:谷歌),需要架设一个代理服务器,用于将请求转发至目标服务器;对于用户来说访问的还是目标资源的地址,但是真正的访问请求是由代理服务器转发至目标服务器的,因此目标服务器接收到的请求都来自代理服务器,起到了屏蔽客户端
的作用。则该代理服务器起到的作用就是正向代理。如:为访问google所设置的VPN
、公司内网环境下访问外网资源时设置的代理服务器
等都属于正向代理。
反向代理
:反向代理服务器与目标服务器作为一个整体对外提供服务
,访问目标服务器资源时所请求的地址并非目标服务器的真实地址;当用户请求到达请求地址所在服务器(即反向代理服务器
)时,该服务器按照预设的规则将请求转发至指定的资源服务器获取响应。对于资源服务器来说,请求都来自代理服务器而并非用户,因此称为反向代理服务器
;而对于用户来说反向代理服务器隐藏了真正的资源服务器地址,起到了屏蔽服务端
的作用。
Nginx配置文件结构
全局块:影响Nginx服务运行的配置指令
worker_processes 1; # Nginx处理并发量
events块:影响Nginx与用户网络的连接
events {
# 事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];
use epoll;
# 单进程最大连接数
worker_connections 1024;
}
Http块(Http全局块 + Server块):服务器配置
Nginx常用命令
需进入Nginx安装目录下的sbin目录中执行以下操作:
./nginx -v:查看版本
./nginx -s stop:关闭服务器;
./nginx:启动服务;
./nginx -s reload:重加载
负载均衡
通过反向代理服务器将多个请求按照一定的规则转发至服务器集群中的不同服务器上,该过程称为负载均衡。
(1) 反向代理配置:
http {
server {
# nginx服务器绑定地址
listen 80;
server_name 本机域名;
# 反向代理地址
location / {
proxy_pass 代理地址[如:http://192.168.10.89:8080];
}
# 根据不同的访问路径跳转至不同的服务地址
# location ~ /a/ {
# proxy_pass http://192.168.10.89:8080;
# }
# location ~ /b/ {
# proxy_pass http://192.168.10.89:8081;
# }
}
}
(2) 负载均衡配置:
http {
# 负载均衡服务器列表
upstream 服务名称[如:myserver] {
ip_hash[负载均衡策略:轮询(默认)、加权轮询(weight=n)、ip_hash、fair(按照服务器响应时间)、]
server 192.168.1.1;
server 192.168.1.2;
}
server {
# nginx服务器绑定地址
listen 80;
server_name 本机域名;
# 反向代理地址
location / {
proxy_pass http://myserver;
}
}
}
动静分离
为提高网站解析效率,将网站内的静态资源与动态资源分配至不同的服务器进行解析以加快服务器响应速度。利用Nginx处理静态资源请求,如:Html、js、css等。
http {
server {
listen 80;
server_name localhost;
# 请求路径 /image/ 对应的请求直接指向本地磁盘 /images 路径下的资源
location /image/ {
root /images/;
}
# 请求路径 /js/ 对应的请求直接指向本地磁盘 /js 路径下的资源
location /js/ {
root /js/;
# autoindex设置是打开显示文件夹中的所有内容
autoindex on;
}
}
}
Nginx高可用
通过
Keepalived
软件,定时执行脚本判断Nginx服务是否可用;在Nginx主服务器不可用时自动切换至从服务器对外提供服务实现Nginx的高可用。
Nginx实现原理
Nginx启动后包含有个进程:
Master
:管理者进程,用于接收请求信号分配至Worker;一个Master对应多个Worker(Woker个数取决于 nginx.conf 文件中worker_processes的配置
);Worker
:工作进程,当Master接收到来自客户端的请求,对应的所有Worker采用争抢
机制获取执行请求的资格,然后实际执行请求处理。
Nginx、redis等软件都采取
IO多路复用机制
,每个工作进程都是独立进程,但每个进程只有一个主线程,通过异步非阻塞的方式来处理请求。通常worker设置与cpu核数相同最为合适,因为设置少了浪费cpu资源,设置多了频繁的cpu切换带来性能损耗。
一个worker通常占用
2个或4个
连接数:两个与客户端的连接以及可能存在的两个与动态资源服务器的连接;
Nginx支持最大并发数:
- 作为静态资源服务器时:
(worker_connections * worker_processes) / 2
- 作为反向代理服务器时:
(worker_connections * worker_processes) / 4