NGINX简单总结
特点总结
nginx有一个master进程和多个worker进程,master进程是主要用来管理worker进程,管理的内容包括以下内容:接收来自外界的信号,向各个woker进程发送信号,监控worker进程的运行状态,当worker进程退出后,会自动重新启动新的worker进程。
每个worker进程是相对独立平等的,相互竞争处理一个请求,并且从始至终的处理这个请求,不会出现处理其他进程的请求;
选择NGINX的理由
底层由epoll(异步阻塞的方式)来实现,可以实现高并发;
内存消耗少,1w个非活跃的HTTP Keep-Alive连接在Nginx中仅消耗2.5MB的内存;
成本低廉,BSD协议开源免费;
配置文件简单易懂;
支持rewrite重写规则;能根据域名、URL的不同,将HTTP请求分发到不同的后端服务器群组中;
内置的健康检查功能;即使Nginx proxy后端的某台web服务器宕机了,也不会影响前端访问;
稳定性高;
支持热部署;可以长时间的运行,并且可以在不间断服务的情况下,对软件版本进行升级;
设计极具扩展性;它完全是由多个不同功能、不同层次、不同类型且耦合度极低的模块组成;
配置结构
nginx.conf的配置结构包括main全局块、events块、http块、server块、location块;不同模块的执行关系:server继承main,location继承server,upstream既不会继承指令也不会被继承,它有它自己的特殊指令;
指令上下文 | 解释 |
---|---|
main | 与具体业务功能无关的一些参数;比如工作进程数等; |
http | 与提供http服务相关的一些配置参数; |
server | http服务器上支持若干个虚拟主机, 每个虚拟主机对应一个server配置项,配置项中包含该虚拟主机相关的配置; |
location | http服务中,某些特定的URL对应的一系列配置项; |
实现email相关的SMTP/IMAP/POP3代理时,共享的一些配置项; | |
nginx.conf
# 定义Nginx运行的用户和用户组,默认是nobody
user nobody;
# 允许生成的进程数,建议设置为等于CPU总核心数
worker_processes 2;
# 指定错误日志路径,级别;这个设置可以放入全局块,http块,server块,级别依次为:debug|info|notice|warn|error|crit|alert|emerg
error_log logs/error.log info;
# 工作模式以及连接数上线
events {
use epoll; # 时间驱动模型,包括select, poll, epoll, kqueue等
worker_connections 1024; # 单个work进程允许的最大连接数目
}
# http服务器
http {
#gzip模块设置
gzip on; #开启gzip压缩输出
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区
gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 2; #压缩等级
gzip_types text/plain application/x-javascript text/css application/xml;
#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用
# 子配置放到/usr/local/nginx/conf/servers/*/目录下
include /usr/local/nginx/conf/servers/\*/upstream.conf;
include /usr/local/nginx/conf/servers/\*/site.conf;
}
site.conf
# 虚拟主机的配置
# http接口
server {
listen 80 default_server;
client_max_body_size 20m; # 最大上传包
server_name www.linuxidc.com;
access_log logs/linuxidc.access.log main;
# 子配置放到/usr/local/nginx/conf/servers/test/locations/目录下
include /usr/local/nginx/conf/servers/test/locations/\*.location;
}
# https接口
# 1. https的固定端口是443,不同于HTTP的80接口
# 2. SSL标准需要引入安全证书,所以在 conf 中你需要指定证书和它对应的 key
server {
listen 443 ssl http2 default_server;
root /usr/local/nginx/conf/servers/test/nginx_www/; # 指定证书的位置
include /usr/local/nginx/conf/servers/common/ssl_config.conf;
include /usr/local/nginx/conf/servers/test/https/ssl_rewrite.location;
include /usr/local/nginx/conf/servers/test/locations/\*.location;
}
upstream.conf
# 设定实际的服务器列表,几种负载均衡的方式
upstream mysvr1 {
server 127.0.0.1:7878;
# 热备(其它所有的非backup机器down或者忙的时候,请求backup机器))
server 192.168.10.121:3333 backup;
}
upstream mysvr2 {
# weigth参数表示权值,权值越高被分配到的几率越大
server 192.168.1.11:80 weight=5;
server 192.168.1.12:80 weight=1;
server 192.168.1.13:80 weight=6;
send_timeout 90;
proxy_connect_timeout 50;
proxy_send_timeout 90;
proxy_read_timeout 90;
}
upstream https-svr {
# 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
ip_hash;
server 192.168.1.11:90;
server 192.168.1.12:90;
}
project.location
# 反向代理的路径,和upstream绑定,location后面绑定映射的路径
location /app1 {
include uwsgi_params;
uwsgi_pass mysvr1;
}
location /passport {
include uwsgi_params;
uwsgi_pass https-svr;
}