서버 설정 · 2 min read · Dec 27, 2025
Nginx Catch-All Host As Front End To Apache For ISPConfig 3 On Debian Lenny
Nginx Catch-All Host As Front End To Apache For ISPConfig 3 On Debian Lenny
By Nedim Hadzimahmutovic < [email protected] >
Version: v1.1
Last Change: May 19, 2010
Introduction
Apache는 항상 제가 선택한 웹 서버입니다. 자원 사용 측면에서 특히 VPS와 같은 자원이 제한된 환경에서는 정말 강력합니다. 저는 경량의 고성능 웹 서버인 Nginx를 사용해 보기 시작했습니다. 제 관심 분야는 Nginx를 리버스 프록시로 실행하고 Apache/ISPConfig 3 환경에서 작동하게 만드는 것이었습니다.
The Problem
저는 OpenVZ, apache2-mpm-itk, mod_php 사용자입니다. Apache mpm-itk는 FastCGI를 지원하지 않습니다. 이 문제는 64비트 OS를 사용할 경우 극적으로 증가합니다. 왜냐하면 Apache는 이제 훨씬 더 많은 메모리를 사용할 것이기 때문입니다 (32비트 시스템은 4바이트 포인터를 가지고 있는 반면 64비트 시스템은 8바이트 포인터를 가지고 있습니다). 저는 KMEMSIZE 한도 오류를 받기 시작했고 Apache가 그 이유였습니다. Apache 때문에 제 VPS는 사용할 수 없게 되었고 대안을 찾아야 했습니다.
The Solution
Nginx가 답이었지만 저는 Apache만 지원하는 ISPConfig 사용자였고, 이 문제를 우회할 방법을 찾더라도 각 가상 호스트를 수동으로 관리할 수는 없었습니다. 해결책은 Nginx를 프론트 엔드로 설정하고 Apache를 백엔드에서 다른 포트로 실행하는 catch all 호스트로 설정하는 것이었습니다. 이렇게 하면 Nginx가 정적 파일을 제공하고 PHP는 Apache에 맡길 수 있습니다. 원하신다면 전체 도메인을 Nginx에 맡길 수도 있습니다. 단지 그 도메인의 가상 호스트를 기본 vhost보다 먼저 배치하면 됩니다. 한 걸음 더 나아가 64비트 OS 위에 32비트 chroot 환경을 실행하고 32비트 Apache를 설치할 수도 있지만, 이 튜토리얼에서는 다루지 않겠습니다.
Configure Apache
Apache를 /etc/apache2/ports.conf 및 모든 가상 호스트에서 포트 82로 실행되도록 구성합니다. 더 쉽게 하려면 sed 명령어를 사용하세요:
# sed -ie 's/YOUR-IP:80/YOUR-IP:82/g' /etc/apache2/sites-available/*.vhost 가상 호스트가 IP 기반이라고 가정합니다 - 귀하의 vhost는 IP:80 대신 *:80을 가질 수 있습니다.
sed 명령어는 .vhost 파일의 백업 파일을 생성하며, 이 파일은 .vhoste 확장자를 가집니다. 백업 vhost 파일을 이동할 수 있습니다:
mkdir /root/apache2_vhost_backup/mv /etc/apache2/sites-available/*.vhoste /root/apache2_vhost_backup/Apache를 재시작하고 netstat를 사용하여 포트 82에서 실행되고 있는지 확인합니다:
tcp 0 0 0.0.0.0:82 0.0.0.0:* LISTEN 7630/apache2 이제 ISPConfig Apache 템플릿을 변경해야 합니다. 이를 conf-custom 디렉토리로 복사합니다:
# cd /usr/local/ispconfig/server/ # cp conf/apache_ispconfig.conf.master conf-custom/ # cp conf/vhost.conf.master conf-custom/ 두 파일을 열고 :80을 :82로 변경합니다. 확실히 하기 위해 grep 명령어를 실행하고 출력이 일치하는지 확인합니다:
# grep :82 -i /usr/local/ispconfig/server/conf-custom/* /usr/local/ispconfig/server/conf-custom/apache_ispconfig.conf.master:NameVirtualHost {tmpl_var name=”ip_address”}:82
/usr/local/ispconfig/server/conf-custom/vhost.conf.master: :82>
모든 요청이 localhost (127.0.0.1)에서 발생하는 것으로 표시됩니다. 사용자의 실제 IP 주소를 보려면 libapache2-mod-rpaf를 설치해야 합니다:
# apt-get install libapache2-mod-rpaf 다음 내용을 /etc/apache2/apache2.conf에 추가합니다:
# nano /etc/apache2/apache2.confRPAFsethostname On
RPAFproxy_ips 127.0.0.1 YOUR_IP_ADDRESSInstalling And Configure Nginx
lenny-backports 리포지토리를 활성화하고, http://backports.org/에서 지침을 찾습니다.
apt-get install nginx 기본 vhost를 제거합니다:
# rm /etc/nginx/sites-available/default 파일을 엽니다:
# nano /etc/nginx/sites-available/default 파일에 다음 내용을 추가합니다:
server {
listen 80 default;
server_name _;
server_name_in_redirect off;
resolver 127.0.0.1;
#### www. redirect - www로 시작하는 모든 도메인은 http://domain으로 리디렉션됩니다. ####
if ($host ~* ^(www\.)(.+)) {
set $rawdomain $2;
rewrite ^/(.*)$ http://$rawdomain/$1 permanent;
}
access_log /var/log/ispconfig/httpd/$host/access.log;
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf|flv|html|htm|mp3)$ {
root /var/www/$host/web;
access_log off;
expires 30d;
}
location / {
root /var/www/$host/web;
index index.html index.htm index.php;
access_log off;
proxy_pass http://$host:82;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}그게 전부입니다. Nginx는 이미지와 같은 모든 정적 파일을 제공하고 HTML 파일 및 PHP 내용은 Apache로 전달됩니다.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.