【问题标题】:Nginx reverse proxy to node.js not workingNginx 到 node.js 的反向代理不起作用
【发布时间】:2021-09-15 20:36:09
【问题描述】:

我有一个以 Postgres 作为数据库的角度和节点应用程序。我正在将它们部署到 ec2 实例上的 docker 容器中。 ec2 上的 Nginx 反向代理没有将请求路由到节点。相同的设置适用于我的本地机器。我收到的错误消息是:“XMLHttpRequest cannot load http://localhost:3000/api/user/login due to access control checks”。这是我的 docker-compose 文件:

version: '3.3'

networks:
  network1:

services:
  api-service:
    image: backend
    environment:
      PORT: 3000 
    volumes:
      - ./volumes/logs:/app/logs
    ports:
      - 3000:3000
    restart: always
    networks:
      - network1

  nginx:
    image: frontend
    environment:
      USE_SSL: "false"
    volumes:
      - ./volumes/logs/nginx:/var/log/nginx/
      - ./volumes/ssl/nginx:/etc/ssl/
    ports:
      - 80:80
      - 443:443
    restart: always
    networks:
      - network1

而我的Nginx.conf如下:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    server {
        listen       80;
    

        location / {
            root /myapp/app;
            try_files $uri $uri/ /index.html;


            proxy_set_header Upgrade    $http_upgrade;
            proxy_set_header Connection $http_connection;
            proxy_set_header Host       $host;
        }

        location /api/ {
            proxy_pass http://api-service:3000;
        }
    }
}


我的后端 api url 是:(注释行都是我尝试过的)

export const environment = {
  production: false,
   //apiUrl: 'http://api-service'
  // apiUrl: '/api-service/api'
  // apiUrl : 'http://' + window.location.hostname + ':3000'
  //apiUrl: 'http://localhost:3000/api'
  apiUrl: 'http://localhost:3000'
};

and in my angular service I am using:
const BACKEND_URL = environment.apiUrl + "/api/user/";

and in my backend app.js:

app.use("/api/user/", userRoutes);

我做错了什么?

【问题讨论】:

    标签: node.js docker nginx reverse-proxy nginx-reverse-proxy


    【解决方案1】:

    发布对我有用的东西,以防它对某人有所帮助。当我将代码移动到 ec2 实例时,以下是有效的:

    导出常量环境 = { 生产:假, //apiUrl: 'http://localhost:3000/api' apiUrl: '/api' };

    因此,在 localhost apiUrl 中:'http://localhost:3000/api 有效,但在服务器上无效。

    【讨论】:

      猜你喜欢
      • 2019-06-15
      • 2019-06-05
      • 2020-06-23
      • 1970-01-01
      • 2012-12-11
      • 2019-07-28
      • 2017-06-29
      • 2019-05-03
      • 2017-10-22
      相关资源
      最近更新 更多