網上有很多 Angular/Nginx 示例,但我仍然無法使我的配置作業。我使用 Angular 13。
在angular.json:
outputPath是“www”baseHref是“/my-project/”
對于資產:
"assets": [
{
"glob": "**/*",
"input": "src/assets",
"output": "assets"
},
}
我跑ng build。檔案在 下生成www,其中:
index.htmlruntime.jspolyfills.jsmain.jsstyles.cssassets/...
我的應用程式有很多路線。例如:
/my-project/page1/my-project/page2/my-project/page3
我的問題:
如何配置nginx.conf使應用程式的動態路由全部由 處理,但直接提供index.html同一檔案夾內的常規檔案?www
你經常在網上看到的nginx.conf例子類似于:
server {
// ...
root /usr/src/app/www;
location /my-project {
try_files $uri /index.html;
}
location /my-project/assets {
alias /usr/src/app/www/assets;
}
}
但是當我嘗試這樣做時,似乎即使是常規檔案也被重定向到index.html并回傳了 HTML!
例如:http://localhost/my-project/runtime.js將回傳www/index.html不是來自 .js 的 javascript的完整 HTML www/runtime.js。
什么不見??了?
uj5u.com熱心網友回復:
那是因為您不了解 nginxroot和指令的實際作業原理alias。檢查和你自己try_files之間的區別 ,并注意指令的最后一個引數與前面的所有相矛盾的都被視為新的 URI 來重新評估。你應該做的就是使用as your too。之后,假設您的應用程式的完整路徑是,您可以使用以下配置:rootaliastry_filesmy_projectoutputPath/usr/src/app/my_project
location /my_project/ {
root /usr/src/app;
try_files $uri /my_project/index.html;
}
這樣,您的應用程式將在http://localhost/my-project/URL 下可用(注意尾部斜杠)。您的全域根目錄可以設定為任何其他目錄,它不會影響您的應用程式。如果您希望它在缺少尾部斜杠的情況下仍然可用,您可以添加一個額外的重定向:
location = /my_project {
return 301 /my_project/;
}
如果您的檔案結構允許您將目錄放在全域 Web 根目錄下,事情會更簡單,因為 nginx 會自動進行重定向my_project,所以不需要上面的塊(以及附加指令)。root
如果由于某種原因您不能將您的應用程式放入名為 的檔案夾my_project中,您可以使用alias指令。但是,最好避免這種情況,因為當您一起使用和指令時會產生一些副作用。盡管如此,角度應用程式所需的配置不應面臨任何這些副作用,因此假設您的專案路徑是以下配置應該可以作業:aliastry_files/usr/src/app/www
location /my_project/ {
alias /usr/src/app/www/;
try_files $uri /my_project/index.html;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/474906.html
上一篇:頻道Djangonginx502
