Nginx 配置文件

177 阅读3分钟

nginx.conf

# 以 root 用户运行 nginx
user root;

# nginx进程数,建议设置为等于CPU总核心数。
worker_processes  1;

# 定义错误日志路径 指nginx安装目录/logs/error.log
#error_log logs/error.log;

# 定义错误日志级别为 notice
#error_log logs/error.log notice; 

# 定义错误日志级别为 info
#error_log logs/error.log info;

# 定义 pid 文件路径
#pid logs/nginx.pid; 

# 事件区块开始
events {
	# 单个进程最大连接数
	# 根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。
	# 理论上每台nginx服务器的最大连接数 = 单个进程的最大连接数 * 进程数
    worker_connections  1024;
    
}

# 设定http服务器,利用它的反向代理功能提供负载均衡支持
http {

	# include:导入外部文件mime.types,将所有types提取为文件,然后导入到nginx配置文件中
	# mime.types 文件是一个用来映射文件扩展名与 MIME 类型(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展)的文件。
	# MIME 类型用于标识文件的内容类型,主要用于告知浏览器和其他客户端如何处理不同类型的文件。
	include       mime.types;
	
	# 默认文件类型
	default_type  application/octet-stream;
    
    # 开启gzip压缩
    # 默认off,是否开启gzip
	gzip on;  
	# 要采用 gzip 压缩的 MIME 文件类型,其中 text/html 被系统强制启用;
	gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; 
	
	# 上面两个开启基本就能跑起了,下面的愿意折腾就了解一下 
	# 默认 off,该模块启用后,Nginx 首先检查是否存在请求静态文件的 gz 结尾的文件,如果有则直接返回该 `.gz` 文件内容
	gzip_static on; 
	# 默认 off,nginx做为反向代理时启用,用于设置启用或禁用从代理服务器上收到相应内容 gzip 压缩
	gzip_proxied any; 
	# 用于在响应消息头中添加 `Vary:Accept-Encoding`,使代理服务器根据请求头中的 `Accept-Encoding` 识别是否启用 gzip 压缩
	gzip_vary on; 
	# gzip 压缩比,压缩级别是 1-9,1 压缩级别最低,9 最高,级别越高压缩率越大,压缩时间越长,建议 4-6
	gzip_comp_level 6; 
	# 获取多少内存用于缓存压缩结果,16 8k 表示以 8k*16 为单位获得
	gzip_buffers 16 8k; 
	# 允许压缩的页面最小字节数,页面字节数从header头中的 `Content-Length` 中进行获取。默认值是 0,不管页面多大都压缩。建议设置成大于 1k 的字节数,小于 1k 可能会越压越大
	# gzip_min_length 1k;
	# 默认 1.1,启用 gzip 所需的 HTTP 最低版本
	gzip_http_version 1.1;
	
	# 定义日志格式 
	#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; 
	
	# 开启高效文件传输模式,指定nginx是否调用sendfile函数来输出文件,对于普通应用必须设为on
	# 如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
	sendfile   on;

	# 长连接超时时间,单位是秒
	keepalive_timeout  65;
	
	# 第一个Server区块开始,表示一个独立的虚拟主机站点
	server {
	
		# 定义服务器监听的端口,默认80
		listen       85;
		
		# 服务器名称
		server_name  localhost;
		
		# 限制客户端请求体的最大大小为100MB,防止上传过大的文件
		client_max_body_size 100m;
		
		# 设置客户端请求体缓冲区的大小为2MB,用于处理较大的POST请求
		client_body_buffer_size  2048k;
		
		# 设置客户端请求头缓冲区的大小为10MB,用于处理较大的HTTP头部	
		client_header_buffer_size 10m;
		
		# 设置临时文件写入的大小为10MB,用于处理大文件上传时的临时存储
		proxy_temp_file_write_size 10m;
		
		# 为FastCGI缓存设置8个128KB的缓冲区,用于提高FastCGI应用的性能
		fastcgi_buffers 8 128k;
		
		# 设置代理读取超时时间为3600秒(1小时),在此时间内未收到上游服务器响应则超时
		proxy_read_timeout 3600;
		
		# 设置代理连接超时时间为600秒(10分钟),在此时间内未连接到上游服务器则超时
		proxy_connect_timeout 600;
		
		# 设置keep-alive连接超时时间为600秒(10分钟),在此时间内保持连接以便复用
		keepalive_timeout 600;
		
		# location块用来定义如何处理特定的请求URI,有多种匹配规则:
		
		# location块前缀匹配,如果多个块匹配到了,会选择最长前缀
		# 匹配以 /rainstormZuul 开头的请求
		location /rainstormZuul { 
			# 重写URI(这里是剔除rainstormZuul) 
			rewrite "^/rainstormZuul/(.*)$" /$1 break; 
			# 反向代理,将URI转发到指定的上游服务器
			proxy_pass http://127.0.0.1:11004; 
		}
		
		# location块精确匹配,如果精确匹配到了,不会再进行其他匹配
		# 匹配为 /exact 的请求
		location = /exact {
			# 处理请求
		}
		
		# location块区分大小写的正则表达式匹配
		# 匹配以 .java 结尾的请求,区分大小写
		location ~ \.java$ {
			# root 指定静态文件的根目录路径
			# 最终路径为:root指定路径/URI路径
			# 可以写绝对/相对路径,相对路径是相对于nginx目录的路径。
			# 指定静态文件根目录路径为 nginx目录/html/dist-java
			root   html/dist-java
		    # 指定首页,多个用空格分开,nginx会顺序查找,使用最先找到的
		    index  index.html index.htm;
		}
		
		# location块不区分大小写的正则表达式匹配
		# 匹配以 jpg、jpeg、png 或 gif 结尾的请求,不区分大小写
		location ~* \.(jpg|jpeg|png|gif)$ {
			# 最终路径为:alias指定路径/去掉匹配路径后的URI路径
			alias   html/dist-java
			index  index.html index.htm;
		}
		
		location /ams {
		
			# 设置别名目录,将 /ams 映射到 /opt/html/ams 也就不需要root了
			alias  /opt/html/ams;
			index front/views/indexNologin-v2.html index.html;

			# 添加响应头,允许所有域进行跨域请求
			add_header 'Access-Control-Allow-Origin' '*';
			
			# 添加响应头,允许跨域请求时发送凭据
			add_header 'Access-Control-Allow-Credentials' 'true';

			# 添加响应头,允许的HTTP方法为 GET, POST, OPTIONS			
			add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
			
			# 添加响应头,允许的自定义请求头			
			add_header 'Access-Control-Allow-Headers' 'DNT,Content-Type';
			
			# 设置代理使用的HTTP版本为1.1		
			proxy_http_version 1.1;
			
			# 设置连接头为空,以保持连接
			proxy_set_header Connection "";
			
			# 动态页面,交给tomcat处理
			
			# !表示取反,-e检查文件是否存在
			# $request_filename是一个Nginx变量,表示根据当前根目录和URI生成的文件路径
			if ( !-e $request_filename) {
				# 如果请求的文件不存在,将请求代理到本地的Tomcat服务器
				proxy_pass http://127.0.0.1:8080;
			}
			
		}
		
		location / {
			# 当用户刷新页面时,Nginx会先检查当前URL是否存在,如果不存在,就会尝试访问index.html,从而可以正常显示页面。
			try_files $uri $uri/ /index.html;
		}
		
		# 错误页面路由
		# 出现对应的http状态码时,转发到下面的location块
		error_page   500 502 503 504  /50x.html; 
		
		location = /50x.html { 
			# 指定对应的站点目录为html
			root   html;  
		}
	}
}

root 与 alias

root:拼接
location /static {
    root /var/www;
    index index.html;
}

如果请求 URI 是 /static/images/logo.png, Nginx 会将root路径/var/www 拼接到 URI地址/static/images/logo.png前面, 即请求 /var/www/static/images/logo.png

alias:替换
location /static {
    alias /var/www;
    index index.html;
}

如果请求 URI 是 /static/images/logo.png, Nginx 会将root地址 替换到 URI地址 /static/images/logo.png中,不会保留 /static 前缀, 即请求/var/www/images/logo.png