티스토리 뷰
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 블록을 평가합니다:
- 정확한 매치 (=)
- 최우선 접두사 매치 (^~)
- 정규 표현식 매치 (~ 또는 ~*)
- 일반 접두사 매치 (가장 긴 매치)
이 규칙을 기억하는 것은 여러 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 프로세스 매니저로 전달합니다.
'WEB,WAS > Web Server' 카테고리의 다른 글
Nginx: Nginx's commands (0) | 2019.08.26 |
---|---|
[Nginx] 빈 이미지 리턴 (0) | 2018.05.25 |
[Nginx] 엑세스 로그 - JSON 포맷 예제 (nginx access log json format) (0) | 2018.05.25 |
Nginx - 특정 아이피와 특정 HTTP 메소드 요청 차단하기 (0) | 2018.02.21 |
Nginx 특정 Http Request Method (메소드) 차단 방법 (0) | 2018.02.21 |
SSL Configuration Generator (0) | 2017.08.02 |
[Nginx] 80포트의 모든 요청을 443포트로 리다이렉트하는 방법 (0) | 2017.01.25 |
[NGINX] 설치 시 PCRE 오류 발생 시 대처 방법 (0) | 2017.01.24 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 데브옵스
- 젠킨스
- Config History
- PostgreSQL
- Shell Script
- Ansible
- DevOps
- ssl
- Playbook
- Password manager
- 리눅스
- Jenkins
- rundeck
- 파이프라인
- Linux
- URL Encoding
- 엔시블
- Nexus
- groovy
- vagrant
- JVM
- 엔서블
- Thread Dump
- iTerm2
- nginx
- rsync
- Docker
- 쓰레드덤프
- 플레이북
- openssl
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함