Nginx--nginx.conf 配置文件模板

模板

# === 全局块 ===
# 用户组
user  nobody;

# 工作进程数
worker_processes 1;

# 日志路径和日志级别
error_log  logs/error.log;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;

# 进程文件路径
pid logs/nginx.pid;

# === events块 ===
events {
    # 最大连接数
    worker_connections  1024;
	
    # 设置网络连接序列化
    accept_mutex on;
	
    # 一个进程是否同时接收多个网络连接
    multi_accept on;
	
    # 事件驱动模型
    use epoll;
}

# === http块 ===
http {
		# === http全局块 ===
    # 文件扩展名与文件类型映射表
    include  mime.types;
	
    # 默认文件类型
    default_type  application/octet-stream;
	
    # 是否开启服务日志
    access_log off;
	
    # 自定义服务日志格式
    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;
    # 每个进程每次最大传输值
    sendfile_max_chunk  100k;
    
    # 长连接超时事件
    keepalive_timeout  65;

    # 响应客户端的超时事件
    send_timeout 75;

    # 客户端请求头的区缓冲区大小
    client_header_buffer_size 32k;
	
    # 客户端请求头的最大缓冲区数量和大小
    large_client_header_buffers 8 32k;
	
    # 允许客户端请求的最大字节数
    client_max_body_size  10m;
	
    # 客户端请求体的缓冲区大小
    client_body_buffer_size  128k;
    
    # ---配置http_gzip模块---
    # 开启gzip压缩输出,可减少网络传输
    gzip  on;

    # 设置允许压缩的页面最小字节数
    gzip_min_length 1k;
	
    # 设置系统获取多少个单位的缓存用于存储gzip的压缩结果数据流
    gzip_buffers 4 16k;
	
    # 设置http协议的版本
    gzip_http_version 1.0;
	
    # 设置zip压缩比
    gzip_comp_level 6;
	
    # 匹配mime类型进行压缩
    gzip_types text/plain text/css application/json;
	
    # 设置开启或者关闭后端服务器返回的结果是否压缩
    gzip_proxied any;
	
    # 该配置和http头有关系,会在响应头加个vary:Accept-Encoding
    gzip_vray on;
	
    # ---配置http_proxy反向代理---
    # Nginx跟代理服务器连接超时时间
    proxy_connect_timeout 75;
	
    # Nginx与代理服务器两个成功的响应操作之间超时时间
    proxy_read_timeout 75;
	
    # Nginx传输文件至代理服务器的超时时间
    proxy_send_timeout 100;
	
    # 设置从代理服务器读取并保存用户头信息的缓冲区大小
    proxy_buffer_size 4k;
	
    # 设置代理缓冲区大小
    proxy_buffers 4 32k;
	
    # 设置高负荷下的缓冲大小
    proxy_busy_buffers_size 64k;
	
    # 设置最大临时文件大小,默认1024M
    proxy_max_temp_file_size 64k;
	
    # 限制每次写临时文件的大小
    proxy_temp_file_write_size 64k;
	
    # 指定临时文件所在的目录
    proxy_temp_path proxy_temp;

    # 定义tomcat地址
    upstream tomcat {
       server 192.168.138.100:8888;
    }
		
    # === HTTP-server块 ===
    server {
        # 监听端口
        listen 80;
		
	# 监听服务器地址
        server_name localhost;

	# 每个连接请求上限次数
	keepalive_requests 120;
		
	# 字符集
        charset utf-8;

	# 服务日志所在目录以及日志格式
        access_log  logs/host.access.log  main;

	# 错误页
	error_page 404 /404.html;
	error_page 500 502 503 504 /50x.html;
				
	# === HTTP-server-location块 ===
        location / {
	        # 服务器的默认网站根目录位置
		root /usr/share/nginx/html;
			
		# 默认访问的文件名
		index index.html;
			
		# 拒绝的IP
		deny 192.168.56.21;
		deny all;
			
		# 允许的IP
		allow 192.168.56.10;
		allow all;	
	}
		
	# 设置响应头
	location / {
		# 设置允许跨域类型
		add_header Access-Control-Allow-Origin * always;
						
		# 是否允许信任证书
		add_header Access-Control-Allow-Credentials 'true' always;
						
		# 允许的请求头类型
		add_header Access-Control-Allow-Headers * always;
						
		# 设置允许的请求方式
		add_header Access-Control-Allow-Methods 'PUT,GET,POST,DELETE,OPTIONS' always;
						
		# 处理OPTIONS请求
		if ($request_method = 'OPTIONS') {
			return 204;
		}
        }	
		
	# 设置反向代理服务器
	location / {
		# 反向代理服务器地址
		proxy_pass http://192.168.56.23;
						
		# 是否重定向代理服务器地址
		proxy_redirect off;

		# 设置向代理服务器发送请求时的请求头数据
		# cookie
		proxy_pass_header Set-Cookie;
						
		# 主机名
		proxy_set_header Host $host;
						
		# 真实IP
		proxy_set_header X-Real-Ip $remote_addr;
						
		# 表示Http请求端真实IP
		proxy_set_header X-Forwarded-For $remote_addr;
	}
    }
    # 配置ssl
    server {
	# 开启 ssl
	ssl on;
					
	# ssl证书路径
	ssl_certificate cert.pem;
					
	# ssl证书密钥
	ssl_certificate_key cert.key;
					
	# ssl缓存
	ssl_session_cache shared:SSL:1m;
			    
	# ssl会话超时时间
	ssl_session_timeout 5m;
					
	# ssl会话票据
	ssl_session_tickets off;
					
	# ssl协议版本
	ssl_protocols TLSv1.2;
					
	# ssl密码套件
	ssl_ciphers 'HIGH:!aNULL:!MD5';
					
	# 开启ssl服务密码套件
	ssl_prefer_server_ciphers on;
    }
}

全局块

配置影响 nginx 全局的指令,一般有运行 nginx 服务器的用户组、nginx 进程 pid 存放路径、日志存放路径、配置文件引入、允许生成 worker process 数等

# === 全局块 ===
# 用户组
user  nobody;

# 工作进程数
worker_processes 1;

# 日志路径和日志级别
error_log  logs/error.log;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;

# 进程文件路径
pid logs/nginx.pid;
  • 用户或用户组默认为 nobody;
  • 工作进程数可以设置为CPU的核心数;
  • 日志级别有:debug | info | notice | warn | error | criy | alert | emerg

events块

配置影响 nginx 服务器或与用户的网络连接。有每个进程的最大连接数、选取哪种事件驱动模型处理连接请求、是否允许同时接收多个网络连接、开启多个网络连接序列化等

# === 全局块 ===
# ...

# === Events块 ===
events {
    # 最大连接数
    worker_connections  1024;
	
    # 设置网络连接序列化
    accept_mutex on;
	
    # 一个进程是否同时接收多个网络连接
    multi_accept on;
	
    # 事件驱动模型
    use epoll;
}
  • 设置网络连接序列化是为了防止惊群现象发生,默认为 on;
  • 是否同时接收多个网络连接指令默认值为 off;
  • 时间驱动模型的可选项有:select | poll | kqueue | epoll | resig | /dev/poll | eventport

http块

可以嵌套多个 server 、配置代理、缓存、日志定义等绝大多数功能和第三方模块的配置。如文件引入、mime-type 定义、日志自定义、是否使用 sendfile 传输文件、连接超时时间、单连接请求数等。

http_全局块

http_全局块-常用配置

# === 全局块 ===
#......

# === Events块 ===
events {
#......
}

# === http块 ===
http {
    # === http全局块-常用配置 ===
    # 文件扩展名与文件类型映射表
    include  mime.types;
	
    # 默认文件类型
    default_type  application/octet-stream;
	
    # 是否开启服务日志
    access_log off;
	
    # 自定义服务日志格式
    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;
    # 每个进程每次最大传输值
    sendfile_max_chunk  100k;
    
    # 长连接超时事件
    keepalive_timeout  65;

    # 响应客户端的超时事件
    send_timeout 75;

    # 客户端请求头的区缓冲区大小
    client_header_buffer_size 32k;
	
    # 客户端请求头的最大缓冲区数量和大小
    large_client_header_buffers 8 32k;
	
    # 允许客户端请求的最大字节数
    client_max_body_size  10m;
	
    # 客户端请求体的缓冲区大小
    client_body_buffer_size  128k;
}
  • 文件扩展名与文件类型映射表在 nginx/conf 下;
  • 默认文件类型的默认值为 text/plain
  • 是否开启服务日志的默认值为 on,开启了之后需要配置 access_log 路径;
  • 自定义日志格式的更多变量参考:【Nginx】之常用内置变量
  • sendfile 指令指定 Nginx 是否调用 sendfile 函数来输出文件,减少用户空间到内核空间的上下文切换;对于普通应用设为 on,如果用来进行下载等应用磁盘 IO 重负载应用,可设置为 off,以平衡磁盘与网络 I/O 处理速度,降低系统的负载;
  • sendfile_max_chunk指令的默认为 0,表示不设上限;
  • keeplive_timeout指令的单位是秒,这个参数很敏感,涉及浏览器的种类、后端服务器的超时设置、操作系统的设置;长连接在请求大量小文件的时候,可以减少重建连接的开销;但如果上传大文件时在设置的超时时间内没上传完成会导致失败,如果设置时间过长,用户又多,长时间保持连接会占用大量资源;
  • send_timeout指令仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx 将会关闭连接;
  • 使用 client_header_buffer_size指令时,为避免请求 header 过大出现400错误,可以适当设置大一点;
  • 使用 large_client_header_buffers指令时,为避免请求header过大出现400错误,可以适当设置大一点

http_全局块-反向代理配置

# === 全局块 ===
#......

# === Events块 ===
events {
#......
}

# === http块 ===
http {
    #......

    # ---http全局块-proxy反向代理配置---
    # Nginx跟代理服务器连接超时时间
    proxy_connect_timeout 75;
	
    # Nginx与代理服务器两个成功的响应操作之间超时时间
    proxy_read_timeout 75;
	
    # Nginx传输文件至代理服务器的超时时间
    proxy_send_timeout 100;
	
    # 设置从代理服务器读取并保存用户头信息的缓冲区大小
    proxy_buffer_size 4k;
	
    # 设置代理缓冲区大小
    proxy_buffers 4 32k;
	
    # 设置高负荷下的缓冲大小
    proxy_busy_buffers_size 64k;
	
    # 设置最大临时文件大小,默认1024M
    proxy_max_temp_file_size 64k;
	
    # 限制每次写临时文件的大小
    proxy_temp_file_write_size 64k;
	
    # 指定临时文件所在的目录
    proxy_temp_path proxy_temp;
}
  • proxy_connect-timeout:表示 Nginx 跟代理服务器连接超时时间;
  • proxy_read_timeout:表示 Nginx 与代理服务器两个成功的响应操作之间的超时时间;
  • proxy_send_timeout:表示 Nginx 传输文件至代理服务器的超时时间;
  • proxy_buffer_size:用于设置从代理服务器读取并保存用户头信息的缓存区大小;
  • proxy_buffers:设置代理缓冲区大小,Nginx 针对单个连接,缓存来自代理服务器的响应,网页平均在 32k 以下的话,可以设置为 4 32k;
  • proxy_busy_buffers_size:设置高负荷下的缓冲大小,一般为 proxy_buffers 的两倍;
  • proxy_max_temp_file_size:当 proxy_buffers 放不下后端服务器的响应内容时,会将一部分保存到硬盘的临时文件中,这个值用来设置最大临时文件大小,默认为1024M,它与 proxy_cache 没有关系;大于这个值,将从 upstream 服务器传回,设置为 0 禁用;
  • proxy_temp_file_write_size:当缓存被代理的服务器响应到临时文件时,这个选项限制每次写临时文件的大小;
  • proxy_temp_path:用于指定临时文件所在的目录

http_全局块-gzip配置

# === 全局块 ===
#......

# === Events块 ===
events {
#......
}

# === http块 ===
http {
    #......

    # ---http全局块-gzip模块配置---
    # 开启gzip压缩输出,可减少网络传输
    gzip  on;

    # 设置允许压缩的页面最小字节数
    gzip_min_length 1k;
	
    # 设置系统获取多少个单位的缓存用于存储gzip的压缩结果数据流
    gzip_buffers 4 16k;
	
    # 设置http协议的版本
    gzip_http_version 1.0;
	
    # 设置zip压缩比
    gzip_comp_level 6;
	
    # 匹配mime类型进行压缩
    gzip_types text/plain text/css application/json;
	
    # 设置开启或者关闭后端服务器返回的结果是否压缩
    gzip_proxied any;
	
    # 该配置和http头有关系,会在响应头加个vary:Accept-Encoding
    gzip_vray on;
}
  • gzip:如果设置为 on 则表示开启 gzip 压缩输出,可减少网络传输;
  • gzip_min_length:设置允许压缩的页面最小字节数(到达这个大小才进行压缩),页面字节数从 header 头的 content-length 中进行获取。默认值为 20,建议设置成大于 1k 的字节数,小于 1k 可能会越压越大;
  • gzip_buffers:设置系统获取多少个单位的缓存用于存储 gzip 的压缩结果数据流,4 16k 表示按照原始数据大小以 16k 为单位的4倍进行内存申请;
  • gzip_http_version:设置 http 协议的版本,早期的浏览器不支持 gzip 压缩,用户就会看到乱码,所以为了支持前期版本加上了这个选项;如果你用了 Nginx 的反向代理并启用 gzip 压缩的话就需要加上,而由于末端通信是 http/1.0,故要设置为1.0;
  • gzip_comp_level:zip 压缩比,为 1 时,压缩比最小处理速度最快;为 9 时,压缩比最大但处理速度最慢;
  • gzip_types:匹配 mime 类型进行压缩,无论是否指定,text/html类型总是会被压缩的;
  • gzip_proxied:设置开启或者关闭后端服务器返回的结果是否压缩,Nginx 作为反向代理的时候启用,匹配的前提是后端服务器必须要返回包含 Via的 header 头;
  • gzip_vray:该配置和 http 头有关系,会在响应头加个 Vary: Accept-Encoding,可以让前端的缓存服务器缓存经过 gzip 压缩的页面,例如:用 Squid 缓存经过 Nginx 压缩的数据

http_server块

监听http服务,配置虚拟主机的相关参数,一个 HTTP 中可以有多个 server

http_server块-常用配置

# === 全局块 ===
#......

# === Events块 ===
events {
#......
}

# === http块 ===
http {
    #......
		
    # === http_server-常用配置 ===
    server {
        # 监听端口
        listen 80;
		
	# 监听服务器地址
        server_name localhost;

	# 每个连接请求上限次数
	keepalive_requests 120;
		
	# 字符集
        charset utf-8;

	# 服务日志所在目录以及日志格式
        access_log  logs/host.access.log  main;

        # 重定向错误页到静态页
	error_page 404 /404.html;
	error_page 500 502 503 504 /50x.html;
    }
}
  • 监听的端口,默认80,小于1024的要以root启动;
  • 监听的服务器地址可以是 IP 或者域名,并且可以使用正则表达式进行匹配;
  • 日志格式的定义和 http 模块的定义方式相同;
  • 错误页的地址为:server_name + error_page

http_server块-ssl证书配置

# === 全局块 ===
#......

# === Events块 ===
events {
#......
}

# === http块 ===
http {
#......

    # === http_server-ssl证书配置 ===
    server {
	# 开启 ssl
	ssl on;
					
	# ssl证书路径
	ssl_certificate cert.pem;
					
	# ssl证书密钥
	ssl_certificate_key cert.key;
					
	# ssl缓存
	ssl_session_cache shared:SSL:1m;
			    
	# ssl会话超时时间
	ssl_session_timeout 5m;
					
	# ssl会话票据
	ssl_session_tickets off;
					
	# ssl协议版本
	ssl_protocols TLSv1.2;
					
	# ssl密码套件
	ssl_ciphers 'HIGH:!aNULL:!MD5';
					
	# 开启ssl服务密码套件
	ssl_prefer_server_ciphers on;
    }
}

http_server_location块

配置请求的路由,以及各种页面的处理情况

http_server_location块-常用配置

# === 全局块 ===
#......

# === Events块 ===
events {
#......
}

# === http块 ===
http {
	# ===http_全局块 ===
	#......
 
	# ===http_server块 ===
	server {
		# ===http_server_location块 ===
		location / {
		        # 服务器的默认网站根目录位置
			root /usr/share/nginx/html;
			
			# 默认访问的文件名
			index index.html;
			
			# 拒绝的IP
			deny 192.168.56.21;
			deny all;
			
			# 允许的IP
			allow 192.168.56.10;
			allow all;	
		}
	}
}
  • 紧跟在 location 后面的是 location 模块监听的 url 地址,也就是 location 块的匹配规则,只有匹配正确的地址才会进入该 location 块,可以使用正则表达式进行匹配(~表示区分大小写,~*表示不区分大小写,/表示全部)
  • root:定义服务器的默认的默认网站根目录位置,如果 locationURL 匹配的是子目录或文件,root指令没什么作用,一般放在 server 指令里面或者 locationURL 为 / 的 location 块下;
  • index:定义该 location 路径下默认访问的文件名,一般跟 root 的路径放在一起

http_server_location块-响应头配置

# === 全局块 ===
#......

# === Events块 ===
events {
#......
}

# === http块 ===
http {
	# ===http_全局块 ===
	#......
 
	# ===http_server块 ===
	server {
		# ===http_server_location块 ===
		location / {
			# 设置允许跨域类型
			add_header Access-Control-Allow-Origin * always;
						
			# 是否允许信任证书
			add_header Access-Control-Allow-Credentials 'true' always;
						
			# 允许的请求头类型
			add_header Access-Control-Allow-Headers * always;
						
			# 设置允许的请求方式
			add_header Access-Control-Allow-Methods 'PUT,GET,POST,DELETE,OPTIONS' always;
						
			# 处理OPTIONS请求
			if ($request_method = 'OPTIONS') {
				return 204;
			}
              }	
	}
}
  • 为了避免出现失效问题,一般在最后面添加 always
  • 允许的请求头类型包括:Origin、X-Requested-With、content-Type、Accept、Authorization、uuid等

http_server_location块-反向代理配置

# === 全局块 ===
#......

# === Events块 ===
events {
#......
}

# === http块 ===
http {
	# ===http_全局块 ===
	#......
 
	# ===http_server块 ===
	server {
		# ===http_server_location块 ===
		# 设置反向代理服务器
		location / {
			# 添加反向代理服务器
			# 反向代理服务器地址
			proxy_pass http://192.168.56.23;
						
			# 是否重定向代理服务器地址
			proxy_redirect off;

			# 设置向代理服务器发送请求时的请求头数据
			# cookie
			proxy_pass_header Set-Cookie;
						
			# 主机名
			proxy_set_header Host $host;
						
			# 真实IP
			proxy_set_header X-Real-Ip $remote_addr;
						
			# 表示Http请求端真实IP
			proxy_set_header X-Forwarded-For $remote_addr;
		}
	}
}
posted @   Li-Xiaolei  阅读(1306)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示