【问题标题】:Using Nginx server to isolate Node apps to separate URLs使用 Nginx 服务器隔离 Node 应用以分离 URL
【发布时间】:2016-04-28 18:58:33
【问题描述】:

我正在学习开发和部署 MEAN 堆栈应用程序的基础知识,因此如果有错误,请更正其中的任何部分。我将解释我当前的设置,以及我正在尝试做的事情。

设置

我有一个 AWS EC2 实例,我希望将其用于我的所有 MEAN 堆栈应用程序,以及一个主要用于处理 SSL 请求的负载均衡器。 EC2 实例运行的是 Ubuntu,我在上面安装了 Node 和 Nginx。

现在我只有一个 Node 应用程序,它在端口 3000 上运行。Nginx 服务器(我将在下面粘贴的配置文件)正在侦听端口 4000 并将请求重定向到 3000 上的节点应用程序。最后,负载均衡器被配置为接受来自端口 80 和 443 的请求,并将它们都定向到 4000 的 Nginx 服务器。所以,基本上:

HTTP (80) ----
              |
               --> Load Balancer --> Nginx (4000) --> Node App (3000)
              |
HTTPS (443) -- 

这是我目前正在使用的完整 Nginx 配置文件:

user ubuntu;
worker_processes 1;
pid /run/nginx.pid;

events {
    worker_connections 1024;
    # multi_accept on;
}

http {
    server_names_hash_bucket_size 64;

    gzip on;
    gzip_comp_level 6;
    gzip_vary on;
    gzip_min_length  1000;
    gzip_proxied any;
    gzip_types text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_buffers 16 8k;

    upstream vidzyApp {
        server localhost:3000;
    }

    server {
        listen 4000;
        server_name <domain>.com *.<domain>.com;

        root    /home/ubuntu/server;

        error_page 404 /default.html;
        error_page 403 /default.html;

        location / {
            proxy_pass http://vidzyApp;
            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;
        }
    }
}

我正在运行的 Node 应用程序是按照教程制作的应用程序,名为 Vidzy。如果我现在通过 HTTP 或 HTTPS 访问我的网站,一切都运行良好。但是,这就是我想要做的。

问题

基本上,我希望能够运行多个 MEAN 应用程序,这些应用程序可通过同一域上的不同 URL 访问。例如,要访问 Vidzy,我想访问 http://[domain].com/vidzy/

我尝试以各种方式自己修改 Nginx 配置文件,但没有任何效果。我尝试的第一件事是将服务器的 location 部分更改为 /vidzy 而不仅仅是 /。但是这样做,该应用程序似乎非常糟糕。

我仍在尝试了解 MEAN 应用程序的组件如何相互交互。似乎是在尝试将位置更改为 /Vidzy 时出现问题,它以这样一种方式使应用程序混乱,导致应用程序的 public 文件夹中的文件无法可以使用新的 URL 结构找到。

我正在做的事情是否可行?如果是这样,我搞砸了多少?

【问题讨论】:

  • 我不熟悉 MEAN 堆栈,但您可以尝试 proxy_pass http://vidzyApp/; 以确保 location /vidzy/ 映射到 Node 应用程序的根目录。确保在两个 URI 上都以 / 结尾。

标签: angularjs node.js nginx amazon-ec2 mean-stack


【解决方案1】:

你在正确的轨道上。

每个虚拟主机都需要一个server { ... } 块。 server_name 用于决定哪个服务器块适用于传入请求中的哪个主机名。

第一个应该设置为处理意外请求的那个,您可能希望使用503 Service Unavailable404 Not Found 使其返回一个通用错误页面,因为这是一个您不会感兴趣的请求处理中(搜索蜘蛛、机器人或其他人错误配置的结果)。在第一个server { ... } 块中:

listen 80 default_server;

【讨论】:

    猜你喜欢
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多