我有/var/www/html/
index.html
我有/var/www/ai_backend
server.js
server.js 在端口 5000 上运行。因此,如果我从这台机器 curl http://localhost:5000,我会得到响应。
但是如果我从 index.html 向 server_ip/api 发送 post 请求,我会收到错误
POST http://server_ip/api 404 (Not Found)
这是我的 nginx conf 文件
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name <server_ip>; # i have real ip in config file
location / {
# serve static frontend first
try_files $uri $uri/ /index.html;
}
# location ~*^/(api|posts|products) {
location /api {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
答案1
您的配置看起来基本正确,但您可以检查以下几点:
- 确保您的后端服务正在运行并监听 localhost:5000。
- 检查在更改配置文件后是否已重新加载 nginx。您可以在服务器上运行 sudo systemctl reload nginx 来执行此操作。
- 检查 nginx 错误日志,查看是否有任何相关错误消息可以解释为什么代理无法按预期工作。您可以在 /var/log/nginx/error.log 中找到日志。
- 确保您的前端将 POST 请求发送到正确的 URL。根据您的配置,它应该将请求发送到 http://<server_ip>/api。如果您使用的是相对 URL(如 /api),它可能无法正常工作。
- 检查 /var/log/nginx/access.log 中的访问日志,查看请求是否到达 nginx 以及是否正确路由到后端服务。您应该在日志中看到一行,其中包含 HTTP 状态代码和请求的 URL。