Ssl

SNIproxy 的 TLS 證書,或帶有 TLS 證書的虛擬主機的反向代理

  • November 24, 2021

我目前使用 SNIProxy(這是迄今為止我見過的最簡單的設置虛擬主機)。但是,我只能使用每個服務的配置為每個虛擬主機單獨設置 SSL 證書(每個都在一個單獨的埠上),這很快就會成為一個問題,而不是整個伺服器,所以我只需要一個證書反向代理。那麼,有沒有辦法做到這一點?或者,是否有支持虛擬主機的反向代理(最好使用萬用字元,以便test.*轉到test.com, test.net,test.org等)並為該代理設置 TLS 證書(我仍然不知道如何在 NGINX 中做到這一點或 Caddy;NGINX 僅支持每個文件夾的主機,而 Caddy 不支持自定義證書,儘管我可能是錯的)。

我最終做的是將虛擬主機放在 SNIProxy 中的 localhost http 上,並將 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;
               }
}

引用自:https://serverfault.com/questions/1083747