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;
            # 其他代理设置
            ...
        }
    }
}
相关推荐
breaksoftware1 小时前
Windows Subsystem for Linux——设置默认登录用户名
linux·运维·服务器
PyAIGCMaster2 小时前
ubuntu装P104
服务器·网络·ubuntu
云云3213 小时前
云手机服务器如何做到群控多台手机的?
服务器·线性代数·安全·智能手机·矩阵
梁萌4 小时前
Linux安装Docker
linux·运维·docker·helloworld·容器化部署
翱翔-蓝天4 小时前
在 CentOS 系统上安装 ClickHouse
运维·docker·容器
m0_748255264 小时前
前端安全——敏感信息泄露
前端·安全
彩虹糖_haha4 小时前
Linux高并发服务器开发 第五天(压缩解压缩/vim编辑器/查找替换/分屏操作/vim的配置)
linux·运维·服务器
旺仔学IT4 小时前
Centos7中使用yum命令时候报错 “Could not resolve host: mirrorlist.centos.org; 未知的错误“
linux·运维·centos
鑫~阳5 小时前
html + css 淘宝网实战
前端·css·html
qq_433618445 小时前
shell 编程(五)
linux·运维·服务器