Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NGINX将HTTPS从任何域转发到特定URL_Nginx - Fatal编程技术网

NGINX将HTTPS从任何域转发到特定URL

NGINX将HTTPS从任何域转发到特定URL,nginx,Nginx,我正在实现一个内部DNS服务器,用于阻止针对恶意网站的特定DNS请求,使用针对bind9的DNSRBL列表。只要存在匹配项,DNS服务器就会使用提供块页面的内部NGINX服务器的IP进行响应 例如,当内部客户端请求时,DNS服务器以192.168.0.100为例进行响应,这是NGINX服务器的IP。然后NGINX使用301将请求转发到HTTPS站点,该站点向最终用户提供块页面消息 使用简单的NGINX配置可以很好地工作: server { listen 80 default_se

我正在实现一个内部DNS服务器,用于阻止针对恶意网站的特定DNS请求,使用针对bind9的DNSRBL列表。只要存在匹配项,DNS服务器就会使用提供块页面的内部NGINX服务器的IP进行响应

例如,当内部客户端请求时,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站点时,即:。我想将任何传入的SSL/443请求转发到。我已尝试添加以下指令:

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\u CERT\u COMMON\u NAME\u INVALID,这是可以理解的。当我将指令从return更改为rewrite时,也会发生同样的情况:

...
rewrite ^ https://block.xyz.com;
....
如何在NGINX中添加一个指令来实现这一点?本指南()为我提供了一种实现类似于广告阻塞的http端的方法,但不涉及https请求


有什么线索吗?

服务器中尝试添加:

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

我试过了,但也没用。仍然得到SSL错误,而不是重写或转发到。在这方面,有几点可能会有所帮助。
Pihole
可能是更好的解决方案。