NGINX 代理通行证不将 POST 请求转发到 Node.js 后端

问题描述 投票:0回答:1

我正在开发一个使用以下堆栈的学习项目:

  • 前端:React(通过 NGINX 1.26.2 托管)
  • 后端:带有 Express 的 Node.js、PostgreSQL 数据库
  • 反向代理:NGINX

我的目标是通过 NGINX 将 API 请求从前端代理到我的 Node.js 后端。具体来说,我正在使用我创建的 POST 请求提交联系表单。

我的前端代码中处理这个问题的部分是这样的:

        try {
        const response = await fetch('http://localhost:5000/api/contact', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify(formData),
        });

我使用 NGINX 向 Node.js 后端提供静态文件和代理 API 请求,该后端在端口 5000 上运行。这是我的 nginx.conf:

server {
listen 80;
server_name localhost;

# Serve static files for the React frontend
location / {
    root   C:/Users/witte/Documents/Projects/effectief.tech/frontend/build;
    index  index.html index.htm;
    try_files $uri /index.html;
}

# Proxy API requests to Node.js
location /api/ {
    proxy_pass http://localhost:5000;  # Proxy to backend
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

}

error_log logs/error.log debug;

}

后台设置: 在我的 server.js 后端,我正在像这样处理 /contact 路由:

app.post('/api/contact', async (req, res) => {

问题:

当我提交表单时,API 调用会在我的后端注册,并且数据会进入我的数据库。但是我在nginx的访问日志中找不到post请求。

所有使用 GET 检索图像或其他 css 的前端相关调用都会在 access.log 中注册,并且在我构建前端后,可以通过 localhost 访问我的前端,因此我的 nginx.conf 的“location /”部分可以正常工作。

看来 nginx 没有根据配置的“location /api/”部分正确地将请求代理到我的后端。

为了完成这项工作我还缺少什么?

javascript node.js nginx nginx-reverse-proxy
1个回答
0
投票

您可以尝试以下配置并检查错误日志吗?

server
{
    listen 80;
    server_name localhost;

    # Serve static files for the React frontend
    location /
    {
        root C:/Users/witte/Documents/Projects/effectief.tech/frontend/build;
        index index.html index.htm;
        try_files $uri /index.html;
    }

    # Proxy API requests to Node.js
    location /api/
    {
        proxy_pass http://localhost:5000/; # Proxy to backend with trailing slash
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    error_log logs/error.log debug;
}
© www.soinside.com 2019 - 2024. All rights reserved.