基于软链接的 nginx 管理 server 模块
这份笔记围绕 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 基础配置信息:
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
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
ln -sf /etc/nginx/sites-available/* /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
直接就分模块完成了。
评论
还没有评论,来发第一个吧