node.js - Nginx 反向代理到 node.js 不起作用
问题描述
我有一个以 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);
我究竟做错了什么?
解决方案
发布对我有用的东西,以防它帮助某人。当我将代码移动到 ec2 实例时,这是有效的:
export const environment = { production: false, //apiUrl: 'http://localhost:3000/api' apiUrl: '/api' };
因此,在 localhost apiUrl: 'http://localhost:3000/api 有效,但在服务器上无效。