我正在开发一个使用以下堆栈的学习项目:
我的目标是通过 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/”部分正确地将请求代理到我的后端。
为了完成这项工作我还缺少什么?
您可以尝试以下配置并检查错误日志吗?
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;
}