SNIproxy 的 TLS 证书,或具有 TLS 证书的虚拟主机的反向代理

SNIproxy 的 TLS 证书,或具有 TLS 证书的虚拟主机的反向代理

我目前使用 SNIProxy(这是我见过的迄今为止最简单的设置虚拟主机的方法)。但是,我只能为每个服务的配置为每个虚拟主机单独设置 SSL 证书(每个证书都在单独的端口上),这很快就会成为一个问题,而不是整个服务器的问题,所以我只需要一个反向代理的证书。那么,有办法吗?或者,是否有支持虚拟主机的反向代理(最好使用通配符,这样将test.*转到test.com、、test.nettest.org)并为该代理设置 TLS 证书(我仍然无法弄清楚如何在 NGINX 或 Caddy 中执行此操作;NGINX 仅支持每个文件夹的主机,而 Caddy 不支持自定义证书,尽管我可能是错的)。

答案1

我最终做的是将虚拟主机放在 localhost http 上的 SNIProxy 中,并将 NGINX 作为它的 HTTPS 前端,这样当它收到请求时,它会将其与主机头一起传送到 localhost。

为了方便后人,以下是我的配置:

对于 SNIProxy:

user nobody
pidfile /run/sniproxy/sniproxy.pid

error_log {
    syslog deamon
    priority notice
}

listen 127.0.0.1:8000 {
    proto http
}

table {
    whoogle.* 127.0.0.1:2000
    
    adguard.* 127.0.0.1:2001

    bitwarden.* 127.0.0.1:2002
    
    thea.* 127.0.0.1:2003

    files.* 127.0.0.1:2004

    photopea.* 127.0.0.1:2005

    desmos.* 127.0.0.1:2006

    youtube.* 127.0.0.1:2007

}

和 nginx.conf

worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        /dev/null;

daemon off;

events {
    worker_connections  1024;
}


http {
    proxy_temp_path ./tmp;
    access_log /dev/null;
    ssl_certificate ./cert.pem;
    ssl_certificate_key ./key.pem;
    proxy_set_header Host $host;
    client_body_temp_path ./tmp;

    server {
            listen       127.0.0.1:443 ssl;
    
            server_name  *.test;
    
            location / {
                proxy_pass http://127.0.0.1:8000;
            }
        }
    
        server {
            listen       192.168.1.67:443 ssl;
            
            server_name  *.tt;
    
            location / {
                proxy_pass http://127.0.0.1:8000;
            }
        }

        server {
                    listen       127.0.0.1:80;
                    
                    server_name  *.test;

                    return 302 https://$host$request_uri;
                }
            
                server {
                    listen       192.168.1.67:80;
                    
                    server_name  *.tt;

                    return 302 https://$host$request_uri;
                }
}

相关内容