我正在学习开发和部署 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 Unavailable
或 404 Not Found
的通用错误页面,因为这是您不感兴趣处理的请求(搜索蜘蛛、机器人或其他人错误配置的结果)。在第一个 server { ... }
block 中:
listen 80 default_server;
关于angularjs - 使用 Nginx 服务器将 Node 应用程序隔离到单独的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34942256/