-
location directive웹서버/nginx 2024. 2. 12. 17:02
클라이언트 요청을 받은 후에 해당 요청을 처리하는 방법을 정의하는 지시문입니다.
이를 통해 특정 URL 패턴에 대한 요청을 다르게 처리하거나 조건에 따라 다른 동작을 취할 수 있습니다.
정의:
location 블록은 다음과 같이 정의됩니다
location [modifier] pattern {
...
}- modifier: 선택적으로 사용되며, ~, ~*, ^~, =, @ 등의 수정자가 올 수 있습니다. 각각은 다른 용도로 사용됩니다.
- pattern: 요청 URL을 매칭하는데 사용됩니다. 정규 표현식을 사용하여 패턴을 지정할 수도 있습니다.
설명:
location 블록은 주어진 패턴에 일치하는 요청을 처리합니다. 패턴은 클라이언트 요청의 URL 경로와 일치하며,
이에 따라 다른 동작을 정의할 수 있습니다.
location 블록은 다양한 디렉티브를 사용하여 요청을 처리하거나 프록시, 리다이렉션 등의 작업을 할 수 있습니다.
사용예:
server {
listen 80;
location / {
# 기본적으로 모든 요청을 처리하는 블록
root /var/www/html;
index index.html;
}
location /images/ {
# /images/ 경로에 대한 요청을 처리하는 블록
alias /var/www/images/;
}
location ~ \.php$ {
# .php 확장자로 끝나는 요청을 처리하는 블록
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
location /admin/ {
# /admin/ 경로에 대한 요청을 처리하는 블록
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
} auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}- 첫 번째 location / 블록은 기본적으로 모든 요청을 처리하고 /var/www/html 디렉터리에서 정적 파일을 제공합니다.
- 두 번째 location /images/ 블록은 /images/ 경로에 대한 요청을 처리하고 /var/www/images/ 디렉터리에서 이미지 파일을 제공합니다.
- 세 번째 location ~ \.php$ 블록은 .php 확장자로 끝나는 요청을 처리하고 PHP를 실행하기 위한 설정을 포함합니다.
- 네 번째 location /admin/ 블록은 /admin/ 경로에 대한 요청을 처리하고 HTTP 기본 인증을 사용하여 접근을 제한합니다.
modifier: 선택적으로 사용되며, ~, ~*, ^~, =, @ 등의 수정자가 올 수 있습니다.
수정자를 사용하면 요청을 보다 정확하게 매칭하거나 처리하는 방법을 제어할 수 있습니다.
- =: 정확한 문자열 일치
- 예: location = /about은 정확히 /about에 대한 요청에만 매칭됩니다.
- 이 모드에서는 정적 파일을 제공하는 것이 일반적입니다.
- location = /about {
# /about에 대한 요청만 처리
...
}
- ~: 대소문자를 구분하는 정규 표현식 일치
- 예: location ~ \.php$은 .php로 끝나는 경로에 대한 요청에 매칭됩니다.
- 이 모드에서는 대소문자를 구분하는 정규 표현식을 사용하여 요청을 매칭합니다.
- location ~ \.php$ {
# .php로 끝나는 경로에 대한 요청 처리
...
}
- ~*: 대소문자를 구분하지 않는 정규 표현식 일치
- 예: location ~* \.(png|jpg|jpeg)$은 .png, .jpg, .jpeg로 끝나는 경로에 대한 요청에 매칭됩니다.
- 이 모드에서는 대소문자를 구분하지 않는 정규 표현식을 사용하여 요청을 매칭합니다.
- location ~* \.(png|jpg|jpeg)$ {
# .png, .jpg, .jpeg로 끝나는 경로에 대한 요청 처리
...
}
- ^~: 가장 특별한 위치 매칭
- 예: location ^~ /images/은 /images/로 시작하는 경로에 대한 요청에 매칭됩니다. 정규 표현식은 아니지만, 이 위치가 우선하여 가장 먼저 매칭됩니다.
- 이 모드는 정적 파일을 제공하는데 유용합니다.
- location ^~ /images/ {
# /images/로 시작하는 경로에 대한 요청 처리
...
}
- @: 네임드 위치
- 예: location @proxy는 @proxy라는 네임드 위치를 참조합니다. 이 위치는 일반적으로 다른 서버 블록으로 프록시 요청을 전달하는 데 사용됩니다.
- 이 모드는 주로 프록시 서버 설정에 사용됩니다.
- location @proxy {
# 네임드 위치 @proxy에서 정의된 처리 수행
...
}
Nginx에서는 location 블록의 우선순위를 결정하는 여러 가지 규칙이 있습니다. 이러한 규칙에 따라 Nginx는 요청을 가장 적절한 location 블록에 매칭시킵니다. 다음은 Nginx에서 location 블록의 우선순위를 정하는 규칙입니다:
- 정확한 문자열 일치(=): = 수정자를 사용한 location 블록이 가장 높은 우선순위를 가집니다. 따라서 정확히 일치하는 URL에 대한 요청은 이러한 location 블록에 매칭됩니다.
- 가장 특별한 위치 매칭(^~): ^~ 수정자를 사용한 location 블록이 다음으로 높은 우선순위를 가집니다. 이러한 location 블록은 특정한 접두사로 시작하는 모든 요청에 대해 일치하므로, 보다 구체적인 매칭을 제공합니다.
- 정규 표현식 매칭(~, ~*): 정규 표현식 수정자를 사용한 location 블록이 그 다음 우선순위를 가집니다. 이러한 location 블록은 정규 표현식에 따라 요청을 매칭합니다. ~는 대소문자를 구분하여 매칭하고, ~*는 대소문자를 구분하지 않고 매칭합니다.
- 일반적인(prefix) 매칭: 나머지 location 블록은 URL 경로의 접두사(prefix)에 대한 매칭을 제공합니다. 이러한 location 블록은 정확한 문자열 일치나 정규 표현식으로 매칭되지 않는 경우에 사용됩니다.
- 네임드 위치(@): 네임드 위치는 다른 location 블록과는 별도로 취급되며, 일반적으로 proxy_pass와 같은 프록시 처리를 위해 사용됩니다.
위의 우선순위 규칙을 기반으로 Nginx는 요청을 가장 적절한 location 블록에 매칭시킵니다. 따라서 location 블록을 설정할 때 이러한 우선순위를 고려하여 설정해야 합니다.
'웹서버 > nginx' 카테고리의 다른 글
워드프레스 코어 업데이트 후에 파일 및 디렉토리 권한을 재설정 (1) 2024.02.18 엔진엑스 try_files 지시문 (1) 2024.02.12 rewrite, redirect 와 alias (0) 2024.02.11 fastcgi optimize (1) 2024.02.11 엔진엑스 try_files 디렉티브 (1) 2024.02.11