文件位置: /usr/local/nginx/conf/nginx.conf
概述:
配置 Nginx 运行的全局参数,影响整个 Nginx 服务器的行为。
user nobody;
运行 Nginx 服务的用户,默认是 nobody
。
worker_processes 1;
设置工作进程数,通常与 CPU 核数相等。设置为 auto
时,Nginx 会自动检测并设定。一般不超8个。
error_log logs/error.log;
错误日志文件的位置。
pid logs/nginx.pid;
指定 Nginx 的 PID 文件存储位置。
worker_rlimit_nofile 65535;
设置每个 worker 进程可以打开的最大文件句柄数(文件描述符数),默认为 1024,建议设置较高值如 65535 以应对高并发场景。在 Nginx 处理网络请求时,每个连接都会消耗一个文件描述符。
例如,每个网络连接(包括客户端连接和与后端服务器的连接)都需要一个文件描述符。除此之外,Nginx 还可能打开其他文件描述符(如日志文件、静态文件等)。
如果没有足够的文件描述符,Nginx 进程将无法处理更多的连接,系统会报错。
管理与网络连接相关的配置,通常包含 IO 模型和连接设置。
events {
use epoll;
### 使用高效的 epoll IO 模型
worker_connections 65535;
### 每个 worker 进程可处理的最大并发连接数
multi_accept on;
### 一次接受尽可能多的连接
accept_mutex on;
### 防止惊群问题,串行处理新连接
}
use epoll;
使用 epoll
IO 模型提升性能,适合高并发场景。2.6及以上版本的系统内核,建议使用epoll模型以提高性能。
worker_connections 65535;
设置每个 worker 子进程能处理的最大连接数(理论数值)。反向代理场景下,一个请求会同时消耗 2 个连接(一个连接到客户端,一个连接到后端服务器),因此 worker_connections
的实际并发处理能力可能会减半。
multi_accept on;
告诉nginx收到一个新连接通知后接受尽可能多的连接,默认为off,关闭时一次接收一条连接。
accept_mutex on;
串行接收新连接,防止资源浪费。
告诉nginx收到一个新连接通知后接受尽可能多的连接,设置为off,关闭时一次接收一条连接。
默认为on,开启时表示以串行方式接入新连接,否则将通报给所有worker。这可能会浪费资源并产生不可预计的后果,例如惊群问题。
注意:最大连接数受操作系统打开文件数(open files)限制。
如提高每个进程的连接数还需执行“ulimit -HSn 65535”命令临时修改本地每个进程可以同时打开的最大文件数。
在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。
epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
worker_processes的值和work_connections的值决定了最大并发数量,最大并发数计算方式为 : worker_processes*worker_connections
。但在反向代理场景中计算方法不同,因为nginx既要维持和客户端的连接,又要维持和后端服务器的连接,因此处理一次连接要占用2个连接,所以最大并发数计算方式为: worker_processes*worker_connections/2
。
查看: ulimit -a
设置: ulimit -HSn 65535
永久设置: vim /etc/security/limits.conf
文件添加” soft nofile 65535“ 和 “hard nofile 65535”
简述:Nginx的最大并发如何设置?
nginx.conf
)worker_processes
:设置工作进程数,通常为与CPU核心数相同,或使用auto
。worker_connections
:每个worker
进程能够处理的最大连接数。worker_rlimit_nofile
:设置每个worker
进程可以打开的最大文件数。ulimit -SHn 65535
:设置指定进程可以打开的最大文件数。
/etc/security/limits.conf
:
* soft nofile 65535
* hard nofile 65535
负责 HTTP 服务相关配置,影响静态文件处理、日志、压缩等内容。
http {
include mime.types;
##文件扩展名与 MIME 类型映射表
default_type application/octet-stream; ##默认文件类型
##日志格式配置
# log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
##访问日志路径
# access_log logs/access.log main;
sendfile on; ##开启高效文件传输模式(启用内核复制模式,大幅提高IO效率)
tcp_nopush on; ##减少 TCP 报文段数量,需 sendfile 支持
tcp_nodelay on; ##防止网络延迟
keepalive_timeout 65; ##连接保持超时时间,单位是秒
gzip on; ##启用 Gzip 压缩
}
include mime.types;
包含 MIME 类型配置文件,确保不同文件格式被正确识别。
sendfile on;
开启高效文件传输,减少 IO 消耗。
tcp_nopush
和 tcp_nodelay
开启,用于防止网络阻塞。必须在sendfile开启模式才有效,防止网路阻塞,积极的减少网络报文段的数量。(将响应头和正文的开始部分一起发送,而不一个接一个的发送)
keepalive_timeout 65;
设置长连接的超时时间。
gzip on;
gzip模块设置,启用 Gzip 压缩,提升传输效率。
配置虚拟主机,负责处理客户端请求。
server {
listen 80; # 监听地址及端口
server_name www.abc.com; # 站点域名
charset utf-8; # 默认字符集
location / { # 网站根目录配置
root html;
# 网站根目录的位置/usr/local/nginx/html
index index.html index.php;
# 默认首页文件名
}
error_page 500 502 503 504 /50x.html;
# 错误页面处理反馈页面
location = /50x.html { # 错误页面配置
root html;
}
}
listen 80;
地址:端口
。server_name www.abc.com;
root html;
error_page 500 502 503 504 /50x.html;
用于匹配 URI,定义如何处理不同的 URL 请求。
location / {
root html;
index index.html index.php;
}
location /
管理后端服务器的地址配置,用于负载均衡(本示例未展示)。
完成以上配置,Nginx 可以更灵活地处理多种并发请求,并实现静态资源的高效处理、压缩和负载均衡等功能。## 主配置文件 nginx.conf 详解
文件位置: /usr/local/nginx/conf/nginx.conf
概述:
配置 Nginx 运行的全局参数,影响整个 Nginx 服务器的行为。
user nobody;
运行 Nginx 服务的用户,默认是 nobody
。
worker_processes 1;
设置工作进程数,通常与 CPU 核数相等。设置为 auto
时,Nginx 会自动检测并设定。一般不超8个。
error_log logs/error.log;
错误日志文件的位置。
pid logs/nginx.pid;
指定 Nginx 的 PID 文件存储位置。
worker_rlimit_nofile 65535;
设置每个 worker 进程可以打开的最大文件句柄数(文件描述符数),默认为 1024,建议设置较高值如 65535 以应对高并发场景。在 Nginx 处理网络请求时,每个连接都会消耗一个文件描述符。
例如,每个网络连接(包括客户端连接和与后端服务器的连接)都需要一个文件描述符。除此之外,Nginx 还可能打开其他文件描述符(如日志文件、静态文件等)。
如果没有足够的文件描述符,Nginx 进程将无法处理更多的连接,系统会报错。
管理与网络连接相关的配置,通常包含 IO 模型和连接设置。
events {
use epoll;
### 使用高效的 epoll IO 模型
worker_connections 65535;
### 每个 worker 进程可处理的最大并发连接数
multi_accept on;
### 一次接受尽可能多的连接
accept_mutex on;
### 防止惊群问题,串行处理新连接
}
use epoll;
使用 epoll
IO 模型提升性能,适合高并发场景。2.6及以上版本的系统内核,建议使用epoll模型以提高性能。
worker_connections 65535;
设置每个 worker 子进程能处理的最大连接数(理论数值)。反向代理场景下,一个请求会同时消耗 2 个连接(一个连接到客户端,一个连接到后端服务器),因此 worker_connections
的实际并发处理能力可能会减半。
multi_accept on;
告诉nginx收到一个新连接通知后接受尽可能多的连接,默认为off,关闭时一次接收一条连接。
accept_mutex on;
串行接收新连接,防止资源浪费。
告诉nginx收到一个新连接通知后接受尽可能多的连接,设置为off,关闭时一次接收一条连接。
默认为on,开启时表示以串行方式接入新连接,否则将通报给所有worker。这可能会浪费资源并产生不可预计的后果,例如惊群问题。
注意:最大连接数受操作系统打开文件数(open files)限制。
如提高每个进程的连接数还需执行“ulimit -HSn 65535”命令临时修改本地每个进程可以同时打开的最大文件数。
在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。
epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
worker_processes的值和work_connections的值决定了最大并发数量,最大并发数计算方式为 : worker_processes*worker_connections
。但在反向代理场景中计算方法不同,因为nginx既要维持和客户端的连接,又要维持和后端服务器的连接,因此处理一次连接要占用2个连接,所以最大并发数计算方式为: worker_processes*worker_connections/2
。
查看: ulimit -a
设置: ulimit -HSn 65535
永久设置: vim /etc/security/limits.conf
文件添加” soft nofile 65535“ 和 “hard nofile 65535”
简述:Nginx的最大并发如何设置?
nginx.conf
)worker_processes
:设置工作进程数,通常为与CPU核心数相同,或使用auto
。worker_connections
:每个worker
进程能够处理的最大连接数。worker_rlimit_nofile
:设置每个worker
进程可以打开的最大文件数。ulimit -SHn 65535
:设置指定进程可以打开的最大文件数。
/etc/security/limits.conf
:
* soft nofile 65535
* hard nofile 65535
负责 HTTP 服务相关配置,影响静态文件处理、日志、压缩等内容。
http {
include mime.types;
##文件扩展名与 MIME 类型映射表
default_type application/octet-stream; ##默认文件类型
##日志格式配置
# log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
##访问日志路径
# access_log logs/access.log main;
sendfile on; ##开启高效文件传输模式(启用内核复制模式,大幅提高IO效率)
tcp_nopush on; ##减少 TCP 报文段数量,需 sendfile 支持
tcp_nodelay on; ##防止网络延迟
keepalive_timeout 65; ##连接保持超时时间,单位是秒
gzip on; ##启用 Gzip 压缩
}
include mime.types;
包含 MIME 类型配置文件,确保不同文件格式被正确识别。
sendfile on;
开启高效文件传输,减少 IO 消耗。
tcp_nopush
和 tcp_nodelay
开启,用于防止网络阻塞。必须在sendfile开启模式才有效,防止网路阻塞,积极的减少网络报文段的数量。(将响应头和正文的开始部分一起发送,而不一个接一个的发送)
keepalive_timeout 65;
设置长连接的超时时间。
gzip on;
gzip模块设置,启用 Gzip 压缩,提升传输效率。
配置虚拟主机,负责处理客户端请求。
server {
listen 80; # 监听地址及端口
server_name www.abc.com; # 站点域名
charset utf-8; # 默认字符集
location / { # 网站根目录配置
root html;
# 网站根目录的位置/usr/local/nginx/html
index index.html index.php;
# 默认首页文件名
}
error_page 500 502 503 504 /50x.html;
# 错误页面处理反馈页面
location = /50x.html { # 错误页面配置
root html;
}
}
listen 80;
地址:端口
。server_name www.abc.com;
root html;
error_page 500 502 503 504 /50x.html;
用于匹配 URI,定义如何处理不同的 URL 请求。
location / {
root html;
index index.html index.php;
}
location /
管理后端服务器的地址配置,用于负载均衡(本示例未展示)。
完成以上配置,Nginx 可以更灵活地处理多种并发请求,并实现静态资源的高效处理、压缩和负载均衡等功能。
注:图片来源于网络,侵删。