超全Nginx配置详解|核心结构+常用指令实战说明(新手收藏)

21次阅读
没有评论

很多小伙伴刚接触Nginx时,面对密密麻麻的配置文件一脸懵,不知道每一行指令的作用、该改哪里、不同场景该怎么配置。

今天这篇博文,从零拆解Nginx配置文件整体结构核心高频指令实战配置案例,涵盖静态服务、反向代理、缓存优化、日志配置等常用场景,指令附带详细参数说明,看完直接上手配置、排查问题。

先划重点:Nginx配置文件核心由全局块、events块、http块、server块、location块五层结构组成,所有指令都各司其职,层级分明,不会乱生效。

一、Nginx配置整体层级结构

先看懂结构,再学指令,效率翻倍,完整层级如下:

# 1. 全局块:全局生效,控制Nginx整体运行
# 2. events块:控制网络连接相关配置
events {}
# 3. http块:HTTP服务核心配置,包含所有网站服务
http {
    # 全局HTTP配置(文件类型、日志、性能参数等)
    
    # 4. server块:单个站点/虚拟主机配置,一个http可包含多个server
    server {
        # 站点监听、域名、根目录配置
        
        # 5. location块:匹配请求路径,控制具体请求处理规则
        location / {}
    }
}

二、全局块核心指令(全局生效)

全局块指令作用于整个Nginx进程,无需嵌套其他块,优先级最高。

1. user 运行用户

指令作用:定义Nginx工作进程的运行用户/用户组,控制文件访问权限,保障服务安全。

语法:user 用户名 [用户组];

示例

user www-data;

说明:默认root,生产环境建议使用低权限用户,避免权限过高引发安全风险。

2. worker_processes 工作进程数

指令作用:设置Nginx工作进程数量,是性能优化核心参数。

语法:worker_processes 数字/auto;

示例

worker_processes auto;

说明:auto 自动匹配CPU核心数,单核CPU设1,多核设核心数,最大化利用服务器性能。

3. error_log 错误日志

指令作用:定义错误日志存储路径和日志级别,用于排查启动、运行报错。

语法:error_log 日志路径 日志级别;

日志级别(从低到高):debug、info、notice、warn、error、crit

示例

error_log /var/log/nginx/error.log error;

说明:只记录错误及严重级别日志,减少日志磁盘占用。

4. pid 进程文件

指令作用:指定Nginx进程PID文件存储路径,用于进程启停、管理。

示例

pid /run/nginx.pid;

三、events块核心指令(连接配置)

events块专属指令,控制Nginx客户端连接、并发参数,直接影响服务并发能力。

1. worker_connections 最大连接数

指令作用:单个工作进程支持的最大客户端连接数。

示例

events {
    worker_connections 1024;
}

说明:Nginx最大并发数 = 工作进程数 × 单进程连接数,默认1024,高并发场景可适当调大。

2. use epoll 事件模型

指令作用:指定Linux高效事件驱动模型,提升并发处理效率。

示例

use epoll;

说明:Linux系统默认推荐,Windows使用select,无需手动修改。

四、http块核心指令(全局HTTP服务)

http块是Nginx网页服务核心,所有站点通用配置写在此处,全局生效。

1. include 引入配置文件

指令作用:导入外部配置文件,实现配置拆分、统一管理。

示例

include /etc/nginx/mime.types;
include /etc/nginx/conf.d/*.conf;

说明:mime.types 定义文件MIME类型,解决网页资源解析异常;conf.d 目录可存放多个站点配置,解耦配置。

2. default_type 默认文件类型

指令作用:设置无法识别文件的默认MIME类型。

示例

default_type application/octet-stream;

说明:默认二进制流,浏览器无法识别时自动触发下载。

3. sendfile 高效文件传输

指令作用:开启Linux sendfile机制,减少系统调用,提升静态文件传输速度。

示例

sendfile on;
# 开启tcp高效推送
tcp_nopush on;

说明:静态资源服务必开,大幅优化图片、JS、CSS加载速度。

4. keepalive_timeout 长连接超时

指令作用:设置客户端长连接保持时间,减少重复建立连接开销。

示例

keepalive_timeout 65s;

说明:65秒内同一客户端重复请求无需重新握手,提升访问速度。

5. access_log 访问日志

指令作用:记录所有客户端访问请求,用于流量统计、接口排查。

示例

access_log /var/log/nginx/access.log main;

五、server块核心指令(单站点配置)

一个server块对应一个虚拟站点,可通过多server实现多域名、多站点共存。

1. listen 监听端口

指令作用:设置站点监听的端口号,支持IP+端口、纯端口配置。

语法:listen 端口; / listen IP:端口;

示例

listen 80;
listen 443 ssl; # HTTPS端口

2. server_name 绑定域名

指令作用:绑定站点域名,支持单域名、多域名、泛域名。

示例

server_name www.xxx.com xxx.com;
server_name *.xxx.com; # 泛域名

说明:域名和端口匹配成功后,当前server块生效。

3. root 站点根目录

指令作用:指定网站静态资源、文件的根存储路径。

示例

root /usr/share/nginx/html;

4. index 默认首页

指令作用:设置访问站点默认加载的首页文件,按顺序匹配。

示例

index index.html index.htm index.php;

说明:优先加载index.html,不存在则加载index.htm,依次类推。

六、location块核心指令(请求匹配规则)

location是最常用、最重要的配置块,用于匹配客户端请求路径,实现反向代理、静态缓存、路由跳转等核心功能。

1. 匹配规则优先级

精准匹配 > 正则匹配 > 前缀匹配 > 通用匹配(/)

  • =:精准匹配
  • ~:区分大小写正则匹配
  • ~*:不区分大小写正则匹配
  • ^~:前缀优先匹配
  • /:默认通用匹配

2. proxy_pass 反向代理核心指令

指令作用:将客户端请求转发至后端服务(Tomcat、Node、SpringBoot等),是反向代理、负载均衡核心。

示例

location /api/ {
    proxy_pass http://127.0.0.1:8080/; # 转发至后端8080服务
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr; # 传递真实客户端IP
}

3. expires 静态资源缓存

指令作用:设置客户端浏览器缓存过期时间,减少重复请求,提升访问速度。

示例

# 图片、视频、静态文件缓存30天
location ~* \.(jpg|png|css|js|mp4|ico)$ {
    expires 30d;
    add_header Cache-Control public; # 允许公共缓存
    access_log off; # 关闭静态资源日志,减少IO压力
}

4. return 重定向跳转

指令作用:实现URL重定向、跳转,支持301永久重定向、302临时重定向。

示例

# 所有HTTP请求跳转HTTPS
location / {
    return 301 https://$host$request_uri;
}

5. deny/allow 访问权限控制

指令作用:黑白名单控制,禁止/允许指定IP访问。

示例

# 禁止所有IP访问后台路径
location /admin/ {
    deny all;
}

七、高频拓展指令(缓存、负载、HTTPS)

1. 代理缓存指令

用于缓存后端接口响应数据,减轻后端服务压力:

http {
    # 定义缓存目录、大小、过期时间
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m;
    
    server {
        location /api/ {
            proxy_cache my_cache; # 启用缓存
            proxy_cache_valid 200 304 2m; # 200/304状态码缓存2分钟
            proxy_cache_valid 404 1m; # 404页面缓存1分钟
        }
    }
}

2. HTTPS核心指令

用于配置网站SSL证书,实现HTTPS访问:

server {
    listen 443 ssl;
    server_name www.xxx.com;
    # 证书路径
    ssl_certificate /etc/nginx/ssl/xxx.pem;
    ssl_certificate_key /etc/nginx/ssl/xxx.key;
    ssl_protocols TLS1.2 TLS1.3; # 启用安全协议
}

八、Nginx配置常用命令

配置修改后必用命令,避免配置报错、服务异常:

# 检查配置文件语法是否正确
nginx -t

# 平滑重启(不中断服务,生效新配置)
nginx -s reload

# 停止服务
nginx -s stop

# 查看Nginx运行状态
systemctl status nginx

九、总结

1. Nginx配置遵循层级生效原则:全局→events→http→server→location,下级可覆盖上级配置;

2. 核心高频场景:静态资源托管、反向代理、端口监听、域名绑定、缓存优化、重定向跳转,掌握以上指令可覆盖90%日常开发需求;

3. 所有配置修改后,务必先 nginx -t 校验语法,再平滑重启,避免线上服务中断。

后续会持续更新Nginx负载均衡、防盗链、限流、高并发优化配置,需要的小伙伴可以收藏关注!

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)
验证码