angularjs - 使用 Nginx 服务器将 Node 应用程序隔离到单独的 URL

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

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

设置

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

现在我只有一个 Node 应用程序,它在端口 3000 上运行。Nginx 服务器(我将在下面粘贴其配置文件)正在监听端口 4000 并将请求重定向到 3000 上的 Node 应用程序。最后,负载均衡器配置为接受来自端口 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配置文件,但没有任何效果。我尝试的第一件事是将服务器的位置部分更改为/vidzy,而不仅仅是/。但这样做时,该应用程序似乎非常糟糕。

我仍在尝试了解 MEAN 应用程序的组件如何相互交互。看起来问题是在尝试将位置更改为 /Vidzy 时发生的,它使应用程序变得困惑,导致无法使用新的 URL 结构找到位于应用程序的 public 文件夹中的文件。

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

最佳答案

你走在正确的道路上。

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

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

listen 80 default_server;

关于angularjs - 使用 Nginx 服务器将 Node 应用程序隔离到单独的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34942256/

相关文章:

javascript - Zomato api 与 Angular

AngularJS 通过隔离范围进行基于事件的通信

javascript - Momentjs 抓取今天的日期和设置时间使其快进 24 小时

mysql - 使用依赖库编译nginx模块

php - 更改 php.ini 似乎没有效果

javascript - 使用 AngularJS 中的按钮迭代 <option> 值

javascript - Angular-ui datepicker 在输入字段中输入时不允许使用 dd.MM.yyyy 格式

javascript - Node.js 事件流 : Where to setMaxListeners?

node.js - yosemite 升级后 npm 找不到 npm-cli 模块

linux - 重启 AWS Linux 服务器后 nginx 服务无法启动