Administrator
发布于 2024-11-26 / 3 阅读
0
0

nginx配置详解

NGINX 是一个高性能的 HTTP 和反向代理服务器,它的配置文件非常灵活,支持多种模块和功能。以下是对 NGINX 配置的详解,包括配置文件结构、常见指令以及实际案例。

1. 配置文件结构

NGINX 的默认配置文件路径通常是 /etc/nginx/nginx.conf 或 /usr/local/nginx/conf/nginx.conf。它的基本结构如下:

  # 全局块:定义全局变量和影响整个服务器的配置
  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;  # 每个进程允许的最大连接数
  }
  
  http {
      include       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;
  
      sendfile        on;    # 启用高效传输文件机制
      keepalive_timeout  65; # 保持连接超时时间
  
      # 虚拟主机配置
      server {
          listen       80;              # 监听端口
          server_name  example.com;     # 域名
  
          location / {
              root   /usr/share/nginx/html; # 根目录
              index  index.html index.htm;  # 默认首页
          }
  
          error_page  404 /404.html;  # 自定义 404 错误页面
      }
  }
  

2. 配置块类型

  • 全局块

    • 定义全局配置,例如用户权限、日志路径、进程数量等。

  • events 块

    • 配置与网络连接相关的参数,例如每个工作进程的最大连接数、使用的事件模型(epoll、kqueue)。

  • http 块

    • 包含 HTTP 协议相关的配置,支持多个 server 块。

  • server 块

    • 定义一个虚拟主机,包含域名、监听端口、错误页面等。

  • location 块

    • 配置 URI 路径的匹配规则及处理方式,例如静态文件服务、代理请求。

3. 常见指令详解

全局指令

  • user:指定运行 NGINX 的用户。

  • worker_processes:工作进程数,建议根据 CPU 核心数配置。

  • error_log:错误日志路径和日志级别(debuginfonoticewarnerrorcrit)。

events 模块指令

  • worker_connections:每个工作进程的最大连接数。

  • multi_accept:是否同时接受多个连接。

http 模块指令

  • include:引入其他配置文件。

  • server_tokens:是否在 HTTP 头部中显示 NGINX 版本号(建议关闭,增强安全性)。

  • sendfile:启用高效文件传输。

  • keepalive_timeout:长连接超时时间。

  • gzip:开启 Gzip 压缩。

server 模块指令

  • listen:指定监听的 IP 和端口。

  • server_name:定义虚拟主机的域名。

  • root:设置根目录。

  • index:指定默认首页文件。

location 模块指令

  • location:定义 URL 路径的匹配规则。

    • =:精确匹配。

    • ^~:前缀匹配,不再进行正则匹配。

    • ~:区分大小写的正则匹配。

    • ~*:不区分大小写的正则匹配。

    • /:通用匹配。

  • proxy_pass:反向代理到上游服务器。

  • rewrite:URL 重写。

  • try_files:按照顺序尝试文件是否存在。

4. 实际案例

反向代理

server {
    listen 80;
    server_name www.example.com;

    location / {
        proxy_pass http://127.0.0.1:8080;  # 转发到后端服务
        proxy_hide_header X-Powered-By;  # 隐藏服务器信息头
        proxy_hide_header X-AspNet-Version;  # 隐藏服务器信息头
        proxy_hide_header X-Runtime;  # 隐藏服务器信息头
        proxy_hide_header Server;  # 隐藏服务器信息头
        proxy_set_header Host $host;      # 设置 Host 头
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

负载均衡

upstream backend {
    server 192.168.0.101;
    server 192.168.0.102;
}

server {
    listen 80;
    server_name www.example.com;

    location / {
        proxy_pass http://backend;
    }
}

静态文件服务

server {
    listen 80;
    server_name static.example.com;

    location / {
        root /data/static;   # 文件存放路径
        index index.html;
    }

    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;          # 设置缓存时间
        access_log off;       # 关闭日志记录
    }
}

HTTPS 配置

server {
    listen 443 ssl;
    server_name www.example.com;

    ssl_certificate     /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    location / {
        root /usr/share/nginx/html;
        index index.html;
    }
}

5. 调试与优化

测试配置文件语法:

nginx -t

重新加载配置:

nginx -s reload

优化建议:

  • 使用 gzip 压缩传输内容。

  • 结合 cache-control 和 expires 优化静态文件缓存。

  • 调整 worker_processes 和 worker_connections

  • 利用负载均衡分担流量。


评论