【问题标题】:NGINX Forward HTTPS from any domain to specific URLNGINX 将 HTTPS 从任何域转发到特定 URL
【发布时间】:2019-04-10 19:28:49
【问题描述】:

我正在使用针对 bind9 的 DNSRBL 列表来实施内部 DNS 服务器,以阻止对恶意网站的特定 DNS 请求。每当有匹配时,DNS 服务器都会使用提供块页面的内部 NGINX 服务器的 IP 进行响应。

例如,当内部客户端请求http://www.badsite.com/时,DNS服务器以192.168.0.100为例进行响应,这是NGINX服务器的IP。然后 NGINX 使用 301 将请求转发到 HTTPS 站点,该站点将阻止页面消息提供给最终用户。

使用简单的 NGINX 配置效果很好:

server {
        listen 80 default_server;
        server_name _;
        return 301 https://block.xyz.com;
}
server {
        listen 443 ssl;
        server_name block.xyz.com;    
        ssl_certificate /etc/letsencrypt/live/block.xyz.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/block.xyz.com/privkey.pem;    
        root /var/www/html;
        index index.html;
        location / {
               try_files $uri $uri/ =404;
        }    
}

我遇到的问题是客户端请求 HTTPS 站点时,即:https://www.badsite.com/。我想将任何传入的 SSL/443 请求转发到 https://block.xyz.com。我尝试添加以下指令:

server {
        listen 443 ssl default_server;
        server_name _;    
        ssl_certificate /etc/letsencrypt/live/block.xyz.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/block.xyz.com/privkey.pem;
        return 301 https://block.xyz.com;
}

我收到典型的 SSL 错误,说证书与域不匹配:NET::ERR_CERT_COMMON_NAME_INVALID,这是可以理解的。当我将指令从 return 更改为 rewrite 时,也会发生同样的事情:

...
rewrite ^ https://block.xyz.com;
....

我将如何在 NGINX 中添加指令来完成此操作?本指南 (https://sweetcode.io/ad-blocking-with-local-dns-servers-and-nginx/) 为我提供了一种在 http 端实现类似广告拦截的方法,但不涉及 https 请求。

有什么线索吗?

【问题讨论】:

  • Pihole 可能是更好的解决方案。

标签: nginx


【解决方案1】:

在您的 server 块中尝试添加:

        if ($host != "block.xyz.com") {
           rewrite ^/(.*) https://block.xyz.com/$1 permanent;
        }

【讨论】:

  • 试过了,但也没有用。仍然收到 SSL 错误,而不是重写或转发到 block.xyz.com
  • 有几点可能对question 有所帮助。
猜你喜欢
  • 1970-01-01
  • 2017-07-09
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多