我正在为angular
中的同一server
块提供多个Nginx
个应用。因此,为了让用户直接浏览我声明的某些自定义Angular
路由而不必通过主页(并避开404页面),我将这些路由从nginx转发到每个角度应用程序index.html
,我为每个try_files
添加了location
:
server {
listen 80;
server_name website.com;
# project1
location / {
alias /home/hakim/project1/dist/;
try_files $uri /index.html;
}
# project2
location /project2/ {
alias /home/hakim/project2/dist/;
try_files $uri /index.html;
}
# project3
location /project3/ {
alias /home/hakim/project3/dist/;
try_files $uri /index.html;
}
}
此解决方案在转到Angular路由时避免了404错误,但问题是当我浏览到/project2/
或/project3/
时,它会重定向到/project1/
。这显然不是预期的,因为我希望每个位置都转发到适当项目的/project-i/index.html
。
答案 0 :(得分:3)
希望这对某人有帮助
第1步-构建所有项目
ng build --prod --base-href /project1/
ng build --prod --base-href /project2/
ng build --prod --base-href /project3/
第2步-配置您的nginx,请注意在try_files
部分添加的更改
server {
listen 80;
server_name website.com;
# project1
location / {
alias /home/hakim/project1/dist/;
try_files $uri/ /project1/index.html;
}
# project2
location /project2/ {
alias /home/hakim/project2/dist/;
try_files $uri/ /project2/index.html;
}
# project3
location /project3/ {
alias /home/hakim/project3/dist/;
try_files $uri/ /project3/index.html;
}
}
第3步-重新加载nginx配置
sudo service nginx reload
答案 1 :(得分:1)
在单个域上拥有多个独立应用程序通常是一种糟糕的安全措施。
但是,我相信你所面对的是try_files
的工作方式的特殊性 - 根据http://nginx.org/r/try_files,
如果未找到任何文件,则会进行内部重定向到最后一个参数中指定的uri。
实际上,这意味着如果在/index.html
规范之后会有一个额外的参数(基本上就是任何东西),那么你的代码就会按预期工作;但是,由于缺少任何此类最终参数,在每种情况下会发生的情况是,所有内容都会重定向回/
location
,就像发出GET /index.html HTTP/1.1
请求一样(除了它都是在nginx内部完成的。)
因此,作为一种解决方案,您可以修复内部重定向的路径以保持在同一location
内(例如/projectX/index.html
),或者保留路径,但是创建最后一个参数返回一个错误代码(例如,=404
,只要您的文件始终存在,就不应该触发它。)
例如,try_files $uri /projectX/index.html;
,
或者,try_files $uri /index.html =404;
。
如:
location /projectX/ {
alias /home/projectX/dist/;
try_files $uri /projectX/index.html; # last param is internal redirect
}
或者:
location /projectX/ {
alias /home/projectX/dist/;
try_files $uri /index.html =404;
}
总之,请注意/projectX/index.html
仅作为最后一个参数,而/index.html
仅作为非最终参数。
答案 2 :(得分:1)
尝试基本上不同的应用程序的multilingual Angular application AOT builds解决方案 - 确定多次使用相同的应用程序,使用不同语言在不同目录中的不同语言构建。
答案 3 :(得分:0)
尝试添加到项目2:
<base href="/project2">
答案 4 :(得分:0)
将第一个位置更改为:
df=["Ycor"]=df["Coordinates"].apply(lambda x: x.latitude if x != None else None)
当前区块匹配所有&#39; /&#39;它是第一个与请求相匹配的东西。
答案 5 :(得分:0)
尝试使用--base.href = / projectx /构建应用程序,例如:
ng build --base.href=/project1/
ng build --base.href=/project2/
ng build --base.href=/project3/