クエリ文字列パラメータを提供するように nginx を構成する

クエリ文字列パラメータを提供するように nginx を構成する

NextJs サイトが 1 つあり、次のエクスポートで Nginx から提供したい out フォルダーが 1 つ取得されます。out/login には '[[...parameter]].html' が 1 つあります。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 から提供したいフォルダー」について言及しているので、代わりにディレクトリ内のファイルを提供したいのだと思います。


この場合、あなたの例は問題なく動作するはずですが、試すファイルルールでは、URL 内にファイル名も指定する必要があります。

GETをリクエストする場合ホームページrootNginx は、または のいずれかの名前を持つディレクトリ内のパスを検索しようとするか、/404エラー コードで失敗します。パスは、ルート内のという名前のディレクトリを参照しており、おそらく間違いです。.html.html/.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またはインデックス- それではこれをお出しください。
  • 上記のいずれでもない場合は、404 を返します。

したがって、ルート内でGET www.mysite.comファイルを探してみてください。index.htmlindex.htm


それでもクエリ文字列を意味している場合は、次のように記述できます。

location / {
    root /var/www/html/out;
    try_files /$arg_file =404;
}

次に、ルート内のGET www.mysite.com?file=index.htmlファイルを検索するように要求しますindex.html。Nginx は素晴らしいですね。


お役に立てれば :)

さらに詳しく試すファイルそしてNginx の落とし穴とよくある間違い

関連情報