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时不执行压缩操作。

浙公网安备 33010602011771号