我們有一個 NextJs 站點,下次匯出時我們會得到一個要從 Nginx 提供服務的 out 資料夾。在 out/login 中有一個「[[...parameter]].html」。當我們使用 pm2 部署網站時,如果我們點擊 url“serverIP:port/login/programID/applicant”,它就會正常工作
但是當透過 nginx 提供服務時,它不起作用。
下面是nginx設定檔內容:
伺服器{
listen 7001;
server_name server_ip;
root /var/www/html/out/;
location / {
try_files $uri $uri.html $uri.html/ =404;
}
}
請幫忙。我是 nginx 的新手,所以遇到了一些困難。
答案1
查詢字串是指您在 URL 之後提供的 GET 參數,例如?name=foo
。我的猜測是,您希望在目錄中提供文件,因為您提到「我們希望從 Nginx 提供服務的 out 資料夾」。
在這種情況下,您的範例應該可以正常工作,但是您的嘗試文件規則要求您還在 URL 中提供檔案名稱。
所以當你請求 GET 時www.mysite.com然後 Nginx 嘗試在目錄中尋找root
名稱為/
、的路徑.html
,.html/
否則失敗並顯示 404 錯誤代碼。路徑.html/
指的是根目錄內命名的目錄.html
,可能是個錯誤。
如果您index.html
在指定的根目錄中有一個名為的文件,則以下請求將與其匹配:
GET www.mysite.com/index.html
(因為$uri
)GET www.mysite.com/index
(因為$uri.html
)
您可能正在尋找的是這樣的:
location / {
root /var/www/html/out;
index index.html index.htm;
try_files $uri $uri/ =404;
}
這會執行以下操作:
- 是否有一個實際的文件,由$uri,在你的根目錄中 - 然後提供這個。
- 是否有目錄路徑,指定為$uri,在你的根目錄中?
- 如果有,檢查是否包含名為索引.html或者索引.htm- 然後上這個。
- 以上都不是,回傳404。
所以GET www.mysite.com
會嘗試在你的根目錄中找到一個index.html
檔案index.htm
。
如果您仍然指的是查詢字串,您可以編寫如下內容:
location / {
root /var/www/html/out;
try_files /$arg_file =404;
}
然後請求就像在根目錄中GET www.mysite.com?file=index.html
搜尋檔案一樣。 index.html
Nginx 很棒,不是嗎?
希望這可以幫助 :)
另請閱讀更多有關嘗試文件和Nginx 陷阱與常見錯誤。