Nginx记录

配置文件

nginx.conf为Nginx服务器的核心配置文件。Nginx会根据配置文件中指定的配置项启动,默认配置文件为/usr/local/etc/nginx/nginx.conf。用户也可以自定义配置项,使用-c参数指定配置文件。

# 指定Nginx进程运行的用户
user nginx;
# Nginx工作的进程数量,默认自动配置,可配置成CPU数
worker_processes auto;
# Nginx的错误日志位置
error_log /var/log/nginx/error.log;
# Nginx进程运行后的进程id文件
pid /run/nginx.pid;
# 包含模块文件;*.conf表示所有以.conf结尾的文件
include /usr/share/nginx/modules/*.conf;

events {        # events块开始
# 一个worker进程的最大连接数
	worker_connections 1024;
}               # events块结束

http { 		# http块开始
	# Nginx日志格式
	log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
	'$status $body_bytes_sent "$http_referer" '
	'"$http_user_agent" "$http_x_forwarded_for"';
	# Nginx access_log日志文件位置
	access_log  /var/log/nginx/access.log  main;
	# 设置允许以sendfile方式传输文件
	sendfile            on;
	# 防止网络阻塞
	tcp_nopush          on;
	# 在TCP协议中,使用Nagle算法,把小包组成大包提高带宽利用率
	tcp_nodelay         on;
	# 服务端对连接保持的时间,默认是65秒
	keepalive_timeout   65;
	# 设置size类型哈希表的最大值
	types_hash_max_size 2048;
	# 包含资源类型文件
	include             /etc/nginx/mime.types;
	# 定义响应的默认MIME类型
	default_type        application/octet-stream;
	# 引入其他的配置文件,文件名必须以.conf结尾
	include /etc/nginx/conf.d/*.conf;
	server {
		# 监听的端口号,写法一
		listen		80 default_server;
		# 监听的端口号,写法二
		listen		[::]:80 default_server;
		# 对外提供的虚拟主机名称,可以理解为域名;_表示无效域名之一,也可以使用"--"和"!@#"
		server_name  _;
		# 请求的根目录位置
		root         /usr/share/nginx/html;
		# 注释信息
		# 引入其他的配置文件,文件名必须以.conf结尾
		include /etc/nginx/default.d/*.conf;
		location / {
		}
		# 定义将为指定错误显示的URI,返回状态码为404。一个URI值可以包含变量
		error_page 404 /404.html;
		location = /40XX.html {
		}
		# 定义将为指定错误显示的URI,返回状态码为500或者502、503、504。一个URI值可以包含变量
		error_page 500 502 503 504 /50x.html;
		location = /50x.html;    # location块开始,精准匹配uri
		} # location块结束
	} # server块结束
	# server块开始
	server { # 监听端口,ssl表示允许此端口接收的所有连接在SSL模式下工作,http2表示配置端口接收HTTP2连接
		listen       443 ssl http2 default_server;
		# 监听端口的另一种写法
		listen       [::]:443 ssl http2 default_server;
		# 对外提供的虚拟主机名称,可以理解为域名;_表示无效域名之一,也可以使用"--"和"!@#"
		server_name  _;
		# 请求的根目录位置
		root         /usr/share/nginx/html;
		# 指定带有PEM格式证书的文件位置
		ssl_certificate "/etc/pki/nginx/server.crt";
		# 指定带有PEM格式的密钥文件位置
		ssl_certificate_key "/etc/pki/nginx/private/server.key";
		# 设置存储会话参数缓存的类型和大小。Shared表示所有工作进程之间共享的缓存
		ssl_session_cache shared:SSL:1m;
		# 指定客户端可以重用会话参数的时间
		ssl_session_timeout  10m;
		# 返回客户端支持的密码列表
		ssl_ciphers HIGH:!aNULL:!MD5;
		ssl_prefer_server_ciphers on;
		# 引入其他配置文件,文件名必须以.conf结尾
		include /etc/nginx/default.d/*.conf;
		# location块开始
		location / {
		}	# location块结束
		# 定义将为指定错误显示的URI
		error_page 404 /404.html;
		# location块开始,精准匹配URI
		location = /40XX.html {
		} # location块结束
		# 定义将为指定错误显示的URI
		error_page 500 502 503 504 /50x.html;
		# location块开始,精准匹配URI
		location = /50x.html {
		} # location块结束
	} # server块结束
}

依赖库

PCRE和OpenSSL为Nginx默认依赖的库。除此之外,Nginx中还可以添加Zlib库,实现压缩功能。

1.PCRE库

PCRE(Perl Compatible Regular Expression)库是一组函数,这些函数使用与Perl 5相同的语法和语义来实现正则表达式模式匹配。在Nginx中,PCRE库与location块结合得比较紧密,可以用来匹配大量静态资源、配置防盗链、禁止爬虫等。

2. OpenSSL库

OpenSSL整个软件包大概可以分成三个部分:SSL协议库、应用程序以及密码算法库。作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥、证书封装管理功能以及SSL协议,并提供了丰富的应用程序。在Nginx中,其对应的模块为ngx_http_ssl_module和ngx_mail_ssl_module。常见的使用方式是基于ngx_http_ssl_module模块实现对站点的访问,示例如下。

server {
...
	ssl_certificate      cert.pem;
	ssl_certificate_key  cert.key;
	ssl_session_cache    shared:SSL:1m;
	ssl_session_timeout  5m;
	ssl_ciphers  HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers  on;
...
}

该配置示例基于ngx_http_ssl_module模块指定了cert.pem与cert.key的文件位置。ssl_ciphers用来选择加密套件。它们必须是OpenSSL能够识别的。且多个加密套件之间使用“!”分隔。“!”表示从算法列表中删除指定加密算法,如!MD5表示排除MD5算法。

3. Zlib库

Zlib是通用的压缩库,由Jean-loup Gailly和Mark Adler开发。其提供了一套完整的压缩和解压缩函数,并可以检测解压后的数据的完整性。Zlib同时支持读写gzip(.gz)格式的文件。在Nginx中,ngx_http_gzip_module和ngx_http_gzip_static_module模块使用到了Zlib库。它主要用于对http包内的内容或静态文件进行压缩,减少网络传输量。gzip on指令能直接开启压缩模式。

http {
...
	gzip  on;
	gzip_comp_level 5;
	gzip_min_length 20k;
...
}

该配置示例基于ngx_http_gzip_module模块开启了gzip压缩模式,并设置压缩的级别为5,原始文件小于20KB时不执行压缩操作。

posted @ 2024-10-16 11:48  Jikefan  阅读(26)  评论(0)    收藏  举报