From e8de9d6e2e15b224b561770ce87115161a425de5 Mon Sep 17 00:00:00 2001 From: xzx3344521 Date: Wed, 29 Oct 2025 11:38:20 +0800 Subject: [PATCH] =?UTF-8?q?Create=20=E7=AB=AF=E5=8F=A3=E8=BD=AC=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 端口转发 | 305 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 305 insertions(+) create mode 100644 端口转发 diff --git a/端口转发 b/端口转发 new file mode 100644 index 0000000..b003a9e --- /dev/null +++ b/端口转发 @@ -0,0 +1,305 @@ +#!/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