하나의 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.html
Nginx는 정말 대단하지 않나요?
도움이 되었기를 바랍니다 :)
다음에 대한 자세한 내용도 읽어보세요.try_files그리고Nginx의 함정과 일반적인 실수.