diff --git a/404 b/404
index dafe323..99bc293 100644
--- a/404
+++ b/404
@@ -1,6 +1,7 @@
#!/bin/bash
-# Docker环境日系动漫风格404页面一键部署脚本
+# OpenResty/Nginx 403 & 404 错误页面一键部署脚本
+# 支持Docker环境和传统安装方式
set -e
@@ -9,55 +10,420 @@ RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
+PURPLE='\033[0;35m'
+CYAN='\033[0;36m'
NC='\033[0m' # No Color
# 日志函数
-log_info() {
- echo -e "${BLUE}[INFO]${NC} $1"
-}
+log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
+log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
+log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
+log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
+log_debug() { echo -e "${PURPLE}[DEBUG]${NC} $1"; }
-log_success() {
- echo -e "${GREEN}[SUCCESS]${NC} $1"
-}
-
-log_warning() {
- echo -e "${YELLOW}[WARNING]${NC} $1"
-}
-
-log_error() {
- echo -e "${RED}[ERROR]${NC} $1"
-}
-
-# 检查Docker环境
-check_docker_nginx() {
- log_info "检查Docker Nginx容器..."
+# 检查运行环境
+check_environment() {
+ log_info "检查运行环境..."
- # 查找运行的Nginx容器
- local nginx_container=$(docker ps --filter "name=nginx" --format "{{.Names}}" | head -1)
-
- if [ -z "$nginx_container" ]; then
- nginx_container=$(docker ps --filter "publish=80" --format "{{.Names}}" | head -1)
+ # 检查是否是Docker环境
+ if docker ps &>/dev/null; then
+ # 查找Nginx或OpenResty容器
+ local nginx_container=$(docker ps --filter "name=nginx" --format "{{.Names}}" | head -1)
+ local openresty_container=$(docker ps --filter "name=openresty" --format "{{.Names}}" | head -1)
+
+ if [ -n "$openresty_container" ]; then
+ log_success "找到OpenResty容器: $openresty_container"
+ echo "docker:$openresty_container"
+ return 0
+ elif [ -n "$nginx_container" ]; then
+ log_success "找到Nginx容器: $nginx_container"
+ echo "docker:$nginx_container"
+ return 0
+ else
+ log_warning "未找到Nginx/OpenResty容器,尝试其他方式"
+ fi
fi
- if [ -z "$nginx_container" ]; then
- nginx_container=$(docker ps --filter "publish=443" --format "{{.Names}}" | head -1)
- fi
-
- if [ -n "$nginx_container" ]; then
- log_success "找到Nginx容器: $nginx_container"
- echo "$nginx_container"
+ # 检查系统安装的OpenResty
+ if command -v openresty &>/dev/null; then
+ log_success "找到系统安装的OpenResty"
+ echo "system:openresty"
return 0
- else
- log_error "未找到运行的Nginx容器"
- return 1
fi
+
+ # 检查系统安装的Nginx
+ if command -v nginx &>/dev/null; then
+ log_success "找到系统安装的Nginx"
+ echo "system:nginx"
+ return 0
+ fi
+
+ log_error "未找到Nginx或OpenResty"
+ return 1
}
-# 创建404页面到宿主机目录
+# 创建403错误页面
+create_403_page() {
+ local host_data_dir="/boot/data/dataxn"
+
+ log_info "正在创建日系动漫风格403错误页面..."
+
+ # 检查宿主机目录是否存在
+ if [ ! -d "$host_data_dir" ]; then
+ log_warning "目录 $host_data_dir 不存在,正在创建..."
+ mkdir -p "$host_data_dir"
+ fi
+
+ local html_path="$host_data_dir/403.html"
+
+ cat > "$html_path" << 'EOF'
+
+
+
+
+
+ 访问被拒绝 - 403错误
+
+
+
+
+
+
+
🔐
+
+
+
+
403
+
アクセスが拒否されました!
+
申し訳ありませんが、このページへのアクセス権限がありません。
+ 守られし領域へは、選ばれし者だけが入ることが許されています。
+
+
+
+
+
+
+
+EOF
+
+ log_success "403页面已创建: $html_path"
+}
+
+# 创建404错误页面(更新版)
create_404_page() {
local host_data_dir="/boot/data/dataxn"
- log_info "正在创建日系动漫风格404页面..."
+ log_info "正在创建日系动漫风格404错误页面..."
# 检查宿主机目录是否存在
if [ ! -d "$host_data_dir" ]; then
@@ -401,119 +767,242 @@ EOF
}
# 为Docker容器创建Nginx配置
-create_nginx_config() {
+create_docker_nginx_config() {
local container_name="$1"
- log_info "为容器 $container_name 创建Nginx配置..."
-
- # 检查容器内的Nginx配置路径
- local nginx_conf_path="/etc/nginx/conf.d/custom_404.conf"
+ log_info "为容器 $container_name 创建Nginx错误页面配置..."
# 创建配置内容
local config_content=$(cat << 'EOF'
-# 自定义404错误页面配置
+# 自定义错误页面配置
+error_page 403 /403.html;
error_page 404 /404.html;
+error_page 500 502 503 504 /50x.html;
+
+location = /403.html {
+ root /usr/share/nginx/html;
+ internal;
+ allow all;
+}
location = /404.html {
root /usr/share/nginx/html;
internal;
allow all;
}
+
+location = /50x.html {
+ root /usr/share/nginx/html;
+ internal;
+ allow all;
+}
EOF
)
# 将配置写入容器
- echo "$config_content" | docker exec -i "$container_name" tee "$nginx_conf_path" > /dev/null
+ local config_path="/etc/nginx/conf.d/custom_errors.conf"
+ echo "$config_content" | docker exec -i "$container_name" tee "$config_path" > /dev/null
if [ $? -eq 0 ]; then
- log_success "Nginx配置已写入容器: $nginx_conf_path"
+ log_success "Nginx错误页面配置已写入容器: $config_path"
else
- log_error "无法写入容器配置,请检查容器权限"
+ log_error "无法写入容器配置"
return 1
fi
}
-# 测试Nginx配置
-test_nginx_config() {
- local container_name="$1"
+# 为系统安装创建Nginx配置
+create_system_nginx_config() {
+ local service_type="$1"
- log_info "测试容器Nginx配置..."
+ log_info "为系统安装的 $service_type 创建错误页面配置..."
- if docker exec "$container_name" nginx -t; then
- log_success "Nginx配置测试通过"
- return 0
- else
- log_error "Nginx配置测试失败"
+ local nginx_conf_dir=""
+ case "$service_type" in
+ "openresty")
+ nginx_conf_dir="/usr/local/openresty/nginx/conf"
+ if [ ! -d "$nginx_conf_dir" ]; then
+ nginx_conf_dir="/etc/openresty"
+ fi
+ ;;
+ "nginx")
+ nginx_conf_dir="/etc/nginx"
+ ;;
+ esac
+
+ if [ ! -d "$nginx_conf_dir" ]; then
+ log_error "找不到配置目录: $nginx_conf_dir"
return 1
fi
+
+ local config_path="$nginx_conf_dir/conf.d/custom_errors.conf"
+
+ # 创建配置内容
+ local config_content=$(cat << EOF
+# 自定义错误页面配置
+error_page 403 /403.html;
+error_page 404 /404.html;
+error_page 500 502 503 504 /50x.html;
+
+location = /403.html {
+ root /usr/share/nginx/html;
+ internal;
+ allow all;
}
-# 重新加载Nginx
-reload_nginx() {
- local container_name="$1"
-
- log_info "重新加载容器Nginx配置..."
-
- if docker exec "$container_name" nginx -s reload; then
- log_success "Nginx配置已重新加载"
- return 0
- else
- log_error "Nginx重新加载失败"
- return 1
- fi
+location = /404.html {
+ root /usr/share/nginx/html;
+ internal;
+ allow all;
}
-# 显示Docker特定信息
-show_docker_info() {
- local container_name="$1"
+location = /50x.html {
+ root /usr/share/nginx/html;
+ internal;
+ allow all;
+}
+EOF
+)
+
+ # 写入配置
+ mkdir -p "$(dirname "$config_path")"
+ echo "$config_content" > "$config_path"
+ log_success "Nginx错误页面配置已创建: $config_path"
+}
+
+# 测试配置
+test_config() {
+ local env_type="$1"
+ local target="$2"
+
+ log_info "测试配置..."
+
+ case "$env_type" in
+ "docker")
+ if docker exec "$target" nginx -t; then
+ log_success "Docker容器配置测试通过"
+ return 0
+ else
+ log_error "Docker容器配置测试失败"
+ return 1
+ fi
+ ;;
+ "system")
+ if sudo nginx -t 2>/dev/null || sudo openresty -t 2>/dev/null; then
+ log_success "系统服务配置测试通过"
+ return 0
+ else
+ log_error "系统服务配置测试失败"
+ return 1
+ fi
+ ;;
+ esac
+}
+
+# 重新加载服务
+reload_service() {
+ local env_type="$1"
+ local target="$2"
+
+ log_info "重新加载服务..."
+
+ case "$env_type" in
+ "docker")
+ if docker exec "$target" nginx -s reload; then
+ log_success "Docker容器配置已重新加载"
+ return 0
+ else
+ log_error "Docker容器重新加载失败"
+ return 1
+ fi
+ ;;
+ "system")
+ if systemctl reload nginx 2>/dev/null || systemctl reload openresty 2>/dev/null || nginx -s reload 2>/dev/null; then
+ log_success "系统服务配置已重新加载"
+ return 0
+ else
+ log_error "系统服务重新加载失败"
+ return 1
+ fi
+ ;;
+ esac
+}
+
+# 显示完成信息
+show_completion() {
+ local env_type="$1"
+ local target="$2"
echo
- log_success "日系动漫风格404页面部署完成!"
+ log_success "日系动漫风格403 & 404错误页面部署完成!"
echo
log_info "部署详情:"
- log_info "- 宿主机404页面: /boot/data/dataxn/404.html"
- log_info "- Nginx容器: $container_name"
- log_info "- 容器内配置: /etc/nginx/conf.d/custom_404.conf"
- echo
- log_info "目录映射关系:"
- log_info "- 宿主机: /boot/data/dataxn → 容器: (请检查您的具体映射路径)"
+ log_info "- 403页面: /boot/data/dataxn/403.html"
+ log_info "- 404页面: /boot/data/dataxn/404.html"
+
+ case "$env_type" in
+ "docker")
+ log_info "- 容器名称: $target"
+ log_info "- 配置路径: /etc/nginx/conf.d/custom_errors.conf"
+ ;;
+ "system")
+ log_info "- 服务类型: $target"
+ log_info "- 配置路径: /etc/nginx/conf.d/custom_errors.conf"
+ ;;
+ esac
+
echo
log_info "测试方法:"
- log_info "1. 访问一个不存在的页面: curl http://your-domain/not-exist-page"
- log_info "2. 或直接在浏览器中访问不存在的URL"
+ log_info "403测试: curl http://你的域名/禁止访问的路径"
+ log_info "404测试: curl http://你的域名/不存在的页面"
echo
- log_warning "如果您的目录映射不是默认的/usr/share/nginx/html,请手动调整配置"
+ log_success "现在您的OpenResty/Nginx将显示美观的日系动漫风格错误页面!"
}
# 主函数
main() {
echo
- log_info "开始为Docker Nginx部署日系动漫风格404页面..."
+ log_info "开始部署日系动漫风格403 & 404错误页面..."
echo
- # 检查Docker环境
- local container_name=$(check_docker_nginx)
+ # 检查环境
+ local env_info=$(check_environment)
if [ $? -ne 0 ]; then
exit 1
fi
- # 执行部署步骤
- create_404_page
- create_nginx_config "$container_name"
+ local env_type=$(echo "$env_info" | cut -d: -f1)
+ local target=$(echo "$env_info" | cut -d: -f2)
- # 测试并重新加载Nginx
- if test_nginx_config "$container_name"; then
- reload_nginx "$container_name"
- show_docker_info "$container_name"
+ log_debug "环境类型: $env_type, 目标: $target"
+
+ # 创建错误页面
+ create_403_page
+ create_404_page
+
+ # 创建配置
+ case "$env_type" in
+ "docker")
+ create_docker_nginx_config "$target"
+ ;;
+ "system")
+ create_system_nginx_config "$target"
+ ;;
+ esac
+
+ # 测试并重新加载
+ if test_config "$env_type" "$target"; then
+ reload_service "$env_type" "$target"
+ show_completion "$env_type" "$target"
else
- log_error "部署失败,请检查Nginx配置"
+ log_error "部署失败,请检查配置"
exit 1
fi
}
# 显示使用说明
usage() {
- echo "Docker环境日系动漫风格404页面一键部署脚本"
+ echo "OpenResty/Nginx 403 & 404 错误页面一键部署脚本"
echo
echo "使用方法: $0 [选项]"
echo
@@ -521,8 +1010,12 @@ usage() {
echo " -h, --help 显示此帮助信息"
echo " -i, --install 执行安装部署"
echo
+ echo "支持环境:"
+ echo " - Docker容器 (Nginx/OpenResty)"
+ echo " - 系统安装 (Nginx/OpenResty)"
+ echo
echo "示例:"
- echo " $0 --install 部署404页面"
+ echo " $0 --install 部署403和404页面"
}
# 参数处理