插件窝 干货文章 Nginx如何拦截特定域名请求并返回自定义JSON数据?

Nginx如何拦截特定域名请求并返回自定义JSON数据?

配置 Nginx 拦截 blocked 722    来源:    2025-03-15

要在Nginx中拦截特定域名的请求并返回自定义的JSON数据,你可以按照以下步骤进行配置:

1. 编辑Nginx配置文件

首先,找到并编辑你的Nginx配置文件。通常,这个文件位于 /etc/nginx/nginx.conf/etc/nginx/sites-available/default

2. 添加服务器块

在配置文件中添加一个新的服务器块(server block),用于处理特定域名的请求。假设你要拦截的域名是 example.com,你可以这样配置:

server {
    listen 80;
    server_name example.com;

    location / {
        default_type application/json;
        return 200 '{"status": "blocked", "message": "This domain is blocked."}';
    }
}

3. 解释配置

  • listen 80;:监听80端口(HTTP)。
  • server_name example.com;:指定要拦截的域名。
  • location / {}:匹配所有路径的请求。
  • default_type application/json;:设置响应的Content-Type为application/json
  • return 200 '{"status": "blocked", "message": "This domain is blocked."}';:返回HTTP状态码200和自定义的JSON数据。

4. 保存并重启Nginx

保存配置文件后,使用以下命令重启Nginx以使配置生效:

sudo nginx -t  # 测试配置文件语法是否正确
sudo systemctl restart nginx  # 重启Nginx服务

5. 验证配置

你可以通过访问 http://example.com 来验证配置是否生效。如果配置正确,你应该会看到返回的JSON数据:

{
    "status": "blocked",
    "message": "This domain is blocked."
}

6. 其他注意事项

  • 如果你使用的是HTTPS(端口443),你需要在 listen 指令中指定 443 ssl,并配置SSL证书。
  • 如果你希望拦截多个域名,可以在 server_name 指令中使用空格分隔多个域名。

示例:拦截多个域名

server {
    listen 80;
    server_name example.com another-example.com;

    location / {
        default_type application/json;
        return 200 '{"status": "blocked", "message": "This domain is blocked."}';
    }
}

通过以上步骤,你就可以在Nginx中拦截特定域名的请求并返回自定义的JSON数据了。