我正在尝试设置家庭网络服务器。
我的文件夹结构如下:
/home/pi/www/
├── homeGUI
│ ├── backend /* Contains an express server listening on 8080 */
│ ├── frontend /* Contains an Angular application */
│ │ ├── index.html
│ │ └── /* Other .js files */
│ └── scripts
└── index.html
而我的网站配置是这样的:
server{
listen 80;
listen [::]:80;
root /home/pi/www;
index index.html index.htm;
server_name _;
#intended to serve the angular application
location /homeGUI/ {
alias /home/pi/www/homeGUI/frontend/;
try_files $uri $uri/ /homeGUI/frontend/index.html; #this one is causing problems
}
#intended to serve the files in the www folder
location / {
try_files $uri $uri/ index.html;
}
#intended to serve the express server
location /homeGUI/api/ {
proxy_pass http://127.0.0.1:8080
}
}
上述配置可以为所有 3 个内容(静态 index.html、angular 应用程序和 express 服务器)提供服务。
我遇到的问题是,当我直接导航到 Angular 应用程序的路由(或通过在该路由上刷新页面)(es:)时,localhost/homeGUI/route1
这会导致重定向循环,因为它尝试重定向到 /homeGUI/frontend/index.html,然后落入相同的位置规则和循环。
我想要完成的就是将每个请求重定向/homeGUI/*
到/home/pi/www/homeGUI/frontend/index.html
文件,但文件请求除外,/homeGUI/api
该文件请求应该转到端口 8080 上的快速服务器。
任何帮助都值得感激。谢谢。
答案1
您的语句的最后一个元素try_files
应该是 URI。
该文件的URI/home/pi/www/homeGUI/frontend/index.html
为/homeGUI/index.html
不是 /homeGUI/frontend/index.html
。
看这个文件了解详情。
例如:
location /homeGUI/ {
alias /home/pi/www/homeGUI/frontend/;
try_files $uri $uri/ /homeGUI/index.html;
}
上述方法可能有效,但在同一个块中使用alias
和try_files
可能会导致问题,因为这个问题。
您可以try_files
用默认行为和if
块替换您的语句。
例如:
location /homeGUI/ {
alias /home/pi/www/homeGUI/frontend/;
if (!-e $request_filename) { rewrite ^ /homeGUI/index.html last; }
}
看这种警告关于 的使用if
。