如何修复 nginx 中的 502 Bad Gateway 错误?

How to fix 502 Bad Gateway error in nginx?

我有一个服务器运行宁docker-compose。 Docker-compose 有 2 个服务:nginx(作为反向代理)和 back(作为处理 2 个请求的 api)。另外,还有一个数据库不在服务器上,而是单独存在的(数据库即服务)。

后台处理的请求数:

  1. get('/api') - 后台服务简单地回复“API is 运行ning”
  2. get('/db') - 后台服务向外部数据库发送一个简单查询 ('SELECT random() as random, current_database() as db')

请求 1 - 工作正常,请求 2 - 后台服务崩溃,nginx 继续工作,控制台出现 502 Bad Gateway 错误。

这些都是相当模糊的错误。而且我不知道还有什么方法可以接近它们,因为代码不在容器中,没有 Nginx 并且使用相同的数据库,它可以正常工作。

我尝试过的:

  1. 增加内核和 RAM 的数量(现在是 2 个内核和 4 GB 的 Ram);
  2. add/remove/change proxy_read_timeout、proxy_send_timeout 和 proxy_connect_timeout 参数;
  3. 通过 postman 和 curl 测试 www.test.com/db 请求(失败并出现相同的错误);
  4. 运行 没有容器的本地计算机上的代码,使用相同的池和相同的 ip 组合并连接到相同的数据库(一切正常,两个请求都可以工作并发送你需要的东西);
  5. 更改参数worker_processes(测试值为 1 和 auto);
  6. add/remove 属性 proxy_set_header 主机 $http_host,将 $http_host 替换为“www.test.com”。

问题: 我还能尝试什么来修复错误并使数据库请求正常工作?

我的nginx.conf:

worker_processes  1;
events {
  worker_connections  1024;
}    
http{
  upstream back-stream {
    server back:8080;
  }
  server {
    listen 80;
    listen [::]:80;
    server_name test.com www.test.com;
    location / {
      root   /usr/share/nginx/html;
      resolver 121.0.0.11;
      proxy_pass http://back-stream;
    }
  }
}

我的docker-compose.yml:

version: '3.9'
services:
  nginx-proxy:
    image: nginx:stable-alpine
    container_name: nginx-proxy
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    networks:
       - network
  back:
    image: "mycustomimage"
    container_name: back
    restart: unless-stopped
    ports:
      - '81:8080'
    networks:
       - network
networks:
  network:
    driver: bridge

如果需要,我可以上传其他文件。仅考虑到代码在容器中无法正常工作这一事实,问题在于设置容器。

如有任何帮助,我将不胜感激。

后面的代码:here

错误的原因是这样的:我忘记将我的服务器的ip添加到数据库集群的允许地址列表中。