Skip to Content
문서서버Nginx 및 Apache

Nginx / Apache 웹 서버

26.10 버전 차이

26.10은 OpenSSL 4를 사용합니다. 특히 PKCS#11/HSM 통합의 경우 레거시 엔진 구성을 공급자로 마이그레이션합니다. 서비스를 다시 로드하기 전에 구성 및 인증서 체인의 유효성을 검사하십시오. 패키지 설치만으로는 호환성이 확립되지 않습니다. 공식 릴리스 노트 

이 문서에서는 Ubuntu 26.04에서 가장 널리 사용되는 두 가지 웹 서버인 Nginx 및 Apache을 설치하고 구성하는 방법을 다룹니다.

Nginx

Nginx 설치 중

sudo apt update sudo apt install nginx -y # Start and enable on boot sudo systemctl enable --now nginx # Check status sudo systemctl status nginx # Check version nginx -v

방화벽 구성

# Allow HTTP and HTTPS sudo ufw allow 'Nginx Full' # Or allow individually sudo ufw allow 80/tcp sudo ufw allow 443/tcp

디렉토리 구조

/etc/nginx/ ├── nginx.conf # Main configuration file ├── sites-available/ # Available site configurations ├── sites-enabled/ # Enabled sites (symlinks) ├── conf.d/ # Additional configuration snippets ├── snippets/ # Reusable configuration snippets └── modules-enabled/ # Enabled modules /var/www/ # Website root directory /var/log/nginx/ # Log directory

가상 호스트 구성

# Create website directory sudo mkdir -p /var/www/example.com/html sudo chown -R www-data:www-data /var/www/example.com echo "<h1>Welcome to example.com</h1>" | sudo tee /var/www/example.com/html/index.html # Create virtual host configuration sudo tee /etc/nginx/sites-available/example.com << 'EOF' server { listen 80; listen [::]:80; server_name example.com www.example.com; root /var/www/example.com/html; index index.html index.htm; # Logs access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log; location / { try_files $uri $uri/ =404; } # Static asset caching location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ { expires 30d; add_header Cache-Control "public, immutable"; } # Deny access to hidden files location ~ /\. { deny all; } } EOF # Enable the site sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ # Remove default site (optional) sudo rm /etc/nginx/sites-enabled/default # Test configuration sudo nginx -t # Reload sudo systemctl reload nginx

역방향 프록시 구성

sudo tee /etc/nginx/sites-available/app-proxy << 'EOF' server { listen 80; server_name app.example.com; location / { proxy_pass http://127.0.0.1:3000; 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_set_header X-Forwarded-Proto $scheme; # WebSocket support proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } EOF sudo ln -s /etc/nginx/sites-available/app-proxy /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx

Nginx 성능 튜닝

# /etc/nginx/nginx.conf key settings sudo tee /etc/nginx/conf.d/performance.conf << 'EOF' # Gzip compression gzip on; gzip_vary on; gzip_proxied any; gzip_comp_level 5; gzip_min_length 256; gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xml application/rss+xml image/svg+xml; # File caching open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; # Connection optimization keepalive_timeout 65; keepalive_requests 100; EOF sudo nginx -t && sudo systemctl reload nginx

Apache

Apache 설치 중

sudo apt update sudo apt install apache2 -y # Start and enable on boot sudo systemctl enable --now apache2 # Check status sudo systemctl status apache2 # Check version apache2 -v

방화벽 구성

sudo ufw allow 'Apache Full'

디렉토리 구조

/etc/apache2/ ├── apache2.conf # Main configuration file ├── ports.conf # Listening ports ├── sites-available/ # Available site configurations ├── sites-enabled/ # Enabled sites ├── mods-available/ # Available modules ├── mods-enabled/ # Enabled modules └── conf-available/ # Additional configuration /var/www/ # Website root directory /var/log/apache2/ # Log directory

공통 모듈 관리

# Enable modules sudo a2enmod rewrite # URL rewriting sudo a2enmod ssl # SSL/TLS sudo a2enmod headers # HTTP header control sudo a2enmod proxy # Reverse proxy sudo a2enmod proxy_http # HTTP proxy sudo a2enmod proxy_wstunnel # WebSocket proxy # Disable a module sudo a2dismod autoindex # Restart to apply changes sudo systemctl restart apache2

가상 호스트 구성

# Create website directory sudo mkdir -p /var/www/example.com/html sudo chown -R www-data:www-data /var/www/example.com echo "<h1>Welcome to example.com</h1>" | sudo tee /var/www/example.com/html/index.html # Create virtual host configuration sudo tee /etc/apache2/sites-available/example.com.conf << 'EOF' <VirtualHost *:80> ServerName example.com ServerAlias www.example.com ServerAdmin admin@example.com DocumentRoot /var/www/example.com/html <Directory /var/www/example.com/html> Options -Indexes +FollowSymLinks AllowOverride All Require all granted </Directory> # Logs ErrorLog ${APACHE_LOG_DIR}/example.com-error.log CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined </VirtualHost> EOF # Enable the site sudo a2ensite example.com.conf # Disable the default site (optional) sudo a2dissite 000-default.conf # Test configuration sudo apache2ctl configtest # Reload sudo systemctl reload apache2

역방향 프록시 구성

sudo a2enmod proxy proxy_http sudo tee /etc/apache2/sites-available/app-proxy.conf << 'EOF' <VirtualHost *:80> ServerName app.example.com ProxyPreserveHost On ProxyPass / http://127.0.0.1:3000/ ProxyPassReverse / http://127.0.0.1:3000/ # WebSocket proxy RewriteEngine On RewriteCond %{HTTP:Upgrade} websocket [NC] RewriteCond %{HTTP:Connection} upgrade [NC] RewriteRule ^/?(.*) ws://127.0.0.1:3000/$1 [P,L] ErrorLog ${APACHE_LOG_DIR}/app-proxy-error.log CustomLog ${APACHE_LOG_DIR}/app-proxy-access.log combined </VirtualHost> EOF sudo a2ensite app-proxy.conf sudo apache2ctl configtest && sudo systemctl reload apache2

SSL 인증서 구성

Let’s Encrypt(Certbot) 사용

# Install Certbot sudo apt install certbot -y # Nginx plugin sudo apt install python3-certbot-nginx -y # Apache plugin sudo apt install python3-certbot-apache -y

Nginx SSL 구성

# Automatically obtain and configure certificates sudo certbot --nginx -d example.com -d www.example.com # Test automatic renewal sudo certbot renew --dry-run # View certificate information sudo certbot certificates

Certbot은 Nginx 구성을 다음과 같이 자동으로 수정합니다.

server { listen 443 ssl; listen [::]:443 ssl; http2 on; server_name example.com www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # ... other configuration } # HTTP to HTTPS redirect server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; }

Apache SSL 구성

# Enable the SSL module sudo a2enmod ssl # Automatically obtain and configure certificates sudo certbot --apache -d example.com -d www.example.com

수동 SSL 구성(Nginx)

sudo tee /etc/nginx/snippets/ssl-params.conf << 'EOF' ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; # HSTS add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; # OCSP Stapling ssl_stapling on; ssl_stapling_verify on; resolver 223.5.5.5 8.8.8.8 valid=300s; EOF

자동 갱신

# Certbot automatically configures a systemd timer during installation sudo systemctl status certbot.timer # Manual renewal sudo certbot renew # View the renewal schedule sudo systemctl list-timers | grep certbot

Nginx 대 Apache: 올바른 선택

대본추천이유
동시성이 높은 정적 파일Nginx이벤트 기반, 낮은 메모리 사용량
.htaccess 요구 사항Apache디렉터리 수준 구성에 대한 기본 지원
역방향 프록시/로드 밸런싱Nginx깔끔한 구성, 뛰어난 성능
PHP (PHP-FPM)어느 하나둘 다 FastCGI를 지원합니다. 26.04에서 권장됨
마이크로서비스 게이트웨이NginxAPI 게이트웨이 시나리오에 더 적합
Warning

Ubuntu 26.04에서 Apache 2.4.66 서비스는 기본적으로 MemoryDenyWriteExecute=yes을 활성화하며 이로 인해 libapache2-mod-php이 충돌하게 됩니다. 공식적인 권장 사항은 내장된 mod_php 대신 PHP-FPM(mod_proxy_fcgi + php-fpm)을 사용하는 것입니다.

일반 관리 명령

# Nginx sudo nginx -t # Test configuration sudo systemctl reload nginx # Graceful reload sudo systemctl restart nginx # Restart sudo tail -f /var/log/nginx/access.log # View access log # Apache sudo apache2ctl configtest # Test configuration sudo systemctl reload apache2 # Graceful reload sudo systemctl restart apache2 # Restart sudo a2ensite site.conf # Enable site sudo a2dissite site.conf # Disable site sudo a2enmod module # Enable module sudo a2dismod module # Disable module sudo tail -f /var/log/apache2/access.log # View access log

관련 기사