Nginx 基础配置教程

Ubanillx 发布于 13 天前 22 次阅读


一、Nginx 配置文件结构概述

Nginx 的核心配置文件通常位于 /etc/nginx/nginx.conf/usr/local/nginx/conf/nginx.conf,其配置结构主要分为以下三个核心块:

1. 全局块(main)

  • 作用:影响 Nginx 整体运行的全局参数,如用户权限、进程管理、日志路径等。
  • 关键配置项
    • user:指定运行 Nginx 的用户(默认 nginx)。
    • worker_processes:设置工作进程数,建议设为 auto 自动匹配 CPU 核心数。
    • error_log:错误日志路径及日志级别(如 warnerror)。
    • pid:进程 PID 文件位置,用于标识 Nginx 主进程。

2. events 块

  • 作用:配置网络连接相关参数,优化 Nginx 的事件处理模型。
  • 关键配置项
    • worker_connections:每个工作进程的最大连接数(默认 1024)。
    • use:指定事件驱动模型,Linux 系统推荐使用 epoll(高效的 I/O 多路复用模型)。

3. http 块

  • 作用:定义 HTTP 服务器的具体行为,如虚拟主机、反向代理、静态资源服务等。
  • 子模块:包含多个 server 块(虚拟主机配置),每个 server 块可独立配置域名、端口、路由等。

二、全局配置与 events 块示例

 user nginx;                     # 运行 Nginx 的用户
 worker_processes auto;          # 自动匹配 CPU 核心数
 error_log /var/log/nginx/error.log warn;  # 错误日志路径及级别
 pid /var/run/nginx.pid;         # 进程 PID 文件位置
 ​
 events {
     worker_connections 1024;    # 每个 worker 进程的最大连接数
     use epoll;                  # 使用 epoll 事件模型(Linux 系统)
 }

三、静态文件服务配置

Nginx 擅长高效托管静态资源(如 HTML、CSS、JS、图片等),以下是基础配置示例:

1. 基础静态服务器

 http {
     server {
         listen 80;              # 监听 80 端口
         server_name example.com; # 绑定域名或 IP
 ​
         location / {
             root /var/www/html;  # 静态文件根目录
             index index.html;    # 默认首页文件
         }
 ​
         # 单独配置图片缓存(jpg/png/gif 格式)
         location ~* \.(jpg|png|gif)$ {
             root /var/www/images;  # 图片独立存储路径
             expires 30d;         # 客户端缓存 30 天(减少重复请求)
         }
     }
 }

2. 关键指令说明

  • root:指定静态文件在服务器上的物理路径。
  • index:定义访问目录时的默认文件(如 index.html)。
  • expires:通过设置 HTTP 响应头 Cache-Control,控制浏览器缓存静态资源的时间,减少服务器压力。

四、反向代理与负载均衡配置

1. 基本反向代理

将请求转发到后端服务器(如 Tomcat、Node.js 应用等):

 server {
     listen 80;
     server_name api.example.com; # 反向代理域名
 ​
     location / {
         proxy_pass http://127.0.0.1:8080;  # 转发到本地 8080 端口的后端服务
         proxy_set_header Host $host;       # 传递原始 Host 头(让后端识别请求域名)
         proxy_set_header X-Real-IP $remote_addr;  # 传递客户端真实 IP
     }
 }

2. 负载均衡(多后端服务器)

通过 upstream 定义服务器组,实现请求分发:

 http {
     upstream backend {
         server 192.168.1.100:8080 weight=3;  # 权重 3(处理更多请求)
         server 192.168.1.101:8080;           # 默认权重 1
         server 192.168.1.102:8080 backup;    # 备用服务器(仅主服务器故障时启用)
     }
 ​
     server {
         listen 80;
         server_name app.example.com;
 ​
         location / {
             proxy_pass http://backend;        # 代理到 upstream 定义的服务器组
             proxy_next_upstream error timeout http_500;  # 故障转移策略(错误/超时/500 错误时切换服务器)
         }
     }
 }

五、HTTPS 安全配置(SSL/TLS)

1. 基本 HTTPS 站点配置

 server {
     listen 443 ssl;                    # 监听 443 端口并启用 SSL
     server_name example.com;
 ​
     # SSL 证书路径(需提前通过 Let's Encrypt 等方式获取)
     ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
     ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
 ​
     # 优化 SSL 性能与安全性
     ssl_protocols TLSv1.2 TLSv1.3;     # 启用安全的 TLS 协议版本
     ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;  # 加密算法套件
     ssl_prefer_server_ciphers on;      # 优先使用服务器端加密算法
     ssl_session_cache shared:SSL:10m;   # SSL 会话缓存(减少重复握手)
     ssl_session_timeout 10m;            # 会话缓存超时时间
 ​
     location / {
         root /var/www/html;
         index index.html;
     }
 }
 ​
 # 强制 HTTP 跳转 HTTPS
 server {
     listen 80;
     server_name example.com;
     return 301 https://$host$request_uri;  # 301 永久重定向
 }

六、缓存优化(代理缓存)

通过缓存动态内容减少后端压力:

 http {
     # 定义缓存路径、层级结构、缓存区名称及大小
     proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
 ​
     server {
         listen 80;
         server_name cache.example.com;
 ​
         location / {
             proxy_pass http://backend;        # 代理到后端服务
             proxy_cache my_cache;            # 启用名为 my_cache 的缓存区
             proxy_cache_valid 200 302 10m;   # 缓存 200/302 状态码的响应 10 分钟
             proxy_cache_valid 404 1m;        # 缓存 404 响应 1 分钟
             proxy_cache_key "$scheme$host$request_uri";  # 缓存键(基于协议、域名、URI 生成)
         }
     }
 }

七、日志与访问控制

1. 访问日志配置

 http {
     # 定义日志格式(包含客户端 IP、时间、请求方法、状态码等)
     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;  # 日志文件路径及格式
 }

2. IP 访问限制(示例:仅允许特定 IP 访问 /admin 路径)

 location /admin {
     allow 192.168.1.100;  # 允许访问的 IP
     deny all;             # 拒绝其他所有 IP
 }

3. 限流配置(限制 API 接口请求频率)

 http {
     # 定义限流区域(基于客户端 IP,每秒允许 10 个请求)
     limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
 ​
     server {
         location /api {
             limit_req zone=req_limit burst=20 nodelay;  # 允许突发 20 个请求(平滑处理峰值)
             proxy_pass http://backend;
         }
     }
 }

八、配置生效与常用命令

  1. 测试配置文件语法:  nginx -t
  2. 重新加载配置(无需重启服务):  nginx -s reload
  3. 启动/停止服务:  systemctl start nginx  # 启动
     systemctl stop nginx   # 停止

九、扩展学习建议

  • 官方文档:Nginx 官方文档提供了完整的指令说明和高级功能指南(如 Lua 脚本、动态模块)。
  • 实战场景:结合具体业务需求,尝试配置动静分离、API 网关、高可用负载均衡等复杂场景。
此作者没有提供个人介绍
最后更新于 2025-06-09