配置 nginx 在连接到上游时使用代理

配置 nginx 在连接到上游时使用代理

在 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 套接字类型

相关内容