答案1
对于任何偶然发现这个问题并想要使用 nginx 的人,您可以像设置任何普通代理一样设置它,并且要接受来自后端的自签名证书,您需要提供导出的 pem 证书(可能还有密钥)并关闭 ssl 验证。例如:
...
server {
listen 10.1.2.3:80;
server_name 10.1.2.3 myproxy.mycompany.com;
location / {
proxy_pass https://backend.server.ip/;
proxy_ssl_trusted_certificate /etc/nginx/sslcerts/backend.server.pem;
proxy_ssl_verify off;
... other proxy settings
}
如果您的安全后端使用服务器名称标识 SNI,并且每个 IP/端口对为多个主机提供服务,您可能还需要将其包含proxy_ssl_server_name on;
在配置中。这适用于 nginx 1.7.0 及更高版本。
答案2
我想你可能想要这样的东西(这个例子显然简化了):
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream backend {
server mybackendserver:443;
}
server {
server_name localhost;
listen 443 ssl;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
ssl_verify_client off;
location / {
proxy_pass https://backend;
proxy_set_header Host $http_host;
proxy_set_header X_FORWARDED_PROTO https;
}
}
}
您可能需要更改的唯一事情是使“主机”明确 - 例如,如果您的代理主机名与 nginx 代理服务器上使用的主机名不同。
答案3
对于将来遇到此问题的人,我最终没有使用 nginx。
最终,我使用了“客户端模式”的 stunnel。设置起来非常简单,而且完全满足我的需要。