需求场景
1、需要负载均衡指定几个服务,如果有服务出现预期错误,就会更换另外一个服务接口
2、合理优化一些细节日志输入和性能
Nginx 配置文件(带注释)
#user nobody; # 以nobody用户运行Nginx进程
worker_processes 4; # 设置Nginx的工作进程数量为4,根据服务器的CPU核心数量调整。
error_log logs/error.log error; # 指定错误日志文件路径和记录级别为error
#error_log logs/error.log notice; # 可选,记录notice级别的日志
#error_log logs/error.log info; # 可选,记录info级别的日志
pid logs/nginx.pid; # 指定存储Nginx进程ID的文件路径
events {
worker_connections 1024; # 每个工作进程允许的最大连接数
}
http {
include mime.types; # 包含MIME类型定义文件
default_type application/octet-stream; # 设置默认的MIME类型
log_format upstreamlog '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$upstream_addr" "$upstream_response_time" "$upstream_status"';
# 定义日志格式,记录上游服务器信息
access_log logs/access.log upstreamlog; # 指定访问日志文件路径和日志格式
sendfile on; # 启用sendfile,提高文件传输效率
tcp_nopush on; # 优化TCP包的发送,减少网络包数量(与sendfile结合使用效果最佳)
tcp_nodelay on; # 禁用Nagle算法,防止网络包延迟发送
keepalive_timeout 65; # 设置keep-alive超时时间为65秒
gzip on; # 启用gzip压缩
gzip_disable "msie6"; # 禁用IE6的gzip压缩
gzip_vary on; # 启用Vary: Accept-Encoding头
gzip_proxied any; # 启用代理请求的gzip压缩
gzip_comp_level 6; # 设置gzip压缩级别,范围1-9,数字越大压缩率越高但CPU消耗越大
gzip_buffers 16 8k; # 设置系统获取用于存储gzip压缩结果数据流的内存单位
gzip_http_version 1.1; # 启用gzip压缩的HTTP协议版本
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # 设置需要压缩的MIME类型
upstream OCR {
server xxx.xx.158.247:5594; # 定义上游服务器的IP地址和端口
server xxx.xx.158.247:5595; # 定义上游服务器的IP地址和端口
server xxx.xx.158.247:5596; # 定义上游服务器的IP地址和端口
server xxx.xx.158.247:55971; # 定义上游服务器的IP地址和端口
}
server {
listen 80; # 监听80端口
server_name localhost; # 定义服务器名称
location / {
proxy_pass http://OCR; # 将请求转发到上游服务器集群OCR
proxy_set_header Host $host; # 设置Host头
proxy_set_header X-Real-IP $remote_addr; # 设置X-Real-IP头
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置X-Forwarded-For头
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404; # 定义当上游服务器返回特定错误时,将请求转发到下一个上游服务器
proxy_connect_timeout 10s; # 设置代理连接超时时间为10秒
proxy_read_timeout 60s; # 设置代理读取超时时间为60秒
proxy_send_timeout 60s; # 设置代理发送超时时间为60秒
}
error_page 500 502 503 504 /50x.html; # 自定义错误页面
location = /50x.html {
root html; # 设置错误页面的根目录
}
}
}
详细说明文档
1. 基本设置
user nobody;
:指定Nginx进程的运行用户为nobody。worker_processes 1;
:设置工作进程数为1。
2. 日志设置
error_log logs/error.log error;
:指定错误日志文件路径和记录级别为error。#error_log logs/error.log notice;
:可选,记录notice级别的日志。#error_log logs/error.log info;
:可选,记录info级别的日志。pid logs/nginx.pid;
:指定存储Nginx进程ID的文件路径。
3. 事件模块
worker_connections 1024;
:每个工作进程允许的最大连接数。
4. HTTP 核心模块
include mime.types;
:包含MIME类型定义文件。default_type application/octet-stream;
:设置默认的MIME类型。
5. 日志格式
log_format upstreamlog ...
:定义日志格式,记录上游服务器信息。access_log logs/access.log upstreamlog;
:指定访问日志文件路径和日志格式。
6. 文件传输与TCP优化
sendfile on;
:启用sendfile,提高文件传输效率。tcp_nopush on;
:优化TCP包的发送,减少网络包数量(与sendfile结合使用效果最佳)。tcp_nodelay on;
:禁用Nagle算法,防止网络包延迟发送。
7. 连接保持
keepalive_timeout 65;
:设置keep-alive超时时间为65秒。
8. gzip 压缩
gzip on;
:启用gzip压缩。gzip_disable "msie6";
:禁用IE6的gzip压缩。gzip_vary on;
:启用Vary: Accept-Encoding头。gzip_proxied any;
:启用代理请求的gzip压缩。gzip_comp_level 6;
:设置gzip压缩级别,范围1-9,数字越大压缩率越高但CPU消耗越大。gzip_buffers 16 8k;
:设置系统获取用于存储gzip压缩结果数据流的内存单位。gzip_http_version 1.1;
:启用gzip压缩的HTTP协议版本。gzip_types ...
:设置需要压缩的MIME类型。
9. 上游服务器
upstream OCR {...}
:定义上游服务器集群OCR,包括多个IP地址和端口。
10. 服务器块
listen 80;
:监听80端口。server_name localhost;
:定义服务器名称。location / {...}
:配置根路径的代理设置,将请求转发到上游服务器集群OCR,并设置相关头信息和超时。error_page 500 502 503 504 /50x.html;
:自定义错误页面。location = /50x.html {...}
:设置错误页面的根目录。
调整 worker_processes
和 worker_connections
可以显著提升Nginx的性能和处理能力。以下是调整这两个参数的指南:
worker_processes
- 定义:这个参数定义了Nginx创建的工作进程数量。
- 最佳实践:通常设置为等于服务器的CPU核心数量,以便充分利用多核CPU的性能。
worker_connections
- 定义:这个参数定义了每个工作进程可以同时处理的最大连接数。
- 最佳实践:应该根据服务器的硬件资源和预期的流量来设置。如果设置得过低,会限制Nginx的并发处理能力。
具体调整步骤
-
确定CPU核心数量:
- 在Linux系统中,可以使用以下命令查看CPU核心数量:
nproc
- 或者:
lscpu | grep '^CPU(s):'
- 在Linux系统中,可以使用以下命令查看CPU核心数量:
-
根据核心数量调整
worker_processes
:- 如果服务器有4个CPU核心,
worker_processes
应设置为4。
- 如果服务器有4个CPU核心,
-
根据内存和预期流量调整
worker_connections
:- 例如,假设每个连接占用1KB的内存,服务器有8GB的可用内存,可以设置
worker_connections
为8192。 - 此外,可以通过
ulimit -n
命令检查文件描述符限制,如果需要可以增加。
- 例如,假设每个连接占用1KB的内存,服务器有8GB的可用内存,可以设置
详细说明文档更新
1. worker_processes
worker_processes 4;
:设置Nginx的工作进程数量为4,根据服务器的CPU核心数量调整。
2. worker_connections
worker_connections 8192;
:设置每个工作进程可以同时处理的最大连接数为8192,根据服务器内存和预期流量调整。