Nginx 是一款高性能 Web 服务器和反向代理工具,非常适合搭建多实例服务,统一管理外部访问端口与权限。本文记录完整的安装、配置 SSL/Basic Auth、实例化端口转发以及日志调试全流程,希望对需要集中运维或微服务网关的同学有所助益。
一、安装 Nginx 及相关工具
1 2
| sudo apt update sudo apt install nginx
|
安装 SSL 证书工具(Certbot)和生成自签名证书
1 2 3 4 5 6 7 8 9
| sudo apt install certbot python3-certbot-nginx sudo mkdir -p /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/nginx/ssl/10.10.90.60.key \ -out /etc/nginx/ssl/10.10.90.60.crt \ -subj "/CN=10.10.90.60" \ -addext "subjectAltName=IP:10.10.90.60"
|
二、HTTPS 加密 & Basic Auth 安全认证
Nginx 支持灵活的 SSL 配置和基础 HTTP 认证,有效隔离未授权访问,实现 IP/端口级控制。
生成 HTTP Basic Auth 账户密码文件
1 2
| sudo apt install apache2-utils sudo htpasswd -c /etc/nginx/.htpasswd admin
|
在 server 段落中插入如下配置开启认证及证书(重点摘录):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| server { listen 443 ssl; server_name 10.10.90.39;
ssl_certificate /etc/nginx/ssl/10.10.90.39.crt; ssl_certificate_key /etc/nginx/ssl/10.10.90.39.key; ssl_protocols TLSv1.2 TLSv1.3;
auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/.htpasswd;
}
|
三、实例化多端口、多实例的灵活转发策略
传统的固定端口方式效率较低,通过 Nginx 的map、正则和变量,可轻松实现一套入口根据不同路径/标志符转发至后端不同机器或容器的指定端口。
支持 WebSocket 透传,以及复杂 URL 重写:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| http {
map $instance_name $backend { comfy1 10.10.90.49:8188; comfy2 10.10.90.25:8188; comfytest1 10.10.90.49:8188; }
map $http_upgrade $is_websocket { default 0; "websocket" 1; }
log_format websocket '$remote_addr - $http_upgrade [$time_local] "$host" "$request"'; }
|
动态分流 Location(正则+变量+proxy_pass)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| server { listen 443 ssl;
location ~ ^/(?<instance_name>comfy\d+)(?:/?)(?<route_path>/.*)$ { set $proxy_full_url "http://$backend$route_path$is_args$args";
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade";
access_log /var/log/nginx/websocket.log websocket if=$is_websocket;
proxy_pass http://$backend$route_path$is_args$args;
access_log /var/log/nginx/debug_access.log debug_fmt;
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
|
TIP:
proxy_pass结合 map 和正则变量,实现了【多实例切换】【WebSocket 直通】【只暴露一个 443 端口】的多功能入口。日志格式自定义便于调试追踪。
四、调试建议与配置管理经验
热加载生效 & 配置测试
1 2
| sudo nginx -t sudo nginx -s reload
|
管理站点可用性
保持配置结构简单易控,对 site 独立成 conf 文件,并软链管理:
1 2
| sudo ln -s /etc/nginx/sites-available/ip-proxy.conf \ /etc/nginx/sites-enabled/ip-proxy.conf
|
日志调优
对不同场景分别制定格式,尤其是 debug 和 websocket,避免统一日志难以溯源。
1
| log_format debug_fmt '[$time_local] Instance:"$instance_name"|Backend:"$backend"|Route:"$route_path"|Client:$remote_addr->$request|Status:$status|ProxyPass:"$proxy_full_url"|';
|
五、自我思考与扩展建议
- 安全优先: 强烈建议上线时更换自签名为 Let’s Encrypt 或企业可信 CA, 并根据实际关闭低安全协议。
- 变量式映射更灵活: 每新增实例无需改动回填上游映射即可,方便批量批次发布。
- WebSocket 兼容: 长连接应用与数据推送均可支持。
- 日志精准: 滚动分类型存储便于排查。
- 定期复审配置与密钥,避免泄露风险
本文为实战向总结,着力兼顾易用性、安全性和可扩展性。如有更优实践,欢迎留言讨论。