我目前使用 SNIProxy(这是我见过的迄今为止最简单的设置虚拟主机的方法)。但是,我只能为每个服务的配置为每个虚拟主机单独设置 SSL 证书(每个证书都在单独的端口上),这很快就会成为一个问题,而不是整个服务器的问题,所以我只需要一个反向代理的证书。那么,有办法吗?或者,是否有支持虚拟主机的反向代理(最好使用通配符,这样将test.*
转到test.com
、、test.net
等test.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;
}
}