Nginx 모듈은 Nginx 웹 서버의 기능을 확장하거나 변경하는 데 사용되는 독립적인 코드 블록입니다. 모듈은 C 또는 Lua와 같은 프로그래밍 언어로 작성될 수 있습니다. Nginx는 모듈화된 아키텍처를 갖추고 있으므로, 새로운 모듈을 추가하여 Nginx의 기능을 확장하거나 변경할 수 있습니다.
다음은 몇 가지 Nginx 모듈의 예입니다.
1. HTTP 모듈
HTTP 모듈은 HTTP 요청 및 응답을 처리하는 데 사용됩니다. HTTP 모듈은 다양한 기능을 제공하며, 예를 들어 `proxy_pass` 지시문은 Nginx를 프록시 서버로 사용할 수 있게 합니다.
2. Event 모듈
Event 모듈은 Nginx의 이벤트 처리를 담당합니다. 이 모듈은 다양한 이벤트 드라이버를 제공하며, 이벤트 처리 방법을 변경할 수 있습니다.
3. Stream 모듈
Stream 모듈은 TCP 레벨에서 작동합니다. 이 모듈은 프록시 서버, 로드 밸런싱 및 TCP/UDP 포트 포워딩과 같은 기능을 제공합니다.
4. Lua 모듈
Lua 모듈은 Lua 스크립트를 실행할 수 있는 환경을 제공합니다. 이 모듈을 사용하면 HTTP 요청 및 응답을 처리하는 데 필요한 작업을 Lua 스크립트로 구현할 수 있습니다.
다음은 Nginx 모듈의 몇 가지 실제 사용 예시입니다.
1. `proxy_pass` 모듈
`proxy_pass` 모듈은 Nginx를 프록시 서버로 사용할 수 있게 합니다. 예를 들어, Nginx를 사용하여 웹 서버에 대한 요청을 프록시하는 경우, `proxy_pass` 모듈을 사용하여 다음과 같이 설정할 수 있습니다.
```
location / {
proxy_pass http://web_server_ip:80;
}
```
이렇게 설정하면, Nginx는 `http://web_server_ip:80`로 요청을 전달하고, 해당 서버로부터 받은 응답을 클라이언트에게 전송합니다.
2. `ngx_http_gzip_module` 모듈
`ngx_http_gzip_module` 모듈은 Nginx에서 gzip 압축을 지원합니다. 이 모듈을 사용하면, Nginx는 클라이언트가 지원하는 압축 형식에 따라 압축된 응답을 반환합니다. 예를 들어, 다음과 같이 설정할 수 있습니다.
```
gzip on;
gzip_types text/plain text/css application/json;
```
이렇게 설정하면, Nginx는 `text/plain`, `text/css`, `application/json` 형식의 파일에 대해 gzip 압축을 적용하고, 클라이언트가 지원하는 경우 해당 파일을 압축된 상태로 반환합니다.
3. `ngx_http_rewrite_module` 모듈
`ngx_http_rewrite_module` 모듈은 Nginx에서 URL 재작성을 지원합니다. 이 모듈을 사용하면, Nginx는 요청 URL을 변경하거나, 새로운 URL로 리다이렉션할 수 있습니다. 예를 들어, 다음과 같이 설정할 수 있습니다.
```
location /old-url {
rewrite ^/old-url(.*)$ /new-url$1 permanent;
}
```
이렇게 설정하면, `/old-url`로 요청이 들어오면, Nginx는 해당 URL을 `/new-url`로 변경하고, `permanent` 키워드를 사용하여 브라우저에게 301 상태 코드를 반환합니다. 이렇게 함으로써, 검색 엔진이나 브라우저가 새로운 URL을 인식하고, 검색 엔진 최적화(SEO)에 도움을 줄 수 있습니다.
4. `ngx_http_ssl_module` 모듈
`ngx_http_ssl_module` 모듈은 Nginx에서 SSL/TLS 암호화를 지원합니다. 이 모듈을 사용하면, Nginx를 HTTPS 서버로 사용할 수 있습니다. 예를 들어, 다음과 같이 설정할 수 있습니다.
```
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/certificate.pem;
ssl_certificate_key /path/to/private_key.pem;
location / {
# ...
}
}
```
이렇게 설정하면, Nginx는 443 포트에서 SSL/TLS 암호화를 사용하여 요청을 처리하고, `example.com` 도메인으로 들어오는 요청을 `/path/to/certificate.pem`과 `/path/to/private_key.pem` 파일로부터 로드한 인증서와 개인 키를 사용하여 암호화된 응답을 반환합니다.
5. `ngx_http_stub_status_module` 모듈
`ngx_http_stub_status_module` 모듈은 Nginx에서 서버 상태 모니터링을 지원합니다. 이 모듈을 사용하면, Nginx의 현재 연결 상태, 리소스 사용량, 요청 통계 등의 정보를 제공할 수 있습니다. 예를 들어, 다음과 같이 설정할 수 있습니다.
```
server {
listen 8080;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
```
이렇게 설정하면, `http://localhost:8080/nginx_status`에 접속하면, Nginx의 현재 상태를 나타내는 페이지를 확인할 수 있습니다.
6. `ngx_http_geoip_module` 모듈
`ngx_http_geoip_module` 모듈은 Nginx에서 GeoIP 데이터를 사용하여 지리적 위치 정보를 처리할 수 있게 합니다. 이 모듈을 사용하면, 클라이언트의 IP 주소를 이용하여 해당 클라이언트의 국가, 지역, 도시 등의 정보를 파악할 수 있습니다. 예를 들어, 다음과 같이 설정할 수 있습니다.
```
http {
geoip_country /path/to/GeoIP.dat;
geoip_city /path/to/GeoIPCity.dat;
server {
listen 80;
server_name example.com;
location / {
if ($geoip_country_code = KR) {
rewrite ^ /kr$uri;
}
proxy_pass http://backend_server;
}
location /kr {
proxy_pass http://kr_backend_server;
}
}
}
```
이렇게 설정하면, Nginx는 `GeoIP.dat` 파일과 `GeoIPCity.dat` 파일로부터 클라이언트의 지리적 위치 정보를 로드하고, 이를 활용하여 요청을 처리합니다. 예를 들어, 클라이언트의 위치가 한국인 경우, `if` 문을 통해 해당 클라이언트의 요청을 `/kr`로 리다이렉션하고, 한국에서만 운영하는 `kr_backend_server`로 요청을 전달합니다.
7. `ngx_http_gzip_module` 모듈
`ngx_http_gzip_module` 모듈은 Nginx에서 gzip 압축을 지원합니다. 이 모듈을 사용하면, Nginx는 응답 본문을 gzip 압축하여 전송할 수 있습니다. 이를 통해, 클라이언트는 더 적은 대역폭을 사용하여 빠르게 컨텐츠를 다운로드할 수 있습니다. 예를 들어, 다음과 같이 설정할 수 있습니다.
```
http {
gzip on;
gzip_types text/plain text/css application/json;
server {
listen 80;
server_name example.com;
location / {
root /path/to/html;
index index.html;
}
}
}
```
이렇게 설정하면, Nginx는 `gzip on` 설정을 통해 gzip 압축을 사용하여 응답을 전송합니다. 또한, `gzip_types` 설정을 통해 특정 파일 유형에 대해서만 gzip 압축을 사용합니다. 예를 들어, `text/plain`, `text/css`, `application/json` 유형의 파일에 대해서만 gzip 압축을 사용합니다.
8. `ngx_http_realip_module` 모듈
`ngx_http_realip_module` 모듈은 Nginx에서 원본 클라이언트의 IP 주소를 사용할 수 있게 합니다. 이 모듈을 사용하면, Nginx가 리버스 프록시 역할을 수행하는 경우, 원본 클라이언트의 IP 주소를 로그에 남길 수 있습니다. 예를 들어, 다음과 같이 설정할 수 있습니다.
```
http {
real_ip_header X-Forwarded-For;
set_real_ip_from 10.0.0.0/8;
server {
listen 80;
server_name example.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://backend_server;
}
}
}
```
이렇게 설정하면, Nginx는 `real_ip_header` 설정을 통해 원본 클라이언트의 IP 주소를 로그에 남기도록 합니다. 또한, `set_real_ip_from` 설정을 통해 허용되는 IP 대역을 지정합니다. 이를 통해, 클라이언트의 IP 주소가 허용되는 대역에 속하는 경우, Nginx는 이를 원본 클라이언트의 IP 주소로 간주합니다. 마지막으로, `proxy_set_header` 설정을 통해 프록시 서버에 전달된 헤더를 설정합니다. 이를 통해, 원본 클라이언트의 IP 주소를 프록시 서버로 전달할 수 있습니다.
9. `ngx_http_ssl_module` 모듈
`ngx_http_ssl_module` 모듈은 Nginx에서 SSL 암호화를 지원합니다. 이 모듈을 사용하면, Nginx는 HTTPS 프로토콜을 지원할 수 있으며, 클라이언트와 서버 간 통신을 SSL/TLS 프로토콜을 통해 암호화합니다. 예를 들어, 다음과 같이 설정할 수 있습니다.
```
http {
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
root /path/to/html;
index index.html;
}
}
}
```
이렇게 설정하면, Nginx는 `listen 443 ssl` 설정을 통해 HTTPS 프로토콜을 지원합니다. 또한, `ssl_certificate`와 `ssl_certificate_key` 설정을 통해 SSL/TLS 암호화에 사용될 인증서와 개인 키 파일을 지정합니다. 이를 통해, 클라이언트와 서버 간 통신을 안전하게 암호화할 수 있습니다.
10. `ngx_http_stub_status_module` 모듈
`ngx_http_stub_status_module` 모듈은 Nginx에서 웹 서버의 상태를 모니터링할 수 있게 합니다. 이 모듈을 사용하면, Nginx는 웹 서버의 상태 정보를 `/nginx_status` URI를 통해 제공합니다. 예를 들어, 다음과 같이 설정할 수 있습니다.
```
http {
server {
listen 80;
server_name example.com;
location /nginx_status {
stub_status on;
access_log off;
}
location / {
root /path/to/html;
index index.html;
}
}
}
```
이렇게 설정하면, Nginx는 `/nginx_status` URI를 통해 웹 서버의 상태 정보를 제공합니다. 또한, `stub_status on` 설정을 통해 상태 정보를 제공하도록 합니다. 마지막으로, `access_log off` 설정을 통해 상태 정보 요청에 대한 로그를 남기지 않도록 합니다.
'NginX' 카테고리의 다른 글
| Nginx + php 연동에 대하여 (0) | 2023.05.01 |
|---|---|
| Nginx 설치 (0) | 2023.04.30 |