服务器与部署

基于软链接的 nginx 管理 server 模块

JACIN6 分钟阅读
AI 摘要

这份笔记围绕 Nginx 多站点配置的模块化管理展开,核心做法是用软链接把“已编写的配置”和“当前生效的配置”分离。正文将 /etc/nginx/sites-available/ 定位为配置仓库,用来保存所有 server 文件、草稿、备份或暂时下线的网站;将 /etc/nginx/sites-enabled/ 作为实际加载目录,只放指向仓库文件的软链接,并通过 nginx.conf 在 http 段 include 该目录来决定哪些站点生效。文章给出了一份基础 nginx.conf 示例,包含事件连接数、日志、gzip、Keep-Alive、SSL 全局参数,以及同时加载 conf.d 和 sites-enabled 的关键配置。随后以一个 HTTPS 探针站点为例,展示 server 块如何配置证书、server_name、反向代理到 localhost:25774,并补充真实 IP、转发协议、WebSocket Upgrade、关闭代理缓冲和 50M 上传限制等常见代理设置。启用流程则被简化为脚本:使用 ln -sf 将 sites-available 下的配置批量链接到 sites-enabled,再执行 nginx -t 校验,通过后 reload 服务。它适合小型服务器或个人多站点环境,用较低成本实现站点配置的归档、迁移、批量启用和下线控制;需要注意的是,真正被 Nginx 读取的是 include 的 enabled 目录,单独把文件放进 available 并不会生效。

核心逻辑是利用 ln -s(软链接)来控制配置文件的“生效”与“失效”。

  • /etc/nginx/sites-available/ = 仓库(库存)
    • 这里存放你写好的所有配置文件。
    • 特点:放在这里的文件不会生效,Nginx 不会去读取它。
    • 作用:存档、备份、草稿、暂时下线的网站。
  • /etc/nginx/sites-enabled/ = 货架(展示位)
    • 这里只存放指向 sites-available软链接
    • 特点:Nginx 的主配置文件 (nginx.conf) 只会 include 这个目录下的文件。
    • 作用:决定当前哪些网站是“活着”的。

nginx.conf 基础配置信息:

text
user root;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 1024;
}

http {
    # ===== 基础设置 =====
    sendfile on;
    tcp_nopush on;
    types_hash_max_size 2048;
    server_tokens off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    # ===== 日志设置 =====
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    # ===== Gzip 压缩 =====
    gzip on;
    gzip_types text/plain text/css application/javascript application/json application/xml application/rss+xml image/svg+xml;

    # ===== Keep-Alive 设置 =====
    keepalive_timeout 300s;
    keepalive_requests 1000;

    # ===== SSL 全局优化 (所有站点共用) =====
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:50m;
    ssl_session_timeout 1h;
    ssl_session_tickets on;

    # ===== 关键:引入其他配置文件 =====
    # 这里会加载 sites-enabled 目录下的所有文件
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

然后在 /etc/nginx/sites-available 编写对应的信息 一个 server 模块可以直接一个模块内容,这样也非常好迁移。 以探针为例:vim komari

text
server {
    listen 443 ssl http2;
    server_name net.jacin.me;
    ssl_certificate     /root/fast-proxy/ssl/origin.crt;
    ssl_certificate_key /root/fast-proxy/ssl/origin.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;
    location / {
        proxy_pass http://localhost:25774;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";

        # 禁用代理缓冲
        proxy_buffering off;

        # 允许大文件上传(50M)
        client_max_body_size 50M;
    }
}

写完后,可以在 nginx.conf 同目录下: vim up.sh

text
ln -sf /etc/nginx/sites-available/* /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

直接就分模块完成了。

评论

还没有评论,来发第一个吧