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.confRPAFsethostname On
RPAFproxy_ips 127.0.0.1 YOU_IP_ADDRESSInstalando 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.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.