
server {
listen 80; ## listen for ipv4; this line is default and implied
#listen [::]:80 default ipv6only=on; ## listen for ipv6
server_name public;
root /var/www/public;
location = /gameserver/
{
root /var/www/public/gameserver;
index index.html;
if ($request_filename !~* [pk3]$)
{
rewrite ^ /404.html;
}
}
}
저는 Nginx를 처음 접했고 지금 몇 시간 동안 노력했지만(Google 및 설명서 읽기) nginx에서 .pk3을 제외한 모든 파일 확장자를 거부하는 방법을 알 수 없습니다.
/var/www/gameserver/는 .pk3만 다운로드할 수 있는 공생 링크를 가리킵니다.
이것은 돈을 들이지 않고도 친구들과 즐거운 시간을 보낼 수 있는 작은 게임 서버가 될 것입니다.
시간 내 줘서 고마워,
비탈리
답변1
다음과 같이 중첩된 위치를 사용하여 이를 달성할 수 있습니다.
위치 /게임서버/ { 루트 /var/www/public; 색인 index.html; 위치 ~ \.pk3$ { } 403을 반환합니다. }
nginx는 음의 정규식 일치를 지원하지 않기 때문에 빈 위치 블록은 의도적이며 필수입니다. 파일이 /gameserver/ 아래에 있고 .pk3으로 끝나면 빈 위치 블록이 일치하고 요청이 승인됩니다. 물론 여기에 추가 지시어를 추가할 수도 있습니다. 파일이 /gameserver/ 아래에 있고~ 아니다.pk3으로 끝나면 내부 위치 블록이 일치하지 않고 대신 반환 403(액세스 금지)이 실행됩니다.
nginx의 일반적인 규칙은 "if"를 피하고 어떤 형태의 경로 일치가 필요한 경우 (중첩된) 위치 블록에 의존하는 것입니다.