我家里有两台电脑。computer1
正在接收所有 http(s) 请求(来自盒子)并包含带有域名的网站domain1.com
。 并且computer2
有带有域名的网站domain2.com
。
因此我在nginx 文件夹domain2.com.conf
中添加了一个:conf.d
computer1
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
。
我在 Google 上搜索了如何指出 SSL 证书的位置,我发现:
ssl on;
ssl_certificate <path_to_certificate>;
ssl_certificate_key <path_to_certificate>;
但显然,问题在于证书在计算机上,computer2
而不是在计算机 1 上。我该如何将 SSL 证书请求重定向到computer2
?我找不到解决方案,也许我的关键字不对。
非常感谢。
编辑1:根据这个帖子使用 SSL 客户端证书身份验证的 Nginx 代理到后端。我已将此行添加proxy_set_header X-SSL-CERT $ssl_client_cert;
到 domain2.com.conf。但它仍然不起作用。
编辑2:根据注释,这是 domain1.com 的配置文件: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;
}
答案1
在 http(s) 级别执行操作时,您将需要计算机一上的域二的证书和私钥。这是因为计算机一正在终止 SSL 连接。您无法从代理计算机/网站传递此信息。
但是,您可以使用 TCP 负载平衡器而不是 http 负载平衡器,而无需将证书和私钥放在计算机一上。TCP 负载平衡器只会传递数据包,而不会终止 SSL 连接。您可以阅读Nginx 指南在这里。
答案2
您所面临的问题的关键在于您无权访问证书。Nginix 将此称为https 上游如果您无法访问证书,那么您可能需要在防火墙上使用端口转发,但您将需要为每个服务器提供一个专用的公共 IP。
根据我对 Nginix 配置选项的理解,您需要将 domain2.com 的 SSL 证书复制到 computer1。如果我没记错的话,您需要添加proxy_ssl_certificate选项添加到您的配置文件中,以便 Nginx 代理可以确保端到端加密。
这就是通过代理维护“信任链”的方式。需要其他选项,但它应该可以帮助您入门。
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 的反馈,对答案进行了编辑以改进内容