带有前端和后端服务器的Nginx



我正在开发一个CTF,它将被下载并在VM上本地运行。CTF的IP地址将因每个用户而异。我有一个在3000端口上运行的前端服务器(React.js(。我正在向后端服务器提出这样的请求:

fetch("http://localhost:5000/login", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(data),
})

后端服务器(express.js(正在端口5000上运行。我已经将nginx配置为将端口3000请求路由到端口80。

listen 80 default_server;
listen [::]:80 default_server;
location / {
proxy_pass http://localhost:3000; 
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;
}

当CTF启动时,用户将获得一个私有IP,如192.168.2.136。我的问题是,我如何向后端发出请求,因为fetch("http://localhost:5000/login)不会从后端获取。我需要做fetch("http://192.168.2.136:5000/login才能工作。这个问题可以用nginx解决吗?或者我需要研究一种方法来在虚拟机启动时获得私有IP地址吗?

对于任何有同样问题的人,我通过在nginx中使用服务器名称并将后端流量正确路由到我的后端服务器来修复它,如下所示:

server {
listen 80;
server_name resume.tm;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
}
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;
}
}

最新更新