#!/bin/bash # 日系动漫风格404页面一键部署脚本 # 适用于Nginx反向代理环境 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 日志函数 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" } # 检查root权限 check_root() { if [[ $EUID -eq 0 ]]; then log_warning "正在使用root权限执行脚本" else log_error "此脚本需要root权限来修改Nginx配置" exit 1 fi } # 检查Nginx是否安装 check_nginx() { if ! command -v nginx &> /dev/null; then log_error "Nginx未安装,请先安装Nginx" exit 1 fi log_success "Nginx已安装" } # 创建404页面 create_404_page() { local html_path="/usr/share/nginx/html/404.html" log_info "正在创建日系动漫风格404页面..." cat > "$html_path" << 'EOF' 页面未找到 - 404错误
🌸
🐱
404

おっと!ページが見つかりません

申し訳ありませんが、お探しのページは存在しないか、移動した可能性があります。
迷子になったキャラクターのように、ページもどこかへ行ってしまったようです。

ホームに戻る 前のページに戻る
EOF log_success "404页面已创建: $html_path" } # 配置Nginx configure_nginx() { local nginx_conf_dir="/etc/nginx" local sites_available_dir="$nginx_conf_dir/sites-available" local sites_enabled_dir="$nginx_conf_dir/sites-enabled" log_info "正在配置Nginx..." # 检查配置目录是否存在 if [[ ! -d "$sites_available_dir" ]]; then log_error "Nginx配置目录不存在: $sites_available_dir" log_info "请确保Nginx已正确安装" exit 1 fi # 查找主要的Nginx配置文件 local main_config="" if [[ -f "$nginx_conf_dir/nginx.conf" ]]; then main_config="$nginx_conf_dir/nginx.conf" fi # 在http块中添加404配置 if [[ -n "$main_config" ]]; then # 备份原配置 cp "$main_config" "$main_config.backup.$(date +%Y%m%d%H%M%S)" log_info "已备份原配置: $main_config.backup.*" # 检查是否已存在404配置 if grep -q "error_page 404" "$main_config"; then log_warning "404配置已存在,将更新配置" # 可以在这里添加更新逻辑 else # 在http块中添加404配置 sed -i '/http {/a\\terror_page 404 /404.html;\n\tlocation = /404.html {\n\t\troot /usr/share/nginx/html;\n\t\tinternal;\n\t}' "$main_config" log_success "已在主配置文件中添加404配置" fi fi # 为每个站点配置添加404页面 for config_file in "$sites_available_dir"/*; do if [[ -f "$config_file" ]]; then local config_name=$(basename "$config_file") log_info "处理站点配置: $config_name" # 备份原配置 cp "$config_file" "$config_file.backup.$(date +%Y%m%d%H%M%S)" # 检查是否已存在404配置 if ! grep -q "error_page 404" "$config_file"; then # 在server块中添加404配置 sed -i '/server {/a\\terror_page 404 /404.html;' "$config_file" sed -i '/error_page 404/a\\tlocation = /404.html {\n\t\troot /usr/share/nginx/html;\n\t\tinternal;\n\t}' "$config_file" log_success "已为 $config_name 添加404配置" else log_info "$config_name 已有404配置,跳过" fi fi done } # 测试Nginx配置 test_nginx() { log_info "测试Nginx配置..." if nginx -t; then log_success "Nginx配置测试通过" return 0 else log_error "Nginx配置测试失败" return 1 fi } # 重新加载Nginx reload_nginx() { log_info "重新加载Nginx配置..." if systemctl reload nginx; then log_success "Nginx已重新加载" return 0 else log_error "Nginx重新加载失败" return 1 fi } # 显示完成信息 show_completion() { echo log_success "日系动漫风格404页面部署完成!" echo log_info "部署详情:" log_info "- 404页面位置: /usr/share/nginx/html/404.html" log_info "- Nginx配置已更新" log_info "- 所有站点现在都会显示自定义404页面" echo log_info "您可以通过访问一个不存在的URL来测试404页面" log_info "例如: curl -I http://your-domain/not-exist-page" echo } # 主函数 main() { echo log_info "开始部署日系动漫风格404页面..." echo # 检查环境 check_root check_nginx # 执行部署步骤 create_404_page configure_nginx # 测试并重新加载Nginx if test_nginx; then reload_nginx show_completion else log_error "部署失败,请检查Nginx配置" exit 1 fi } # 显示使用说明 usage() { echo "日系动漫风格404页面一键部署脚本" echo echo "使用方法: $0 [选项]" echo echo "选项:" echo " -h, --help 显示此帮助信息" echo " -i, --install 执行安装部署" echo echo "示例:" echo " $0 --install 部署404页面" } # 参数处理 case "${1:-}" in -h|--help) usage exit 0 ;; -i|--install|"") main ;; *) log_error "未知选项: $1" usage exit 1 ;; esac