nginx常用配置

目录

1、全局块

2、events块

3、http块

3.1、http基本配置

3.2、http反向代理基本配置

3.3、http反向代理服务器和负载均衡

3.4、http_gzip配置

3.5、server相关配置

3.5.1、server基础配置

3.5.2、ssl配置

3.5.3、location配置

4、一个简单的nginx配置实例


1、全局块

        所有在nginx.conf内但不在任何{}中的指令。

        通常包括配置运行Nginx服务器的用户(组)、允许生成的worker process数、Nginx进程PID存放路径、日志的存放路径和类型等。

        Nginx 配置中,以 / 开头的路径表示绝对路径,不以 / 开头的路径表示相对路径,相对路径的根目录为 Nginx 的根目录。

# 1、指定可以运行nginx服务的用户和用户组:user [user] [group]
# 如果不配置,或配置nobody,则所有用户都可运行nginx
user myUser myGroup;

# 2、指定工作线程数(一般设置为CPU核心数):worker_processes number | auto;
worker_processes 4; # 生成一个master进程和4个worker进程

# 3、指定pid文件存放的路径
pid /user/local/nginx/nginx.pid;

# 4、指定错误日志的路径和日志级别,其中debug级别的日志需要编译时使用--with-debug开启debug开关
# 日志级别:debug|info|notice|warn|error|crit|alert|emerg
error_log logs/error.log debug;

2、events块

        所有写在 events{} 中的指令。

        events中的指令主要影响Nginx服务器与用户的网络连接。

events {
	# 1、设置网路连接序列化,默认on
    # 当某一时刻只有一个网络连接到来时,多个睡眠进程会被同时叫醒,但只有一个进程可获得连接。如果每次唤醒的进程数目太多,会影响一部分系统性能。
    # 开启后,会对多个Nginx进程接收连接进行序列化,防止惊群现象
	accept_mutex on;
	
	# 2、一个进程是否同时接受多个网络连接,默认off
	multi_accept on;
	
	# 3、事件驱动模型:select、poll、kqueue、epoll、rtsig、/dev/poll以及eventport
	use epoll;
	
	# 4、最大连接数
	worker_connections  1024;
}

3、http块

3.1、http基本配置

http {
	# 1、引入文件扩展名与文件类型映射表:根据WEB服务器请求的静态资源后缀,通过mime.types映射,设置Response的Content-Type
	# include指令:用于包含其他的配置文件
	include mime.types;
	
	# 2、默认文件类型:默认为text/plain
	default_type  application/octet-stream;
	
	# 3.1、是否开启服务日志:记录Nginx服务器提供服务过程应答前端请求的日志
	access_log off;
	# 3.2、自定义服务日志格式
	log_format myLogFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for';
	# 3.3、设置日志的格式
	access_log log/access.log myLogFormat;
	
	# 4.1、是否开启高效文件传输模式
	# 指定nginx是否调用 sendfile 函数来输出文件,减少用户空间到内核空间的上下文切换;
	# 对于普通应用设为on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载
	sendfile on;
	# 4.2、每个进程每次最大传输值,默认为0,不限制大小
	sendfile_max_chunk 100k;
	
	# 5、长连接超时时间(秒)
	# 在请求大量小文件的时候,可以减少重建连接的开销;
	# 但如果上传大文件时在设置的超时时间内没上传完成会导致失败,如果设置时间过长,用户又多,长时间保持连接会占用大量资源;
	keeplive_timeout 100;
	
	# 6、单连接请求数上限:限制用户通过某一连接向Nginx服务器发送请求的次数
	keepalive_requests 100;
	
	# 7、响应客户端的超时时间(秒)
	send_timeout 75;
	
	# 8、客户端请求头的区缓冲区大小
	client_header_buffer_size 32k;
	
	# 9、客户端请求头的最大缓冲区数量和大小
	large_client_header_buffers 8 32k;
	
	# 10、允许客户端请求的最大字节数
	client_max_body_size  10m;
	
	# 11、客户端请求体的缓冲区大小
	client_body_buffer_size  128k;
}

3.2、http反向代理基本配置

http {
    proxy_connect_timeout 90;  			# nginx跟后端服务器连接超时时间(代理连接超时)
	proxy_send_timeout 90;     			# 后端服务器数据回传时间(代理发送超时)
	proxy_read_timeout 90;     			# 连接成功后,后端服务器响应时间(代理接收超时)
	proxy_buffer_size 4k;      			# 从nginx读取并保存用户头信息的缓冲区大小
	proxy_buffers 4 32k;      			# 代理缓冲区数量和大小
	proxy_busy_buffers_size 64k;     	# 高负荷下缓冲大小(proxy_buffers*2)
	proxy_temp_file_write_size 64k;  	# 设定缓存文件夹大小

	proxy_set_header Host $host; 		# 后台可以获取到完整的ip+端口号
	proxy_set_header X-Forwarder-For $remote_addr;  #后台可以获取到用户访问的真实ip地址
}

3.3、http反向代理服务器和负载均衡

http {
	upstream product_server { 
		# 权重,默认为1,权值越高被分配到的几率越大
		server 192.168.1.11:8880   weight=5;	
		# 标识当前的server暂时不参与负载
		server 192.168.1.12:9990   down;
		# 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
		server 192.168.1.13:8989   backup;		
		# max_fails:允许请求失败的最大次数,默认为1,当超过最大次数时,返回proxy_next_upstream 模块定义的错误.
		# fail_timeout: max_fails次失败后,暂停的时间
		server 192.168.1.14:8989   max_fails=2 fail_timeout=60s;	
	}
}

3.4、http_gzip配置

        启用Gzip压缩功能,可以在网站的js、xml、html等静态资源进行数据传输时进行gzip压缩,压缩后的资源可以变为原来的30%甚至更小。虽然会消耗一定的CPU资源,但是会节约大量的出口带宽来提升访问速度。
        服务器端压缩,传到浏览器后解压并解析。
        不建议压缩图片和大文件。jpg、png等图片资源本身就有压缩,开启gzip后,区别不大;大文件压缩会消耗大量的CPU资源,且性能提升效果不一定明显。

http {
    gzip on;				# 开启gzip压缩								
    gzip_min_length 1K;		# 设置压缩的最小字节数(资源达到该大小才压缩,建议设置成大于1K)
    gzip_buffers  4  16k;	# 获取多少个单位的缓存用于存储gzip的压缩结果数据流,4 16k表示按照原始数据大小以16k为单位的4倍进行内存申请;
    gzip_http_version 1.0;  # http协议版本
    gzip_comp_level 6;		# zip压缩比:为1时,压缩比最小处理速度最快;为9时,压缩比最大但处理速度最慢。
	# 设置需要压缩哪些响应类型的资源
    gzip_types text/plain text/css application/json;
    gzip_proxied any;		# 开启或者关闭 后端服务器返回的结果是否压缩
    gzip_vray on;			# 开启后,可以让前端的缓存服务器缓存经过gzip压缩的页面
}

3.5、server相关配置

3.5.1、server基础配置

http {
	...
	server {
		# 1、监听端口:可配置监听ip、端口、ip:端口三种形式
		listen 8080;
		
		# 2、监听服务器地址(IP/域名)
		server_name 172.27.8.22;
		
		# 3、每个连接请求上限次数
		keepalive_requests 120;
		
		# 4、字符集
		charset utf-8;
		
		# 5、服务日志所在目录以及日志格式(日志格式可直接引用http配置的日志格式)
		access_log logs/host.log myLogFormat;
		
		# 6、错误页
		error_page  404  /404.html;
		error_page  500 502 503 504  /50x.html;
	}
}

3.5.2、ssl配置

如果请求方式是https请求的话,是需要证书,这时就要对https请求设置ssl。

http {
	server {
		# SSL 访问端口号为 443
	  listen 443 ssl;
	
	  # 填写绑定证书的域名
	  server_name cloud.xxx.com; 
	
		# 开启 ssl
		ssl on;
		
		# ssl 证书路径
		ssl_certificate /opt/ssl/nginx.crt;
		
		# ssl 证书秘钥
		ssl_certificate_key /opt/ssl/nginx.key;
		
		# ssl 会话超时时间
		ssl_session_timeout 1d;
		
		# ssl 缓存
		ssl_session_cache shared:SSL:50m;
		
		# ssl 会话票据
		ssl_session_tickets off;
		
		# ssl 协议版本
		ssl_protocols TLSv1.2;
		
		# ssl 密码套件
		ssl_ciphers  'HIGH:!aNULL:!MD5';
		
		# 开启 ssl 服务密码套件
		ssl_prefer_server_ciphers on;
	}
}

3.5.3、location配置

        基于Nginx服务器接收到的请求字符串,对除虚拟主机名称之外的字符串进行匹配,对特定的请求进行处理,完成地址定向、数据缓存和应答控制等功能。

http {
	server {
		# 1、路由匹配规则:location模块监听的url地址,url只有匹配正确才会进入该location块:	location [ = | ~ | ~* | ^~ ] uri { ... }
		# "=":	用于标准uri前,要求请求字符串与uri严格匹配。
		# "^~":	用于标准uri前,要求Nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配。
		# "~":	用于表示uri包含正则表达式,并且区分大小写。
		# "~*":	用于表示uri包含正则表达式,并且不区分大小写。注意如果uri包含正则表达式,就必须要使用“~”或者“~*”标识。
		location  匹配规则 {
			# 2、服务器的默认网站根目录位置,root指令:定义服务器的默认网站根目录位置
			# 假设请求为/t/a.html
			# root /var/www/html; 		# 会返回/var/www/html/t/a.html的资源
			alias /var/www/new_html; 	# 会返回/var/www/new_html/a.html的资源
			
			# 3、默认访问的文件名
			index  index.html index.htm index.jsp;

			# 4.1、拒绝的 IP
			deny 192.168.56.21;
			# 4.2、允许的 IP 
			allow 192.168.56.10;
			
			# 5.1、跨域、请求头配置
			add_header Access-Control-Allow-Origin * always;
			# 5.2、是否允许信任证书
			add_header Access-Control-Allow-Credentials 'true' always;
			# 5.3、允许的请求头类型
			add_header Access-Control-Allow-Headers * always;
			# 5.4、设置允许的请求方式
			add_header Access-Control-Allow-Methods 'PUT, GET, POST, DELETE, OPTIONS' always;
			# 5.5、处理 OPTIONS 请求
			if ($request_method = 'OPTIONS') {
				return 204;
			}
		}
		
		location ~/product{
			# 反向代理服务器
			proxy_pass http://product_server;
				
			# 是否重定向代理服务器地址
			proxy_redirect off;

			proxy_set_header Host $host; 		# 后台可以获取到完整的ip+端口号
			proxy_set_header X-Forwarder-For $remote_addr;  #后台可以获取到用户访问的真实ip地址
		}

	}
}

4、一个简单的nginx配置实例


# 定义Nginx运行的用户和用户组
# user  myUser myGroup;

# nginx进程数
worker_processes 4;

# 全局错误日志定义类型
error_log /usr/local/nginx/logs/error.log info;

# 进程pid文件
pid /usr/local/nginx/logs/nginx.pid;

events {
	# 事件驱动模型:select、poll、kqueue、epoll、rtsig、/dev/poll以及eventport
	use epoll;
	
	# 最大连接数
	worker_connections  1024;
}
http {
	# 引入文件扩展名与文件类型映射表:根据WEB服务器请求的静态资源后缀,通过mime.types映射,设置Response的Content-Type
	# include指令:用于包含其他的配置文件
	include mime.types;
	
	# 默认文件类型:默认为text/plain
	default_type  application/octet-stream;
	
	# 允许客户端请求的最大字节数
	client_max_body_size  10m;
	
	# 开启服务日志:记录Nginx服务器提供服务过程应答前端请求的日志
	access_log on;
	# 自定义服务日志格式
	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;
	
	# 开启高效文件传输模式
	# 指定nginx是否调用 sendfile 函数来输出文件,减少用户空间到内核空间的上下文切换;
	# 对于普通应用设为on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载
	sendfile on;
	# 每个进程每次最大传输值,默认为0,不限制大小
	# sendfile_max_chunk 100k;
	
	# 长连接超时时间(秒)
	# 在请求大量小文件的时候,可以减少重建连接的开销;
	# 但如果上传大文件时在设置的超时时间内没上传完成会导致失败,如果设置时间过长,用户又多,长时间保持连接会占用大量资源;
	keeplive_timeout 100;
	
	# 响应客户端的超时时间(秒)
	send_timeout 75;
	
	proxy_buffer_size 1024k;      			# 从nginx读取并保存用户头信息的缓冲区大小
	proxy_buffers 16 1024k;      			# 代理缓冲区数量和大小
	proxy_busy_buffers_size 4096k;     	# 高负荷下缓冲大小(proxy_buffers*2)
	
	upstream product_server { 
		# 权重,默认为1,权值越高被分配到的几率越大
		server 192.168.1.11:8880   weight=5;	
		# 标识当前的server暂时不参与负载
		server 192.168.1.12:9990   down;
		# 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
		server 192.168.1.13:8989   backup;		
		# max_fails:允许请求失败的最大次数,默认为1,当超过最大次数时,返回proxy_next_upstream 模块定义的错误.
		# fail_timeout: max_fails次失败后,暂停的时间
		server 192.168.1.14:8989   max_fails=2 fail_timeout=60s;	
	}
	
	upstream project_server {
		server 192.168.1.11:8880;
	}

    server {
        listen       8888;
		server_name  localhost;

		# 跨域、请求头配置
		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;
		if ($request_method = 'OPTIONS') {
			return 204;
		}

		location / {       
			root   /usr/local/applications/front/build/;
			index  index.html index.htm;
		}

		location ^~/product {
			rewrite ^/product/(.*)$ /$1 break;	# 重写url,去掉url中的product
			proxy_pass http://product_server;
			proxy_set_header Host $http_host; #后台可以获取到完整的ip+端口号
			proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址
		}

		location ~/(project|test) {
			proxy_pass http://project_server;
			proxy_set_header Host $http_host; #后台可以获取到完整的ip+端口号
			proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址
		}

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
}

以上内容为个人学习理解,如有问题,欢迎在评论区指出。

部分内容截取自网络,如有侵权,联系作者删除。

你可能感兴趣的:(运维,nginx,运维,服务器)