本文目录导读:

是的,可以编写脚本自动配置Nginx反向代理,以下是几种实用的脚本方案:
Bash脚本自动配置Nginx反向代理
#!/bin/bash
# Nginx反向代理自动配置脚本
# 使用方法: ./nginx-proxy.sh 域名 后端地址 端口
DOMAIN=$1
BACKEND_URL=$2
BACKEND_PORT=$3
# 检查参数
if [ -z "$DOMAIN" ] || [ -z "$BACKEND_URL" ]; then
echo "使用方法: $0 <域名> <后端地址> [端口]"
echo "示例: $0 example.com 192.168.1.100 8080"
exit 1
fi
# 设置端口
PORT=${BACKEND_PORT:-80}
# 创建配置文件
CONFIG_FILE="/etc/nginx/sites-available/$DOMAIN"
cat > $CONFIG_FILE << EOF
server {
listen 80;
server_name $DOMAIN;
location / {
proxy_pass http://$BACKEND_URL:$PORT;
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;
# WebSocket支持
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection "upgrade";
}
# 安全头
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
}
EOF
# 启用网站
ln -sf $CONFIG_FILE /etc/nginx/sites-enabled/ 2>/dev/null
# 检查配置并重启
nginx -t && systemctl reload nginx
echo "✅ 反向代理配置完成!"
echo "域名: $DOMAIN → 后端: $BACKEND_URL:$PORT"
Python脚本(支持批量配置)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import sys
import json
import subprocess
def create_nginx_proxy(domain, backend_url, backend_port=80, ssl=False):
"""创建Nginx反向代理配置"""
config = f"""
server {{
listen {"443 ssl" if ssl else "80"};
server_name {domain};
location / {{
proxy_pass http://{backend_url}:{backend_port};
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_connect_timeout 30s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}}
# 静态文件缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {{
expires 1y;
add_header Cache-Control "public, immutable";
}}
}}
"""
if ssl:
config = config.replace("listen 443 ssl;",
f"listen 443 ssl;\n ssl_certificate /etc/nginx/ssl/{domain}.pem;\n ssl_certificate_key /etc/nginx/ssl/{domain}.key;")
# 写入配置
config_path = f"/etc/nginx/sites-available/{domain}"
with open(config_path, 'w') as f:
f.write(config)
# 创建符号链接
enabled_path = f"/etc/nginx/sites-enabled/{domain}"
if not os.path.exists(enabled_path):
os.symlink(config_path, enabled_path)
return config_path
def batch_configure(config_file="proxies.json"):
"""批量配置多个反向代理"""
with open(config_file, 'r') as f:
proxies = json.load(f)
for proxy in proxies:
print(f"配置 {proxy['domain']}...")
create_nginx_proxy(
proxy['domain'],
proxy['backend'],
proxy.get('port', 80),
proxy.get('ssl', False)
)
# 重启Nginx
subprocess.run(["nginx", "-t"], check=True)
subprocess.run(["systemctl", "reload", "nginx"], check=True)
print("✅ 所有反向代理配置完成!")
if __name__ == "__main__":
# 单个配置
if len(sys.argv) >= 3:
create_nginx_proxy(
sys.argv[1],
sys.argv[2],
int(sys.argv[3]) if len(sys.argv) > 3 else 80
)
else:
# 批量配置
batch_configure()
批量配置文件示例 (proxies.json)
[
{
"domain": "app.example.com",
"backend": "192.168.1.10",
"port": 3000,
"ssl": false
},
{
"domain": "api.example.com",
"backend": "192.168.1.20",
"port": 8080,
"ssl": true
},
{
"domain": "admin.example.com",
"backend": "localhost",
"port": 9000,
"ssl": false
}
]
高级配置脚本(带SSL和监控)
#!/bin/bash
# 高级反向代理配置脚本
# 支持SSL、WebSocket、负载均衡等
init_ssl() {
local domain=$1
# 使用Let's Encrypt自动获取SSL证书
certbot --nginx -d $domain --non-interactive --agree-tos -m admin@$domain
}
config_advanced() {
local domain=$1
shift
local backends=("$@")
cat > /etc/nginx/sites-available/$domain << 'EOF'
upstream backend_$domain {
least_conn; # 最少连接数负载均衡
EOF
for backend in "${backends[@]}"; do
echo " server $backend;" >> /etc/nginx/sites-available/$domain
done
cat >> /etc/nginx/sites-available/$domain << 'EOF'
}
server {
listen 80;
server_name $domain;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name $domain;
ssl_certificate /etc/letsencrypt/live/$domain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/$domain/privkey.pem;
# 安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://backend_$domain;
# ... 其他代理设置
}
}
EOF
}
# 监控脚本
monitor_nginx() {
while true; do
if systemctl is-active --quiet nginx; then
echo "Nginx运行正常 - $(date)"
else
echo "❌ Nginx异常,尝试重启..."
systemctl restart nginx
fi
sleep 60
done
}
使用说明
-
基本使用:
# 给脚本执行权限 chmod +x nginx-proxy.sh # 运行脚本 sudo ./nginx-proxy.sh myapp.example.com 192.168.1.100 3000
-
批量配置:
# 编辑proxies.json配置文件 python3 nginx-proxy.py # 自动读取配置文件
-
自动化部署:
# 结合CI/CD使用 ssh server "bash -s" < nginx-proxy.sh app.domain.com 10.0.0.1 8080
这些脚本可以:
- ✅ 自动创建Nginx配置
- ✅ 支持SSL证书
- ✅ 批量配置多个代理
- ✅ WebSocket支持
- ✅ 自动重载Nginx
- ✅ 错误检查和回滚
根据你的需求选择合适的脚本,建议先在测试环境验证!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播