手把手教你配置Nginx:从入门到精通的完整指南

  • 时间:2025-11-11 17:17 作者: 来源: 阅读:0
  • 扫一扫,手机访问
摘要:这是一份详细的 Nginx 配置说明教程,从基础概念到核心配置,再到实用场景,旨在协助您系统性地掌握 Nginx 配置。Nginx 配置全解析:从入门到精通Nginx 以其高性能、高稳定性和低资源消耗而闻名,是现代 Web 架构的基石。理解其配置是有效使用 Nginx 的关键。一、 核心概念与配置文件结构1. 配置文件位置主配置文件:一般位于 /etc/nginx/nginx.conf子配置文件:

这是一份详细的 Nginx 配置说明教程,从基础概念到核心配置,再到实用场景,旨在协助您系统性地掌握 Nginx 配置。


Nginx 配置全解析:从入门到精通

Nginx 以其高性能、高稳定性和低资源消耗而闻名,是现代 Web 架构的基石。理解其配置是有效使用 Nginx 的关键。

一、 核心概念与配置文件结构

1. 配置文件位置

  • 主配置文件:一般位于 /etc/nginx/nginx.conf
  • 子配置文件:主配置文件可以通过 include 指令引入其他配置,一般站点配置放在 /etc/nginx/conf.d/ 或 /etc/nginx/sites-enabled/ 目录下。

2. 配置文件结构
Nginx 配置文件由 指令上下文块 组成,层次分明。

# 全局上下文 (Main Context)
# 设置影响Nginx全局的指令,如工作进程数、用户、日志等。
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# events上下文
# 设置影响Nginx与客户端网络连接的参数。
events {
    worker_connections 1024; # 每个工作进程的最大连接数
    use epoll; # 使用高效的事件模型(Linux)
}

# http上下文
# 所有HTTP相关的配置都嵌套在此上下文中。
http {
    # 引入MIME类型定义
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    # 日志格式定义
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

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

    # 服务器上下文 (Server Context)
    # 定义一个虚拟主机(Virtual Host),监听特定的端口和域名。
    server {
        listen 80; # 监听80端口
        server_name example.com www.example.com; # 监听的域名

        # 位置上下文 (Location Context)
        # 根据请求的URI来匹配和处理请求。
        location / {
            root /usr/share/nginx/html; # 网站根目录
            index index.html index.htm; # 默认索引文件
        }

        location /images/ {
            # 匹配以 /images/ 开头的请求
            root /data;
            # 最终文件路径为:/data/images/<请求的文件>
        }
    }

    # 可以定义多个server块来托管多个网站
    server {
        listen 80;
        server_name another-site.com;
        # ... 另一个站点的配置
    }
}

3. 配置文件的继承与优先级

  • 子上下文会继承父上下文的配置。
  • 如果子上下文有与父上下文一样的指令,子上下文的指令会覆盖父上下文的设置。
  • 优先级:location 块 > server 块 > http 块。

二、 核心配置指令详解

1. 静态文件服务
这是 Nginx 最基本也是最常用的功能。

server {
    listen 80;
    server_name example.com;

    location / {
        root /var/www/html; # 根目录
        index index.html;    # 默认首页
        # 开启高效文件传输
        sendfile on;
        # 防止大文件阻塞sendfile
        tcp_nopush on;
    }

    # 为静态资源(如图片、CSS、JS)设置缓存,提升性能
    location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
        root /var/www/html;
        expires 30d; # 设置浏览器缓存过期时间为30天
        add_header Cache-Control "public, immutable";
    }
}

2. 反向代理
将客户端的请求转发到后端的应用服务器(如 Tomcat, Node.js, Gunicorn 等)。

server {
    listen 80;
    server_name myapp.com;

    location / {
        # 核心代理指令:将请求传递给后端服务器组 ‘backend_server’
        proxy_pass http://backend_server;

        # 以下指令确保后端服务器能获取到客户端的真实信息
        proxy_set_header Host $host; # 传递原始域名
        proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递代理IP链
        proxy_set_header X-Forwarded-Proto $scheme; # 传递原始协议(http/https)

        # 超时设置
        proxy_connect_timeout 30s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }
}

# 定义上游服务器组,支持负载均衡
upstream backend_server {
    # 负载均衡算法,默认为轮询 (round-robin)
    # 其他算法:least_conn(最少连接)、ip_hash(IP哈希,用于会话保持)
    # ip_hash;

    server 192.168.1.100:8080 weight=3; # weight表明权重,值越大分配请求越多
    server 192.168.1.101:8080;
    server 192.168.1.102:8080 down; # 标记为下线,不参与负载
    server 192.168.1.103:8080 backup; # 备份服务器,只有当其他服务器都不可用时才启用
}

3. 负载均衡
如上例中的 upstream 模块,Nginx 支持多种负载均衡算法,轻松实现应用的水平扩展。

4. HTTPS/SSL 配置
使用 SSL 证书加密网站流量。

server {
    listen 443 ssl http2; # 监听443端口,启用SSL和HTTP/2
    server_name example.com;

    # SSL证书路径
    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    # SSL安全配置
    ssl_protocols TLSv1.2 TLSv1.3; # 启用安全的协议版本
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers on;

    # 启用HSTS,强制浏览器使用HTTPS
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

    location / {
        proxy_pass http://backend_server;
        # ... 其他代理设置
    }
}

# 强制将HTTP请求重定向到HTTPS
server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri; # 301永久重定向
}

三、 常用场景配置片段

1. 路径重写(Rewrite)
常用于伪静态、URL 美化或框架路由。

location /api/ {
    # 将 /api/users 重写为 /users?api=true
    rewrite ^/api/(.*)$ /$1?api=true break;
    proxy_pass http://backend_server;
}

# 单页应用(如Vue, React)路由配置
location / {
    try_files $uri $uri/ /index.html; # 尝试按顺序寻找文件,若都找不到则返回index.html
}

2. 访问控制
限制特定 IP 的访问。

location /admin/ {
    deny 192.168.1.5; # 拒绝单个IP
    allow 192.168.1.0/24; # 允许一个网段
    deny all; # 拒绝所有其他IP
    # ... 其他配置
}

3. 启用 Gzip 压缩
减少传输数据量,提升加载速度。

http {
    gzip on;
    gzip_vary on;
    gzip_min_length 1024; # 只压缩大于1KB的文件
    gzip_types
        text/plain
        text/css
        text/xml
        text/javascript
        application/javascript
        application/json
        image/svg+xml;
}

4. 限制请求速率
防止恶意攻击或流量滥用。

# 在http块中定义限流zone
http {
    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
}

server {
    location /api/ {
        limit_req zone=api_limit burst=20 nodelay; # 速率限制:10req/s,突发队列20
        proxy_pass http://backend_server;
    }
}

四、 配置检查与常用命令

1.检查配置语法是否正确极其重大!

sudo nginx -t
输出 syntax is ok 和 test is successful 表明配置正确。

2.重新加载配置(不中断服务)

sudo nginx -s reload

3.停止 Nginx

sudo nginx -s stop # 快速停止
sudo nginx -s quit # 优雅停止(处理完当前请求)

4.查看 Nginx 版本和编译信息

nginx -V

五、 最佳实践与总结

  • 最小权限原则:使用非 root 用户(如 www-data, nginx)运行 Nginx 工作进程。
  • 日志管理:定期轮询(rotate)日志文件,避免磁盘被撑满。可使用 logrotate 工具。
  • 保持更新:及时升级 Nginx 版本以获取安全补丁和新功能。
  • 测试先行:每次修改配置后,务必先执行 nginx -t 进行测试,然后再重载。

核心思想:Nginx 配置是一个由外到内、由全局到局部的匹配过程。理解 http -> server -> location 的层次关系,是灵活配置的钥匙。从简单的静态服务器到复杂的反向代理和负载均衡网关,Nginx 都能通过清晰的配置文件胜任。

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】最低 2 美元,这 55 款 macOS & Windows 应用一次全都入手(2025-11-11 22:01)
【系统环境|】SCI期刊对论文图片有哪些要求?(2025-11-11 22:00)
【系统环境|】论文缩写大全,拿走不谢(2025-11-11 22:00)
【系统环境|】阿甘正传高频词整理 GRE托福四六级词汇整理(2025-11-11 21:59)
【系统环境|】矢量图形编辑应用程序-WinFIG(2025-11-11 21:59)
【系统环境|】Figma上市首日暴涨250%的深层逻辑:为什么AI时代协作平台更加不可替代?(2025-11-11 21:58)
【系统环境|】FigJam是什么?一文读懂在线白板软件的方方面面!(2025-11-11 21:58)
【系统环境|】在windows上有什么好用的书写白板软件?(2025-11-11 21:57)
【系统环境|】Docker基础应用之nginx(2025-11-11 21:57)
【系统环境|】VS Code 新手必装插件清单(2025-11-11 21:56)
手机二维码手机访问领取大礼包
返回顶部