Ubuntu环境 nginx.conf详解(二)

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;
            # 其他代理设置
            ...
        }
    }
}
相关推荐
历程里程碑几秒前
Linux22 文件系统
linux·运维·c语言·开发语言·数据结构·c++·算法
恋猫de小郭2 分钟前
Flutter Zero 是什么?它的出现有什么意义?为什么你需要了解下?
android·前端·flutter
崔庆才丨静觅7 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60617 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了7 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅7 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅8 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
七夜zippoe8 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥8 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
崔庆才丨静觅8 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端