Files
nxxmdata/insurance_backend/fix-nginx.sh

154 lines
4.7 KiB
Bash
Raw Normal View History

2025-09-30 17:41:21 +08:00
#!/bin/bash
# nginx配置检查和修复脚本
echo "🌐 检查和修复nginx配置..."
# 检查nginx是否安装
if ! command -v nginx &> /dev/null; then
echo "❌ nginx未安装正在安装..."
sudo apt update
sudo apt install nginx -y
fi
# 检查nginx配置文件
NGINX_CONFIG="/etc/nginx/sites-available/ad.ningmuyun.com"
NGINX_ENABLED="/etc/nginx/sites-enabled/ad.ningmuyun.com"
echo "📁 检查nginx配置文件..."
if [ ! -f "$NGINX_CONFIG" ]; then
echo "❌ nginx配置文件不存在正在创建..."
# 创建nginx配置
sudo tee "$NGINX_CONFIG" > /dev/null << 'EOF'
server {
listen 443 ssl http2;
server_name ad.ningmuyun.com;
# SSL证书配置需要替换为实际的证书路径
ssl_certificate /etc/ssl/certs/ad.ningmuyun.com.crt;
ssl_certificate_key /etc/ssl/private/ad.ningmuyun.com.key;
# 如果SSL证书不存在使用自签名证书仅用于测试
# ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
# ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
# SSL配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# 前端静态文件
location /insurance/ {
alias /var/www/insurance-admin-system/dist/;
try_files $uri $uri/ /insurance/index.html;
# 静态资源缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
# 后端API代理
location /insurance/api/ {
proxy_pass http://127.0.0.1:3000/api/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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_cache_bypass $http_upgrade;
# 超时设置
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
# CORS headers
add_header Access-Control-Allow-Origin https://ad.ningmuyun.com;
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
add_header Access-Control-Allow-Headers "Content-Type, Authorization, X-Requested-With";
add_header Access-Control-Allow-Credentials true;
# 处理预检请求
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin https://ad.ningmuyun.com;
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
add_header Access-Control-Allow-Headers "Content-Type, Authorization, X-Requested-With";
add_header Access-Control-Allow-Credentials true;
add_header Content-Length 0;
add_header Content-Type text/plain;
return 204;
}
}
# 健康检查
location /health {
proxy_pass http://127.0.0.1:3000/health;
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;
}
}
# HTTP重定向到HTTPS
server {
listen 80;
server_name ad.ningmuyun.com;
return 301 https://$server_name$request_uri;
}
EOF
echo "✅ nginx配置文件已创建"
else
echo "✅ nginx配置文件已存在"
fi
# 启用站点
if [ ! -L "$NGINX_ENABLED" ]; then
echo "🔗 启用nginx站点..."
sudo ln -sf "$NGINX_CONFIG" "$NGINX_ENABLED"
echo "✅ nginx站点已启用"
else
echo "✅ nginx站点已启用"
fi
# 检查前端目录
if [ ! -d "/var/www/insurance-admin-system/dist" ]; then
echo "⚠️ 前端目录不存在,创建目录..."
sudo mkdir -p /var/www/insurance-admin-system/dist
sudo chown -R www-data:www-data /var/www/insurance-admin-system
echo "✅ 前端目录已创建"
fi
# 测试nginx配置
echo "🧪 测试nginx配置..."
if sudo nginx -t; then
echo "✅ nginx配置测试通过"
# 重新加载nginx
echo "🔄 重新加载nginx..."
sudo systemctl reload nginx
# 检查nginx状态
echo "📊 nginx状态:"
sudo systemctl status nginx --no-pager
else
echo "❌ nginx配置测试失败"
exit 1
fi
echo ""
echo "✅ nginx配置检查和修复完成"
echo "📋 配置信息:"
echo " 配置文件: $NGINX_CONFIG"
echo " 启用链接: $NGINX_ENABLED"
echo " 前端目录: /var/www/insurance-admin-system/dist"
echo " API代理: /insurance/api/ → http://127.0.0.1:3000/api/"