본문 바로가기

NginX

Nginx 모듈

728x90

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` 설정을 통해 상태 정보 요청에 대한 로그를 남기지 않도록 합니다.

728x90

'NginX' 카테고리의 다른 글

Nginx + php 연동에 대하여  (0) 2023.05.01
Nginx 설치  (0) 2023.04.30