티스토리 뷰

Nginx의 location 지시어는 웹 서버에서 요청된 URI에 대한 처리 방식을 결정하는 중요한 설정입니다. 

이 글에서는 Nginx의 location 블록 사용법과 패턴 매칭 규칙을 간략하게 소개하고, 실제 설정 예시를 제공하여 이해를 돕습니다.

 

웹 서버에서 요청을 어떻게 처리할지 결정하려면, 서버는 요청 URI를 분석하여 적절한 처리 규칙을 적용해야 합니다. Nginx에서는 location 지시어를 사용하여 이를 구성합니다

 

기본 문법

Nginx location 블록의 기본 문법은 다음과 같습니다:

location [ = | ~ | ~* | ^~ ] uri { 
    # 구성 지시어
}

 

여기서 사용되는 옵션들은 다음과 같습니다:

 

  • = : 정확한 매치. 요청 URI가 지정된 패턴과 정확히 일치할 때만 location 블록이 사용됩니다.
  • ~ : 대소문자를 구분하는 정규 표현식 매치.
  • ~* : 대소문자를 구분하지 않는 정규 표현식 매치.
  • ^~ : 최우선 접두사 매치. 정규 표현식보다 우선순위가 높으며, 매치되면 정규 표현식을 더 이상 확인하지 않습니다.
  • 없음 : 일반적인 접두사 매치. 가장 긴 매치를 찾습니다.

 

매칭 규칙 예시

server {
    location / {
        # 모든 요청을 처리
    }

    location = / {
        # 정확히 '/'에 대한 요청만 처리
    }

    location /images/ {
        # URI가 '/images/'로 시작하는 요청을 처리
    }

    location ~ \.(gif|jpg|png)$ {
        # 대소문자를 구분하며, .gif, .jpg, .png로 끝나는 요청을 처리
    }

    location ~* \.php$ {
        # 대소문자를 구분하지 않으며, .php로 끝나는 요청을 처리
    }

    location ^~ /static/ {
        # '/static/'로 시작하는 요청을 처리하며, 정규 표현식 매치보다 우선순위가 높음
    }
}

 

 

우선순위

Nginx는 다음과 같은 순서로 location 블록을 평가합니다:

  1. 정확한 매치 (=)
  2. 최우선 접두사 매치 (^~)
  3. 정규 표현식 매치 (~ 또는 ~*)
  4. 일반 접두사 매치 (가장 긴 매치)

이 규칙을 기억하는 것은 여러 location 블록이 있을 때 어떤 블록이 요청을 처리할지 이해하는 데 중요합니다. 정규 표현식 매치는 일반 접두사 매치보다 더 복잡하고 비용이 많이 들기 때문에, 가능한 한 접두사 매치를 사용하는 것이 성능에 더 좋을 수 있습니다.

 

고급 설정

location 블록 내에서는 다양한 고급 설정을 적용할 수 있습니다. 예를 들어, 요청을 다른 서버로 프록시하거나, 다른 URI로 리디렉션하거나, FastCGI 서버를 지정할 수 있습니다.

location /app/ {
    proxy_pass http://backend_server;
}

location = /oldpage.html {
    return 301 http://example.com/newpage.html;
}

location ~ \.php$ {
    fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

위 설정에서는 /app/ 경로로 들어오는 요청을 백엔드 서버로 프록시하고, /oldpage.html에 대한 요청은 새 페이지로 301 리디렉션하며, .php 확장자를 가진 파일에 대한 요청을 FastCGI 프로세스 매니저로 전달합니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함