Серверы · 3 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-битную ОС, так как Apache теперь будет использовать гораздо больше памяти (32-битные системы имеют 4-байтовые указатели, в то время как 64-битные системы имеют 8-байтовые указатели). Я начал получать ошибки ограничения KMEMSIZE, и причиной этого был Apache. Apache сделал мой VPS непригодным для использования, поэтому мне пришлось искать альтернативу.

The Solution

Nginx был ответом, но я пользователь ISPConfig, который поддерживает только Apache, и если бы я нашел способ обойти это, я бы не стал вручную управлять каждым виртуальным хостом. Решением было настроить Nginx как хост по умолчанию на переднем плане и проксировать запросы к Apache, который будет работать на заднем плане на другом порту. Таким образом, Nginx будет обслуживать статические файлы, а PHP будет оставлен для Apache. Вы также можете оставить целый домен для Nginx, если хотите, просто поместите виртуальный хост этого домена перед стандартным vhost. Один шаг дальше - это запустить 32-битную chroot-среду поверх 64-битной ОС и установить 32-битный Apache, но это не будет рассмотрено в этом руководстве.

Configure Apache

Настройте Apache для работы на порту 82 в /etc/apache2/ports.conf и во всех ваших виртуальных хостах. Чтобы упростить задачу, используйте команду sed:

 # sed -ie 's/YOUR-IP:80/YOUR-IP:82/g' /etc/apache2/sites-available/*.vhost 

Я предполагаю, что ваш виртуальный хост основан на IP - ваш vhost может иметь *:80 вместо IP: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 

Теперь вам нужно изменить шаблоны Apache для ISPConfig. Скопируйте их в вашу директорию 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.conf
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 YOU_IP_ADDRESS

Installing 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.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.