配置 nginx 來提供查詢字串參數

配置 nginx 來提供查詢字串參數

我們有一個 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.htmlNginx 很棒,不是嗎?


希望這可以幫助 :)

另請閱讀更多有關嘗試文件Nginx 陷阱與常見錯誤

相關內容