我成功地将多个 node.js 项目反向代理到不同的端口,如下面设置的 Nginx 中所示。然而,我想要完成的任务是,当 url 到达 Node.js 服务器时将其视为根。
例如,当有人访问 mydomain.com/projects/music_player 时,是否可以让 Express 应用程序将请求 URL 查看为“/”而不是“/projects/music_player”。
我当前的 Nginx 设置和 Express 配置示例如下。
Nginx:
server {
listen 80;
server_name mydomain_name.com;
location / {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /projects/music_player/ {
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
我想这样做:
app.get("/", function (req, res) {
res.sendFile("index.html");
});
app.listen(8000);
而不是这个:
app.get("/projects/music_player", function (req, res) {
res.sendFile("index.html");
});
app.listen(8000);
我不确定这是否可能。原因是我希望我的每个 Node node.js/express 应用程序都可以作为独立应用程序部署,而无需重组代码。我试图避免每个项目都有一堆域名,而且我认为这会很酷。
最佳答案
是的!当然可以。
我认为最好的方法是将整个程序重写为一个 Express 应用程序,但你说你想避免这种情况。
然后我认为当前设置的捷径是让每个程序监听不同的端口,然后在 nginx 中将路由映射到它们。
例如:
dog.js
app.get("/", function (req, res) {
res.sendFile("dog.html");
});
app.listen(8001);
cat.js
app.get("/", function (req, res) {
res.sendFile("cat.html");
});
app.listen(8002);
最后在你的 nginx 配置文件中:
server {
listen 80;
server_name mydomain_name.com;
location / {
proxy_pass http://localhost:8001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /cat/ {
rewrite /cat/ / break;
proxy_pass http://localhost:8002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
请注意重写指令,这可以防止将 /cat/
位置发送到仅需要 /
路由的 cat.js
应用。
关于node.js - 具有一个域名的多个node.js项目,每个项目都使用路径 '/'作为基本url。 Nginx 和 Express.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38965142/