httpd와 nginx는 둘 다 웹 서버 소프트웨어입니다. 그러나 두 웹 서버는 설계 철학, 성능, 구성 방식 등 여러 가지 차이점이 있습니다.
PID PPID C STIME TTY TIME CMD
1231 1 0 00:00 ? 00:00:00 httpd
1232 1231 0 00:00 ? 00:00:00 httpd (child process for client 1)
1233 1231 0 00:00 ? 00:00:00 httpd (child process for client 2)
클라이언트 1과 클라이언트 2에 대한 별도의 프로세스가 생성됩니다.
PID PPID C STIME TTY TIME CMD
1231 1 0 00:00 ? 00:00:00 httpd
1232 1231 0 00:00 ? 00:00:00 httpd (worker process with multiple threads)
1233 1231 0 00:00 ? 00:00:00 httpd (worker process with multiple threads)
각 워커 프로세스는 여러 클라이언트 연결을 처리하는 여러 스레드를 포함합니다.
Single-threaded 이벤트 루프:
비동기 I/O:
동작 원리:
이로 인한 장점:
다양한 모듈을 통해 확장이 가능합니다. 이로 인해 많은 기능을 추가할 수 있지만, 때로는 불필요한 리소스 사용을 초래할 수도 있습니다.
httpd 는 아파치 웹 서버로, 초기 설계 단계부터 모듈화를 중요한 특성으로 간주했습니다. 이러한 httpd에 다양한 기능을 추가하거나 제거함으로써 웹 서버의 기능성과 효율성을 향상시키는데 큰 역할을 합니다.
모듈화
# 모듈 활성화
LoadModule ssl_module modules/mod_ssl.so
예를 들어 mod_ssl 모듈을 사용하여 SSL/TLS 지원을 httpd에 추가할 수 있습니다. 이 모듈을 활성화 하면 웹서버는 HTTPS 연결을 처리할 수 있습니다.
기능 확장성
# mod_rewrite 활성화
LoadModule rewrite_module modules/mod_rewrite.so
# .htaccess 파일 또는 httpd.conf 내에서 URL 리라이트 규칙 설정
RewriteEngine On
RewriteRule ^oldpath$ /newpath [R=301,L]
mod_rewrite 모듈을 사용하여 URL리라이트 규칙을 적용할 수 있습니다ㅏ. 이 모듈을 활성화 하면 다양한 URL 패턴을 새로은 URL로 리다이렉트하거나 리라이트 할 수 있습니다.
DSO (Dynamic Shared Object)
API (Application Programming Interface)
Configuration Directives
nginx는 웹 서버 및 리버시 프록시 서버로 개발되었으며, 기본적인 기능 외에도 다양한 기능을 모듈로 제공합니다. nginx의 모듈 구조는 컴파일 시점에서 결정되므로, 런타임 중에 동적으로 모듈을 추가하거나 제거할 수 없습니다. 이는 Apache의 DSO 방식과는 다르게 동작합니다.
1.웹 서버 : 정적 파일을 제공하고, 빠르게 콘텐츠를 제공합니다.
2.리버시 프록시 : 내부 네트워크에 있는 다른 서버로 클라이언트 요청을 중계합니다.
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
location / {
root /var/www/html;
index index.html;
}
}
gzip on;
gzip_types text/plain text/css application/json application/javascript;
location /app/ {
proxy_pass http://backend_server;
}
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
}
server {
location / {
proxy_pass http://backend;
}
}
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
이벤트 기반 모델 : 비동기 방식으로 동작하여 고성능과 높은 확장성을 제공합니다.
모듈식 설계 : 원하는 기능만 선택하여 컴파일 할 수 있습니다.