#!/bin/bash # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 显示标题 echo -e "${GREEN}" echo "========================================" echo " Nginx 端口转发一键配置脚本" echo "========================================" echo -e "${NC}" # 检查是否以root运行 if [ "$EUID" -ne 0 ]; then echo -e "${RED}请使用 sudo 运行此脚本${NC}" exit 1 fi # 检查nginx是否安装 if ! command -v nginx &> /dev/null; then echo -e "${YELLOW}检测到未安装 Nginx,正在自动安装...${NC}" if [ -f /etc/redhat-release ]; then # CentOS/RHEL yum install -y nginx elif [ -f /etc/debian_version ]; then # Ubuntu/Debian apt update && apt install -y nginx else echo -e "${RED}无法自动安装 Nginx,请手动安装后再运行此脚本${NC}" exit 1 fi fi # 交互式输入配置信息 echo -e "${BLUE}请输入配置信息(直接回车使用默认值)${NC}" read -p "输入监听端口 (默认: 80): " LISTEN_PORT LISTEN_PORT=${LISTEN_PORT:-80} read -p "输入域名或IP(无域名请直接回车): " SERVER_NAME SERVER_NAME=${SERVER_NAME:-_} read -p "输入要转发的目标IP或域名: " TARGET_HOST if [ -z "$TARGET_HOST" ]; then echo -e "${RED}错误:目标地址不能为空${NC}" exit 1 fi read -p "输入要转发的目标端口: " TARGET_PORT if [ -z "$TARGET_PORT" ]; then echo -e "${RED}错误:目标端口不能为空${NC}" exit 1 fi read -p "输入配置名称(将用于生成配置文件名): " CONFIG_NAME if [ -z "$CONFIG_NAME" ]; then CONFIG_NAME="proxy_${LISTEN_PORT}_to_${TARGET_HOST}_${TARGET_PORT}" fi # 生成配置文件内容 CONFIG_CONTENT="server { listen ${LISTEN_PORT}; server_name ${SERVER_NAME}; # 访问日志设置 access_log /var/log/nginx/${CONFIG_NAME}_access.log; error_log /var/log/nginx/${CONFIG_NAME}_error.log; location / { proxy_pass http://${TARGET_HOST}:${TARGET_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_read_timeout 60s; proxy_send_timeout 60s; # 可选:WebSocket 支持 # proxy_http_version 1.1; # proxy_set_header Upgrade \$http_upgrade; # proxy_set_header Connection \"upgrade\"; } # 可选:静态文件缓存 # location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { # expires 1y; # add_header Cache-Control \"public, immutable\"; # } }" # 确定配置文件路径 if [ -d "/etc/nginx/conf.d" ]; then CONFIG_FILE="/etc/nginx/conf.d/${CONFIG_NAME}.conf" elif [ -d "/etc/nginx/sites-available" ]; then CONFIG_FILE="/etc/nginx/sites-available/${CONFIG_NAME}.conf" else CONFIG_FILE="/etc/nginx/sites-enabled/${CONFIG_NAME}.conf" fi # 写入配置文件 echo "$CONFIG_CONTENT" | sudo tee "$CONFIG_FILE" > /dev/null if [ $? -eq 0 ]; then echo -e "${GREEN}✓ 配置文件已创建: ${CONFIG_FILE}${NC}" else echo -e "${RED}✗ 配置文件创建失败${NC}" exit 1 fi # 测试配置文件语法 echo -e "${YELLOW}测试配置文件语法...${NC}" nginx -t if [ $? -eq 0 ]; then echo -e "${GREEN}✓ 配置文件语法检查通过${NC}" # 重新加载nginx配置 echo -e "${YELLOW}重新加载 Nginx 配置...${NC}" systemctl reload nginx || nginx -s reload if [ $? -eq 0 ]; then echo -e "${GREEN}✓ Nginx 配置重载成功${NC}" echo "" echo -e "${BLUE}🎉 配置完成!${NC}" echo -e "${BLUE}================================${NC}" echo -e "${GREEN}监听端口: ${LISTEN_PORT}" echo -e "目标地址: ${TARGET_HOST}:${TARGET_PORT}" echo -e "配置文件: ${CONFIG_FILE}" echo -e "${BLUE}================================${NC}" # 显示访问URL if [ "$SERVER_NAME" != "_" ]; then if [ "$LISTEN_PORT" = "80" ]; then echo -e "${GREEN}访问地址: http://${SERVER_NAME}${NC}" else echo -e "${GREEN}访问地址: http://${SERVER_NAME}:${LISTEN_PORT}${NC}" fi else echo -e "${GREEN}访问地址: http://服务器IP:${LISTEN_PORT}${NC}" fi else echo -e "${RED}✗ Nginx 配置重载失败,请检查日志${NC}" fi else echo -e "${RED}✗ 配置文件语法检查失败,请检查配置${NC}" echo -e "${YELLOW}已创建的配置文件: ${CONFIG_FILE}${NC}" exit 1 fi#!/bin/bash # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 显示标题 echo -e "${GREEN}" echo "========================================" echo " Nginx 端口转发一键配置脚本" echo "========================================" echo -e "${NC}" # 检查是否以root运行 if [ "$EUID" -ne 0 ]; then echo -e "${RED}请使用 sudo 运行此脚本${NC}" exit 1 fi # 检查nginx是否安装 if ! command -v nginx &> /dev/null; then echo -e "${YELLOW}检测到未安装 Nginx,正在自动安装...${NC}" if [ -f /etc/redhat-release ]; then # CentOS/RHEL yum install -y nginx elif [ -f /etc/debian_version ]; then # Ubuntu/Debian apt update && apt install -y nginx else echo -e "${RED}无法自动安装 Nginx,请手动安装后再运行此脚本${NC}" exit 1 fi fi # 交互式输入配置信息 echo -e "${BLUE}请输入配置信息(直接回车使用默认值)${NC}" read -p "输入监听端口 (默认: 80): " LISTEN_PORT LISTEN_PORT=${LISTEN_PORT:-80} read -p "输入域名或IP(无域名请直接回车): " SERVER_NAME SERVER_NAME=${SERVER_NAME:-_} read -p "输入要转发的目标IP或域名: " TARGET_HOST if [ -z "$TARGET_HOST" ]; then echo -e "${RED}错误:目标地址不能为空${NC}" exit 1 fi read -p "输入要转发的目标端口: " TARGET_PORT if [ -z "$TARGET_PORT" ]; then echo -e "${RED}错误:目标端口不能为空${NC}" exit 1 fi read -p "输入配置名称(将用于生成配置文件名): " CONFIG_NAME if [ -z "$CONFIG_NAME" ]; then CONFIG_NAME="proxy_${LISTEN_PORT}_to_${TARGET_HOST}_${TARGET_PORT}" fi # 生成配置文件内容 CONFIG_CONTENT="server { listen ${LISTEN_PORT}; server_name ${SERVER_NAME}; # 访问日志设置 access_log /var/log/nginx/${CONFIG_NAME}_access.log; error_log /var/log/nginx/${CONFIG_NAME}_error.log; location / { proxy_pass http://${TARGET_HOST}:${TARGET_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_read_timeout 60s; proxy_send_timeout 60s; # 可选:WebSocket 支持 # proxy_http_version 1.1; # proxy_set_header Upgrade \$http_upgrade; # proxy_set_header Connection \"upgrade\"; } # 可选:静态文件缓存 # location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { # expires 1y; # add_header Cache-Control \"public, immutable\"; # } }" # 确定配置文件路径 if [ -d "/etc/nginx/conf.d" ]; then CONFIG_FILE="/etc/nginx/conf.d/${CONFIG_NAME}.conf" elif [ -d "/etc/nginx/sites-available" ]; then CONFIG_FILE="/etc/nginx/sites-available/${CONFIG_NAME}.conf" else CONFIG_FILE="/etc/nginx/sites-enabled/${CONFIG_NAME}.conf" fi # 写入配置文件 echo "$CONFIG_CONTENT" | sudo tee "$CONFIG_FILE" > /dev/null if [ $? -eq 0 ]; then echo -e "${GREEN}✓ 配置文件已创建: ${CONFIG_FILE}${NC}" else echo -e "${RED}✗ 配置文件创建失败${NC}" exit 1 fi # 测试配置文件语法 echo -e "${YELLOW}测试配置文件语法...${NC}" nginx -t if [ $? -eq 0 ]; then echo -e "${GREEN}✓ 配置文件语法检查通过${NC}" # 重新加载nginx配置 echo -e "${YELLOW}重新加载 Nginx 配置...${NC}" systemctl reload nginx || nginx -s reload if [ $? -eq 0 ]; then echo -e "${GREEN}✓ Nginx 配置重载成功${NC}" echo "" echo -e "${BLUE}🎉 配置完成!${NC}" echo -e "${BLUE}================================${NC}" echo -e "${GREEN}监听端口: ${LISTEN_PORT}" echo -e "目标地址: ${TARGET_HOST}:${TARGET_PORT}" echo -e "配置文件: ${CONFIG_FILE}" echo -e "${BLUE}================================${NC}" # 显示访问URL if [ "$SERVER_NAME" != "_" ]; then if [ "$LISTEN_PORT" = "80" ]; then echo -e "${GREEN}访问地址: http://${SERVER_NAME}${NC}" else echo -e "${GREEN}访问地址: http://${SERVER_NAME}:${LISTEN_PORT}${NC}" fi else echo -e "${GREEN}访问地址: http://服务器IP:${LISTEN_PORT}${NC}" fi else echo -e "${RED}✗ Nginx 配置重载失败,请检查日志${NC}" fi else echo -e "${RED}✗ 配置文件语法检查失败,请检查配置${NC}" echo -e "${YELLOW}已创建的配置文件: ${CONFIG_FILE}${NC}" exit 1 fi