Servidor Web · 3 min read · Dec 27, 2025

Nginx Catch-All Host Como Front End Para Apache Para ISPConfig 3 No Debian Lenny

Nginx Catch-All Host Como Front End Para Apache Para ISPConfig 3 No Debian Lenny

Por Nedim Hadzimahmutovic < [email protected] >
Versão: v1.1
Última Alteração: 19 de maio de 2010

Introdução

Apache sempre foi o servidor web de escolha para mim. É uma verdadeira fera quando se trata de uso de recursos, especialmente em um ambiente com recursos limitados, como um VPS. Comecei a brincar com o Nginx, um servidor web leve e de alto desempenho. Minha área de interesse era executar o Nginx como um proxy reverso e fazê-lo funcionar em um ambiente Apache/ISPConfig 3.

O Problema

Sou um usuário de OpenVZ, apache2-mpm-itk, mod_php. O Apache mpm-itk não suporta FastCGI. Este problema aumenta dramaticamente se você usar um sistema operacional de 64 bits, já que o Apache agora usará muito mais memória (sistemas de 32 bits têm ponteiros de 4 bytes, enquanto sistemas de 64 bits têm ponteiros de 8 bytes). Comecei a receber erros de limite de KMEMSIZE e o Apache era a razão disso. O Apache tornou meu VPS inutilizável, então tive que procurar uma alternativa.

A Solução

O Nginx foi a resposta, mas sou um usuário do ISPConfig, que só suporta Apache, e se eu encontrasse uma maneira de contornar isso, não haveria como gerenciar manualmente cada host virtual. A solução foi configurar o Nginx como um host catch-all como front-end e proxy para o Apache, que estará rodando no back-end em uma porta diferente. Dessa forma, o Nginx servirá os arquivos estáticos e o PHP ficará a cargo do Apache. Você também pode deixar um domínio inteiro para o Nginx, se desejar, basta colocar o host virtual desse domínio antes do vhost padrão. Um passo a mais seria executar um ambiente chroot de 32 bits em cima do sistema operacional de 64 bits e instalar o Apache de 32 bits, mas isso não será abordado neste tutorial.

Configurar o Apache

Configure o Apache para rodar na porta 82 em /etc/apache2/ports.conf e em todos os seus hosts virtuais. Para facilitar, use o comando sed:

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

Assumo que seu host virtual é baseado em IP - seu vhost pode ter *:80 em vez de IP:80.

O comando sed fará arquivos de backup dos seus arquivos .vhost, que terão a extensão .vhoste. Você pode mover os arquivos de backup do vhost:

mkdir /root/apache2_vhost_backup/
mv /etc/apache2/sites-available/*.vhoste /root/apache2_vhost_backup/

Reinicie o apache e use netstat para verificar se está rodando na porta 82:

  tcp        0      0 0.0.0.0:82              0.0.0.0:*               LISTEN      7630/apache2 

Agora você precisa mudar os templates do Apache do ISPConfig. Copie-os para seu diretório conf-custom:

 # cd /usr/local/ispconfig/server/ 
 # cp conf/apache_ispconfig.conf.master conf-custom/ 
 # cp conf/vhost.conf.master conf-custom/ 

Abra os dois arquivos e mude :80 para :82. Apenas para ter certeza, execute o comando grep e verifique se a saída corresponde:

 # 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>

Você verá todas as requisições como originadas de localhost ( 127.0.0.1). Para ver o endereço IP real dos usuários, você terá que instalar o libapache2-mod-rpaf:

 # apt-get install libapache2-mod-rpaf 

Adicione o seguinte em /etc/apache2/apache2.conf:

# nano /etc/apache2/apache2.conf
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 YOU_IP_ADDRESS

Instalando e Configurando o Nginx

Ative o repositório lenny-backports, você encontrará as instruções em http://backports.org/.

 apt-get install nginx 

Remova o vhost padrão:

 # rm /etc/nginx/sites-available/default 

Abra o arquivo:

 # nano /etc/nginx/sites-available/default 

Adicione o seguinte conteúdo ao arquivo:

server {
    listen   80 default; 
        server_name  _;
        server_name_in_redirect  off;
    resolver  127.0.0.1;
#### www. redirect - todos os domínios que começam com www serão redirecionados para 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;
}
}

É isso. O Nginx servirá todos os seus arquivos estáticos, como imagens, até arquivos html e coisas em php serão encaminhadas para o Apache.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.