쿼리 문자열 매개변수를 제공하도록 nginx 구성

쿼리 문자열 매개변수를 제공하도록 nginx 구성

하나의 NextJs 사이트가 있습니다. 다음 내보내기에서는 Nginx에서 제공할 폴더 하나를 가져옵니다. 아웃/로그인에는 '[[...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에서 제공하려는 외부 폴더"를 언급했기 때문에 대신 디렉토리에 파일을 제공하려는 것입니다.


이 경우 귀하의 예는 제대로 작동하지만try_files규칙은 URL 내에 파일 이름도 제공할 것으로 예상합니다.

따라서 GET을 요청할 때www.mysite.comroot그런 다음 Nginx는 name /, .html또는 .html/404 오류 코드로 실패하는 디렉터리 내부의 경로를 찾으려고 시도합니다 . Path는 루트 내부에 .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, 루트 디렉터리에 있습니까?
    • 그렇다면 다음과 같은 파일이 포함되어 있는지 확인하십시오.index.html또는index.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는 정말 대단하지 않나요?


도움이 되었기를 바랍니다 :)

다음에 대한 자세한 내용도 읽어보세요.try_files그리고Nginx의 함정과 일반적인 실수.

관련 정보