前几天新入职应届生实习,处理线上旧域名更换新域名,更新nginx配置文件之后,新域名成功启用,但旧域名一直也可以访问,只是https访问报不安全,证书倒是换掉了,但老域名一直可以访问。问至此处,遂发现,对应的nginx.conf有80端口兜底server模块,依旧将未匹配请求转发至后端服务。
写篇nginx配置文件详解,以作记录。
Nginx 配置详解与示例
一、Nginx 配置文件结构
Nginx 的配置文件(nginx.conf)大致分为三层:
全局块:配置运行 Nginx 的用户、worker 进程数量、pid 文件位置、日志等。
events 块:定义与网络连接相关的参数,例如每个 worker 支持的最大连接数。
http 块:主要逻辑部分,包含日志、MIME 类型、压缩、反向代理、负载均衡等配置。http 内部可以包含多个 server 块。
二、常见字段与含义
基础指令
user:指定运行 Nginx worker 的系统用户。
worker_processes:工作进程数,通常设为 CPU 核心数或 auto。
error_log:错误日志文件路径。
pid:存储 Nginx 主进程 ID 的文件。
events 块
worker_connections:单个 worker 支持的最大并发连接数。
http 块
access_log:访问日志文件路径和日志格式。
log_format:自定义日志格式。
sendfile on; 启用高效的文件传输方式。
tcp_nopush on; 尽量减少网络报文数量,提高传输效率。
keepalive_timeout 65; HTTP 长连接超时时间。
include /etc/nginx/mime.types; 加载 MIME 类型映射表。
default_type application/octet-stream; 默认 MIME 类型。
proxy_pass:将请求转发到后端服务。
proxy_set_header:设置转发时带给后端的请求头。常用:
Host $host
X-Real-IP $remote_addr
X-Forwarded-For $proxy_add_x_forwarded_for
X-Forwarded-Proto $scheme
Nginx 可以将请求分发到多个后端服务,实现负载均衡。
示例:
upstream backend {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
默认策略是轮询(round-robin),也支持 weight、ip_hash 等。
ssl_certificate:证书文件。
ssl_certificate_key:私钥文件。
ssl_protocols TLSv1.2 TLSv1.3; 启用的 TLS 版本。
ssl_ciphers:指定加密算法。
三、Server 块配置
一个 server 块对应一个虚拟主机,可以按端口、域名来区分。
listen 80; 监听 HTTP 80 端口。
listen 443 ssl http2; 监听 HTTPS 443 端口,并启用 HTTP/2。
server_name:定义域名匹配规则。