我家里有两台电脑。 computer1正在接收所有http(s)请求(从框中)并包含域domain1.com网站。 而computer2拥有域domain2.com网站。
所以我在computer1上的nginx的conf.d文件夹中添加了domain2.com.conf :
server { listen 443; server_name *.domain2.com domain2.com; location / { proxy_pass https://192.168.1.22:$server_port/$uri$is_args$args; proxy_set_header Host $host:$server_port; } }
问题是,当我尝试访问domain2.com ,返回的SSL证书是来自domain1.com证书。
我search了谷歌的方式来表明SSL证书在哪里,我发现:
ssl on; ssl_certificate <path_to_certificate>; ssl_certificate_key <path_to_certificate>;
但显然,问题是证书在computer2而不在计算机1上。 如何将SSL证书请求redirect到computer2 ? 我没有find解决办法,也许我有错误的关键字。
非常感谢你。
编辑1 :根据这个线程Nginx代理到后台用SSL客户端证书进行身份validation 。 我已经添加了这一行proxy_set_header X-SSL-CERT $ssl_client_cert; 到domain2.com.conf。 但它仍然没有工作。
EDIT2 :根据评论,这里是domain1.com的configuration文件:domain1.com.conf
server { listen 80; listen [::]:80; server_name domain1.conf; access_by_lua_file /usr/share/ssowat/access.lua; include conf.d/cvrd.fr.d/*.conf; location /yunohost/admin { return 301 https://$http_host$request_uri; } access_log /var/log/nginx/domain1.com-access.log; error_log /var/log/nginx/domain1.com-error.log; } server { listen 443 ssl; listen [::]:443 ssl; server_name domain1.com; ssl_certificate /etc/yunohost/certs/domain1.com/crt.pem; ssl_certificate_key /etc/yunohost/certs/domain1.com/key.pem; ssl_session_timeout 5m; ssl_session_cache shared:SSL:50m; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!3DES:+HIGH:+MEDIUM; add_header Strict-Transport-Security "max-age=31536000;"; # Uncomment the following directive after DH generation # > openssl dhparam -out /etc/ssl/private/dh2048.pem -outform PEM -2 2048 #ssl_dhparam /etc/ssl/private/dh2048.pem; access_by_lua_file /usr/share/ssowat/access.lua; include conf.d/domain1.com.d/*.conf; include conf.d/yunohost_admin.conf.inc; include conf.d/yunohost_api.conf.inc; }
在http(s)级别执行操作时,您将需要计算机上的域2的证书和私钥。 这是因为计算机正在终止SSL连接。 您无法通过代理计算机/网站的这些信息。
但是,您可以使用TCP负载平衡器而不是http负载平衡器,而不将证书和私钥放在计算机上。 TCP负载均衡器只是简单地传递数据包而不终止SSL连接。 你可以在这里阅读Nginx的指南 。
您面临的问题的症结在于您无法访问证书。 Nginx呼叫这个https上游如果你不能获得证书的访问,那么你可能需要在防火墙上使用端口转发,但是那么你将需要一个专用的公共IP给每个服务器。
根据我对Nginxconfiguration选项的理解,您需要将domain2.com的SSL证书复制到computer1。 如果我是正确的,那么需要将proxy_ssl_certificate选项添加到configuration文件中,以便Nginx代理可以确保端到端的encryption。
这就是通过代理维护“信任链”的过程。 其他选项将需要,但它应该让你开始。
Syntax: proxy_ssl_certificate file; Default: — Context: http, server, location This directive appeared in version 1.7.8. Syntax: proxy_ssl_certificate_key file; Default: — Context: http, server, location This directive appeared in version 1.7.8.
经过OP的反馈,编辑改进了答案的内容