Create 端口转发
This commit is contained in:
305
端口转发
Normal file
305
端口转发
Normal 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
|
||||
Reference in New Issue
Block a user