重定向 SSL 证书请求 nginx

重定向 SSL 证书请求 nginx

我家里有两台电脑。computer1正在接收所有 http(s) 请求(来自盒子)并包含带有域名的网站domain1.com。 并且computer2有带有域名的网站domain2.com

因此我在nginx 文件夹domain2.com.conf中添加了一个:conf.dcomputer1

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 的反馈,对答案进行了编辑以改进内容

相关内容