ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 블록의 우선순위를 정하는 규칙입니다:

    1. 정확한 문자열 일치(=): = 수정자를 사용한 location 블록이 가장 높은 우선순위를 가집니다. 따라서 정확히 일치하는 URL에 대한 요청은 이러한 location 블록에 매칭됩니다.
    2. 가장 특별한 위치 매칭(^~): ^~ 수정자를 사용한 location 블록이 다음으로 높은 우선순위를 가집니다. 이러한 location 블록은 특정한 접두사로 시작하는 모든 요청에 대해 일치하므로, 보다 구체적인 매칭을 제공합니다.
    3. 정규 표현식 매칭(~, ~*): 정규 표현식 수정자를 사용한 location 블록이 그 다음 우선순위를 가집니다. 이러한 location 블록은 정규 표현식에 따라 요청을 매칭합니다. ~는 대소문자를 구분하여 매칭하고, ~*는 대소문자를 구분하지 않고 매칭합니다.
    4. 일반적인(prefix) 매칭: 나머지 location 블록은 URL 경로의 접두사(prefix)에 대한 매칭을 제공합니다. 이러한 location 블록은 정확한 문자열 일치나 정규 표현식으로 매칭되지 않는 경우에 사용됩니다.
    5. 네임드 위치(@): 네임드 위치는 다른 location 블록과는 별도로 취급되며, 일반적으로 proxy_pass와 같은 프록시 처리를 위해 사용됩니다.

    위의 우선순위 규칙을 기반으로 Nginx는 요청을 가장 적절한 location 블록에 매칭시킵니다. 따라서 location 블록을 설정할 때 이러한 우선순위를 고려하여 설정해야 합니다.

     

     

     

    댓글

Designed by Tistory.