将 https 客户端的 header 转发到后端应用程序

Forward https client's header to backend application

我正在使用 nginx 作为后端应用程序的反向代理。 - 客户端使用 certificate-A.pem 连接到 nginx,nginx 使用与根 CA 链接的中间 CA 来验证客户端(一切正常)。

问题来了: - nginx 必须使用与真实主机相同的 header 将请求转发到后端应用程序(包含 certificate-A.pem)。转发到后端应用程序的数据包必须与 nginx 接收到的客户端数据包相同。

为什么?因为我有大量的客户端要管理(每个客户端都有由同一个中间 CA 颁发的不同证书),后端需要证书(用来做东西)但我想 pre-verify 这个证书nginx(真的最快)

我厌倦了不同的配置,但我不知道如何 proxy_set 正确的 header

upstream proxy_server {
 server     127.0.0.1:8443;  <---my backend application
}

server {
listen   443 ssl;
listen   [::]:443;

ssl_certificate   /home/mender/Projects/utility-scripts/gwsw-root-gen/cert_tree/intermediate_CA/gwsw/x509-med_ca_gwsw.pem;

ssl_certificate_key   /home/mender/Projects/utility-scripts/gwsw-root-gen/cert_tree/intermediate_CA/gwsw/x509-med_ca_gwsw-key.pem;

location / {
proxy_pass   https://proxy_server;
proxy_redirect          off;
proxy_set_header    Host             $host;
proxy_set_header    X-Real-IP        $remote_addr;
proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
proxy_set_header    X-Custom-Referrer $http_x_custom_referrer;
   }
}

无法验证证书。

The packets forwarded to the backend application must be identical to the clients packets recived by nginx.

如果是这种情况,我相信您只需要在 stream 模式下使用 nginx 作为 TCP 代理。我不知道您是否能够在 nginx 端进行任何验证,但这完全取决于后端应用程序。

nginx 设置 SSL 连接并且 将加密数据传递到后端是不可能的(我不认为)。