node.js - 具有一个域名的多个node.js项目,每个项目都使用路径 '/'作为基本url。 Nginx 和 Express.js

标签 node.js express nginx path routes

我成功地将多个 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/

相关文章:

node.js - now.js - Hello World 示例 - "require not defined"

node.js - 如何覆盖嵌套的 NPM 依赖版本?

node.js - 使用 MERN 堆栈和 socket.io 进行私有(private)聊天

node.js - 如何在 Jade 模板中预填充编辑页面(Node + Express + Jade)

javascript - 我的快速解析设置有什么问题?

nginx - 在 Nginx 中随机返回备用页面以进行 A/B 测试

nginx - 使用点符号的意外正则表达式结果

node.js - 如何在 phantom 模块中设置用户代理字符串?

node.js - 如何连接到 docker 容器的本地主机(从容器内部)

security - 如何为nginx(虚拟主机)找出合理的内容安全策略来源?