angular - nginx 2 个不同应用程序的位置(反应和角度)
问题描述
我有一个 React 应用程序和一个内置在 Angular 中的管理仪表板:
/var/www/example.com/example/web <- 反应
/var/www/example.com/example/admin <- Angular
这是我的 Nginx 配置:
server {
server_name example.com;
index index.html index.htm;
# React
location / {
root /var/www/example.com/example/web/build;
try_files $uri $uri/ /index.html;
}
# Admin
location /admin {
root /var/www/example.com/example/admin/dist;
try_files $uri $uri/ /index.html;
}
}
当我导航到example.com/admin
它时,它会将我重定向到反应应用程序而不是角度应用程序。
我知道这可能以前被问过很多次,但我一整天都在尝试解决这个问题,但没有运气:(
解决方案
出现此问题的原因是try_files
指令的最后一个参数必须是 URI 或 HTTP 错误代码。在您的情况下,通过处理请求,第二个指令http://example.com/admin
的结果 URI将是,接下来将使用第一个 location 块进行处理,并引导您对应用程序做出反应。try_files
/index.html
一种解决方案是将 Angular 应用程序放入admin
react 应用程序文件夹的文件夹中:
server {
server_name example.com;
index index.html index.htm;
# React folder
root /var/www/example.com/example/web/build;
location / {
try_files $uri $uri/ /index.html;
}
# Admin
location /admin {
# angular app must be in the /var/www/example.com/example/web/build/admin folder
try_files $uri $uri/ /admin/index.html;
}
}
这样,第二个try_files
指令的结果 URI 将是/admin/index.html
,这将引导您到角度应用程序索引文件。
第二种解决方案是对alias
第二个位置块使用指令:
server {
server_name example.com;
index index.html index.htm;
# React
location / {
root /var/www/example.com/example/web/build;
try_files $uri $uri/ /index.html;
}
# Admin
location /admin {
alias /var/www/example.com/example/admin/dist;
try_files $uri $uri/ /admin/index.html;
}
}
请注意,http://example.com/admin
请求的结果 URI 将是/admin/index.html
,它仍将由第二个位置块处理并与文件一起提供/var/www/example.com/example/admin/dist/index.html
(如果我使用root
指令而不是指令alias
,则位置前缀/admin
将添加到路径中,并且将在中搜索索引文件/var/www/example.com/example/admin/dist/admin
文件夹)。
在这两种情况下,nginx 将在其中查找它的文件夹中缺少 angular 应用程序索引文件将是 nginx HTTP 500 错误的原因,因为无限重定向到/admin/index.html
URI。
推荐阅读
- algorithm - 请推荐优化的 IP 查找算法和数据结构
- flutter - Flutter Container 图像以全高显示我可以设置图像的高度吗?
- laravel - Laravel - 使用地图收集不覆盖先前的对象值
- php - 无法解析 [Illuminate\Mail\TransportManager] 的 NULL 驱动程序。用于流明框架
- json - 未捕获的 SyntaxError:剑道 ui 中的意外数字
- python - Elasticsearch 没有显示任何命中。Python 查询是正确的
- java - 如何多次重复使用几条线?
- android - 什么是校验和不匹配警告?
- html - Firefox 浏览器跨度样式颜色错误(红色)。它有什么问题?
- firebase - 如果我不升级,我以前的项目会不再起作用吗?