前言
- 未来会围绕nginx系列写几篇文章。包含自己理解的,用到的,学到的,希望和大家一起互相激励,发现、解决问题,共同进步。
目录
- nginx简介
- nginx特点和应用场景
- nginx配置结构
nginx简介
(engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。
国内分支Tengine
nginx特点和应用场景
特点
- 内存消耗低
在一般的情况下,10000个非活跃的HTTP Keep-Alive 连接在Nginx中仅消耗2.5M的内存,这也是Nginx支持高并发连接的基础。- 高并发
官方测试nginx能够支撑5万并发连接,实际生产环境中可以支撑2~4万并发连接数。主要是因为nginx使用了最新的epoll(Linux2.6内核)kqueue(freeBSD)网路I/O模型。- 热部署
nginx采用master管理进程与worker工作进程的分离设计,使得nginx具有热部署的功能,那么在7×24小时不间断服务的前提下,升级nginx的可执行文件。也可以在不停止服务的情况下修改配置文件,更换日志文件等功能。- 其他
配置文件简单,稳定性高,成本低廉,节省带宽(gzip压缩),开源社区活跃等等。应用场景
- 反向代理
反向代理应该是Nginx做的最多的一件事了,反向代理方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。
反向代理- 负载均衡
当有2台或以上服务器时,可以根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。 而 Nginx 目前支持自带3种负载均衡策略,还有2种常用的第三方策略。
- RR(默认方式)
每个请求按时间顺序被分配到不同的后端服务器,如果后端服务器挂掉,能自动过滤。- 权重(自带)
可以指定后端服务被访问到的几率。- ip_hash(自带)
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器。- fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。- url_hash(第三方)
按访问url的hash结果来分配请求,使url定向到同一个后端服务器。
- HTTP服务器
nginx也是一个静态资源的服务器,当只有静态资源的时候,就可以使用 Nginx 来做服务器。当然动静分离,也可以通过 nginx 来实现。
nginx配置结构
- 总体结构预览(后面会在详细介绍)
##
# 全局配置
##
user nobody; ## 配置 worker 进程的用户和组
worker_processes auto; ## 配置 worker 进程启动的数量,建议配置为 CPU 核心数
error_log logs/error.log; ## 全局错误日志
pid /run/nginx.pid; ## 设置记录主进程 ID 的文件
worker_rlimit_nofile 8192; ## 配置一个工作进程能够接受并发连接的最大数
##
# 工作模式及连接数上限
##
events {
# epoll 是多路复用 IO(I/O Multiplexing)中的一种方式,
# 仅用于 Linux 2.6 以上内核,可以大大提高 Nginx 性能
use epoll
worker_connections 4096; ## Defaule: 1024,单个后台 worker process 进程的最大并发链接数
# 并发总数 max_clients = worker_professes * worker_connections
# multi_accept on; ## 指明 worker 进程立刻接受新的连接
}
##
# http 模块
##
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65; ## 连接超时时间
types_hash_max_size 2048; ## 指定散列类型表的最大大小
# server_tokens off;
# server_names_hash_bucket_size 64; # this seems to be required for some vhosts
# server_name_in_redirect off;
include /etc/nginx/mime.types; ## 设定 mine 类型
default_type application/octet-stream;
# 设定请求缓冲
client_header_buffer_size 128k; # 指定客户端请求头缓存大小,当请求头大于 1KB 时会用到该项
large_client_header_buffers 4 128k; # 最大数量和最大客户端请求头的大小
##
# SSL Settings
##
# 启用所有协议,禁用已废弃的不安全的SSL 2 和SSL 3
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
# 让服务器选择要使用的算法套件
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log; ## 访问日志
error_log /var/log/nginx/error.log; ## 错误日志
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
}
- nginx config配置详解(后面会在详细介绍)
从上面nginx的总体结预览中可以看出nginx config的总体配置大致
分为5个部分
- 全局配置(user、worker_processes、error_log、pid)
user nobody
定义运行nginx服务的用户。如 user nobody nobody
worker_processes
定义nginx子进程数量(提供服务的进程数量),建议和服务cpu核数保持一致。除了可以定义数字外,还可以定义为auto,表示让系统自动调整。如:worker_processes 2 或 worker_processes auto
error_log
定义错误日志的路径,可以是相对路径(相对prefix路径的),也可以是绝对路径。也可以定义到http、server、location里,
如:error_log logs/error.log;
error_log 日志级别
定义错误日志级别,常见的错误日志级别有(低到高顺序):
级别越高记录的信息越少。如果不定义默认是error
如:error_log logs/error.log notice
nginx pid 路径
定义nginx进程pid文件所在路径,可以是相对路径,也可以是绝对路径。如:pid logs/nginx.pid
worker_rlimit_nofile
定义nginx最多打开文件数限制。如果没设置的话,这个值为操作系统(ulimit -n)的限制保持一致。把这个值设高,nginx就不会有“too many open files”问题。如:worker_rlimit_nofile 100000- events(网络连接相关,worker_connections)
worker_connections 1024
定义每个work_process同时开启的最大连接数,即允许最多只能有这么多连接
accept_mutex on
当某一个时刻只有一个网络连接请求服务器时,服务器上有多个睡眠的进程会被同时叫醒,这样会损耗一定的服务器性能。Nginx中的accept_mutex设置为on,将会对多个Nginx进程(worker processer)接收连接时进行序列化,防止多个进程争抢资源。默认就是on
multi_accept on
nginx worker processer可以做到同时接收多个新到达的网络连接,前提是把该参数设置为on。默认为off,即每个worker process一次只能接收一个新到达的网络连接。
use epoll
Nginx服务器提供了多个事件驱动器模型来处理网络消息。
其支持的类型有:select、poll、kqueue、epoll、rtsing、/dev/poll以及eventport。
- select:只能在Windows下使用,这个事件模型不建议在高负载的系统使用
- poll:Nginx默认首选,但不是在所有系统下都可用
- kqueue:这种方式在FreeBSD 4.1+, OpenBSD2.9+, NetBSD 2.0, 和 MacOS X系统中是最高效的
- epoll: 这种方式是在Linux 2.6+内核中最高效的方式
- rtsig:实时信号,可用在Linux 2.2.19的内核中,但不适用在高流量的系统中
- /dev/poll: Solaris 7 11/99+,HP/UX 11.22+, IRIX 6.5.15+, and Tru64 UNIX 5.1A+操作系统最高效的方式
- eventport: Solaris 10最高效的方式
- http(最重要的部分,大部分功能都放这里)
下一章 nginx(二)中继续介绍- server(虚拟主机相关)
下一章 nginx(二)中继续介绍- location(server里面)
下一章 nginx(二)中继续介绍
https://www.cnblogs.com/yudis/articles/6676636.html
https://blog.csdn.net/propro1314/article/details/46924687