1、nginx.conf 结构详解:
http 块:用于配置 HTTP 服务器的相关设置,包括处理 HTTP 和 HTTPS。
stream 块:用于配置 TCP/UDP 代理服务器,适用于需要进行四层负载均衡的情况。
Kotlin
... # 全局块
events {...} # events块
http { # http块
... # http全局块
server { # server块
... # server全局块
location [PATTERN] {...} # location块
location [PATTERN] {...} # location块
}
server { ... } # server块
}
stream { # stream块
server { ... } # server块
}
2、详细nginx.conf详解:
1、全局块:
XML
#定义 用户和用户组,默认为 nobody,若配置为 user nobody nobody, 则所有用户都能启动 nginx 进程
user myUsr myGroup;
# 工作进程数可设置为CPU的核心数
worker_processes 1;
# 进程文件路径
pid /user/local/nginx/nginx.pid;
# 日志路径和日志级别,日志级别有:debug|info|notice|warn|error|crit|alert|emerg;
error_log logs/error.log debug;
2、events 块:
events {
# 设置网路连接序列化是为了防止惊群现象发生,默认为 on;
accept_mutex on;
# 是否同时接受多个网络连接指令默认值为 off;
multi_accept on;
# 事件驱动模型的可选项有:select|poll|kqueue|epoll|resig|/dev/poll|eventport;
use epoll;
# 最大连接数
worker_connections 1024;
}
3、http 全局块:
子模块相同配置,可统一配置在 http全局 中。
http {
# 文件扩展名与文件类型映射表在 nginx/conf 下
include mime.types;
# 默认文件类型的默认值为 text/plain;
default_type application/octet-stream;
# 是否开启服务日志的默认值为 on,开启了之后需要配置 access_log 路径;
access_log off;
# 自定义服务日志格式
log_format myLogFormat '$remote_addr--$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for';
# 设置日志的格式
access_log log/access.log myLogFormat;
# sendfile 指令指定 nginx 是否调用 sendfile 函数来输出文件,减少用户空间到内核空间的上下文切换;对于普通应用设为 on,如果用来进行下载等应用磁盘 IO 重负载应用,可设置为 off,以平衡磁盘与网络 I/O 处理速度,降低系统的负载;
sendfile on;
# 每个进程每次最大传输值,指令的默认为 0,表示不设上限;
sendfile_max_chunk 100k;
# 长连接超时时间,单位是秒,这个参数很敏感,涉及浏览器的种类、后端服务器的超时设置、操作系统的设置;长连接在请求大量小文件的时候,可以减少重建连接的开销;但如果上传大文件时在设置的超时时间内没上传完成会导致失败,如果设置时间过长,用户又多,长时间保持连接会占用大量资源;
keeplive_timeout 100;
# 响应客户端的超时时间,仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接;
send_timeout 75;
# 客户端请求头的区缓冲区大小,为避免请求 header 过大出现 400 错误,可以适当设置大一点;
client_header_buffer_size 32k;
# 客户端请求头的最大缓冲区数量和大小,为避免请求 header 过大出现 400 错误,可以适当设置大一点;
large_client_header_buffers 8 32k;
# 允许客户端请求的最大字节数,为避免请求 header 过大出现 400 错误,可以适当设置大一点;
client_max_body_size 10m;
# 客户端请求体的缓冲区大小,为避免请求 header 过大出现 400 错误,可以适当设置大一点;
client_body_buffer_size 128k;
# 配置 https_proxy 反向代理,配置如下:
# 表示 Nginx 跟代理服务器连接超时时间
proxy_connect_timeout 75;
# 表示 Nginx 与代理服务器两个成功的响应操作之间超时时间;
proxy_read_timeout 75;
# 表示 Nginx 传输文件至代理服务器的超时时间;
proxy_send_timeout 100;
# 用于设置从代理服务器读取并保存用户头信息的缓冲区大小;
proxy_buffer_size 4k;
# 设置代理缓冲区大小,Nginx 针对单个连接,缓存来自代理服务器的响应,网页平均在32k以下的话,可以设置为 4 32K ;
proxy_buffers 4 32k;
# 设置高负荷下的缓冲大小,一般为 proxy_buffers 的两倍;
proxy_busy_buffers_size 64k;
# 当 proxy_buffers 放不下后端服务器的响应内容时,会将一部分保存到硬盘的临时文件中,这个值用来设置最大临时文件大小,默认1024M,它与 proxy_cache 没有关系;大于这个值,将从 upstream 服务器传回,设置为 0 禁用;
proxy_max_temp_file_size 64k;
# 当缓存被代理的服务器响应到临时文件时,这个选项限制每次写临时文件的大小;
proxy_temp_file_write_size 64k;
# 用于指定临时文件所在的目录;
proxy_temp_path proxy_temp;
}
4、反向代理统一配置:
# 配置 https_proxy 反向代理,配置如下:
http {
...
# 表示 Nginx 跟代理服务器连接超时时间
proxy_connect_timeout 75;
# 表示 Nginx 与代理服务器两个成功的响应操作之间超时时间;
proxy_read_timeout 75;
# 表示 Nginx 传输文件至代理服务器的超时时间;
proxy_send_timeout 100;
# 用于设置从代理服务器读取并保存用户头信息的缓冲区大小;
proxy_buffer_size 4k;
# 设置代理缓冲区大小,Nginx 针对单个连接,缓存来自代理服务器的响应,网页平均在32k以下的话,可以设置为 4 32K ;
proxy_buffers 4 32k;
# 设置高负荷下的缓冲大小,一般为 proxy_buffers 的两倍;
proxy_busy_buffers_size 64k;
# 当 proxy_buffers 放不下后端服务器的响应内容时,会将一部分保存到硬盘的临时文件中,这个值用来设置最大临时文件大小,默认1024M,它与 proxy_cache 没有关系;大于这个值,将从 upstream 服务器传回,设置为 0 禁用;
proxy_max_temp_file_size 64k;
# 当缓存被代理的服务器响应到临时文件时,这个选项限制每次写临时文件的大小;
proxy_temp_file_write_size 64k;
# 用于指定临时文件所在的目录;
proxy_temp_path proxy_temp;
...
}
5、http_gzip 模块配置:
http {
...
# 如果设置为 on 则表示开启 gzip 压缩输出,可减少网络传输;
gzip on;
# 设置允许压缩的页面最小字节数(到达这个大小才进行压缩),页面字节数从 header 头的 content-length 中进行获取。默认值是 20。建议设置成大于 1k 的字节数,小于 1k 可能会越压越大;
gzip_min_length 1K;
# 设置系统获取多少个单位的缓存用于存储 gzip 的压缩结果数据流,4 16k 表示按照原始数据大小以 16k 为单位的 4 倍进行内存申请;
gzip_buffers 4 16k;
# 设置 http 协议的版本,早期的浏览器不支持 Gzip 压缩,用户就会看到乱码,所以为了支持前期版本加上了这个选项;如果你用了 Nginx 的反向代理并启用 Gzip 压缩的话就需要加上,而由于末端通信是 http/1.0,故请设置为 1.0;
gzip_http_version 1.0;
# zip 压缩比,为 1 时,压缩比最小处理速度最快;为 9 时,压缩比最大但处理速度最慢;
gzip_comp_level 6;
# 匹配 mime 类型进行压缩,无论是否指定,text/html 类型总是会被压缩的;
gzip_types text/plain text/css application/json;
# 配置开启或者关闭后端服务器返回的结果是否压缩,Nginx 作为反向代理的时候启用,匹配的前提是后端服务器必须要返回包含 Via 的 header头;
gzip_proxied any;
# 配置和 http 头有关系,会在响应头加个 Vary: Accept-Encoding ,可以让前端的缓存服务器缓存经过 gzip 压缩的页面,例如:用 Squid 缓存经过 Nginx 压缩的数据;
gzip_vray on;
...
}
6、负载均衡后台服务器(http中配置):
http {
...
upstream backend {
server 192.168.56.10:8080 max_fails=2 fail_timeout=30s backup; # 热备
server 192.168.56.11:8080 max_fails=2 fail_timeout=30s;
}
...
}
7、配置 TCP/UDP 代理服务器:
Kotlin
stream {
# 负载均衡后台服务器
upstream backend {
server backend1.example.com:9000 max_fails=2 fail_timeout=30s backup; # 热备;
server backend2.example.com:9000;
# 可以添加更多服务器
...
}
# server 定义了监听的地址和端口,并指定如何将连接转发到后端服务器。
server {
# 端口
listen 80;
location / {
# 地址
proxy_pass http://backend;
# 其他代理设置
...
}
}
}