如何使用 Ngnix 作为反向代理访问 OpenShift (OKD) 4.X?
我已经尝试了数百个反向代理 (Nginx) 设置,但都失败并出现错误“应用程序不可用”当我们访问oauth-openshift.apps.mbr.some.dm路线。
笔记:如果我们直接访问此路由(不使用反向代理),则不会出现此问题。也许尚未发送解析路线所需的某些信息。
这是我们正在使用的基本的配置模板...
server {
access_log /var/log/nginx/apps.mbr.some.dm-access.log;
error_log /var/log/nginx/apps.mbr.some.dm-error.log;
server_name ~^(?<subdomain>.+)\.apps\.mbr\.some\.dm$;
location / {
proxy_pass https://10.2.0.18:443;
proxy_set_header Host $subdomain.apps.mbr.some.dm;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
}
listen 443;
ssl_certificate /etc/letsencrypt/live/apps.mbr.some.dm/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/apps.mbr.some.dm/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
我们还测试了这些参数并发现了一些问题,如下所示......
server {
[...]
location / {
[...]
proxy_ssl_certificate /etc/nginx/backend_ss_certs/apps.mbr.some.dm.crt;
proxy_ssl_certificate_key /etc/nginx/backend_ss_certs/apps.mbr.some.dm.key;
proxy_ssl_trusted_certificate /etc/nginx/backend_ss_certs/apps.mbr.some.dm.crt.key.pem;
proxy_ssl_ciphers HIGH:!aNULL:!MD5;
proxy_ssl_protocols TLSv1.2 TLSv1.3;
proxy_ssl_server_name on;
proxy_ssl_session_reuse on;
proxy_ssl_verify on;
[...]
}
[...]
}
证书应用程序.mbr.some.dm.crt,应用程序.mbr.some.dm.key,应用程序.mbr.some.dm.crt.key.pem是 OpenShift (OKD) 用来允许访问资源 (HTTPS) 的自签名证书。但是,如果我们尝试将这些证书与反向代理 (Nginx) 一起使用,则会发生以下错误 (“Bad Gateway”)...
2021/07/22 17:36:11 [error] 6999#6999: *1 upstream SSL certificate verify error: (21:unable to verify the first certificate) while SSL handshaking to upstream, client: 177.25.231.233, server: ~^(?<subdomain>.+)\.apps\.mbr\.brlight\.net$, request: "GET /favicon.ico HTTP/1.1", upstream: "https://10.2.0.18:443/favicon.ico", host: "oauth-openshift.apps.mbr.some.dm", referrer: "https://oauth-openshift.apps.mbr.some.dm/oauth/authorize?client_id=console&redirect_uri=https%3A%2F%2Fconsole-openshift-console.apps.mbr.some.dm%2Fauth%2Fcallback&response_type=code&scope=user%3Afull&state=ff6f3064"
注意:我们测试了应用程序.mbr.some.dm.crt和应用程序.mbr.some.dm.crt.key.pem使用证书卷曲并且都运行良好。
加:我们无法定义一种方法来诊断/观察(日志)请求到达路由时出现的问题oauth-openshift.apps.mbr.some.dm。我认为这可以帮助我们弄清楚到底出了什么问题。