我有一个托管在 nginx 上的 Angular 应用,它与后端 API 通信。后端正在运行,当我访问时,应用也在运行,example.com/
但如果我访问,example.com/custom/path/123
它不会被路由到index.html
,即 Angular 页面。相反,我只得到一个 nginx 404 页面。
/api
我真正想要的是任何传入路线(和路径除外/assets
)都传递到该索引。
在我的配置中我有这个:
server {
root /var/www/example.com/site-root;
server-name example.com;
location / {
try_files $uri $uri/ index.html;
# I also tried:
# try_files $uri$args $uri$args/ index.html;
}
location /assets {
try_files $uri =404;
}
location ~ ^/api/(.*)$ {
proxy_pass http://127.0.0.1:3322/$1;
# a bunch of working api reverse proxy that doesn't seem to be
}
}
这种try_files
方法是我在许多例子中看到的模式,它似乎对其他人都有效。我使用错了吗,或者在这种情况下这是错误的方法?
答案1
的最后一部分try_files
是内部重定向的URI,它应该以 开头/
。因此正确的用法是try_files $uri $uri/ /index.html;
。
但在这种情况下,你可能需要将所有内容重定向到 ,/index.html
而无需尝试查找其他文件。因此,你可以直接使用rewrite
。
你也不需要try_files $uri =404
。这就是 nginx 默认会做的事情。
如果可以不用正则表达式,那么你应该避免在位置中使用正则表达式。
所以我认为你会得到以下结果:
server {
server-name example.com;
root /var/www/example.com/site-root;
location / {
rewrite ^ /index.html break;
}
location /assets/ {
}
location /api/ {
proxy_pass http://127.0.0.1:3322/;
}
}