Create 端口转发

This commit is contained in:
2025-10-29 11:38:20 +08:00
committed by GitHub
parent 9b0d3a551c
commit e8de9d6e2e

305
端口转发 Normal file
View File

@@ -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