在 Google 上很难找到某些东西 —— 仅从 nginx 和代理就会获得太多结果。
因此,我们有一个 nginx-docker-container,它可以提供一些静态文件,并应该与特定位置的后端服务器进行通信。我们将 http_proxy 和 https_proxy 提供给每个 docker-compose 到容器的环境中
尝试使用 curl 连接成功 - 这是因为 http_proxy/https_proxy 环境
我们尝试不使用环境变量,并将代理作为参数传递给 curl 来重现该行为 - 因此使用此代理与上游通信非常重要
这是 nginx-config 的一部分
server {
listen test.virtual:443 ssl http2;
...
location /up {
proxy_pass https://backend:12345
}
当请求https://test.virtual/up我们在 nginx 日志中收到错误:连接被拒绝
但 curl 可以连接:
curl -k https://后端:12345
那么我该如何配置 nginx 来使用这个代理呢?
答案1
我在 Centos 上运行 nginx 时遇到了同样的问题,这是因为您尝试设置与自定义端口 80 和 443 不同的代理通道。要解决此问题,您必须启用 SElinux 标志 httpd_can_network_connect(默认情况下禁用),如 nginx 文档中所述 => https://www.nginx.com/blog/using-nginx-plus-with-selinux/
setsebool -P httpd_can_network_connect 1
启用此标志(httpd_can_network_connect)允许标有 httpd_t 上下文(例如 NGINX)的进程连接到所有具有 port_type 属性的 TCP 套接字类型