O servidor tem o apache instalado. Como instalar o nginx ao lado dele?

5

O Apache é instalado e é usado para servir principalmente conteúdo do Django / Python. Eu quero instalar o nginx para servir conteúdo estático. Como fazer e qual é uma boa configuração.

Estou no Ubuntu e o Apache foi instalado via apt-get.

    
por shabda 10.12.2009 / 11:20

2 respostas

4
  1. primeira opção: você tem poucos ip addreses? ligar o apache para um deles, nginx para outro.

    no mundo debian

    para o apache em /etc/apache2/ports.conf incluem:

    Listen 1.1.2.3:80
    

    no arquivo vhost na alteração / etc / apache2 / sites-enabled:

    NameVirtualHost 1.1.2.3:80; 
    <VirtualHost 1.1.2.3:80>
    ..
    <VirtualHost/>
    

    para o nginx em / etc / nginx / sites-enabled / add:

    listen 1.1.2.4:80
    
  2. segunda opção: mova o apache para ouvir em diferentes portas [arquivos como acima. diga ao apache para escutar em 127.0.0.1:8080 por exemplo] e instrua o nginx a fazer um tráfego dinâmico com proxy reverso para seu apache enquanto atende / static / por nginx - por exemplo:

    server {
     listen   1.1.2.3:80;
     server_name  some.name another.dname;
    
     access_log  /var/log/nginx/something-access.log;
    
     location / {
      proxy_pass http://localhost:8080;
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     }
     location ~* ^.+\.(jpg|js|jpeg|png)$ {
      root /some/where/on/your/disks;
     }
    
    ; put your static hosting config here.
    }
    

btw - pense em colocar conteúdo estático em outro domínio. isso deve melhorar um pouco a velocidade do usuário final.

    
por 10.12.2009 / 11:35
3

Existem muitas variações sobre como fazer isso. Eu prefiro ter um aplicativo dedicado a decidir em qual servidor lida com o tipo de conteúdo, enquanto os servidores de backend simplesmente veiculam os arquivos que foram solicitados.

Para isso, eu uso o proxy reverso Varnish no front end, ouvindo na porta 80. Por trás disso, eu tenho o Apache (porta 8880) e o nginx (porta 8881), ambos configurados para os mesmos domínios e apontando para o mesma estrutura de diretórios. No meu arquivo de configuração do Varnish, eu tenho algo assim:

backend apache {
  .host = "192.168.0.2";
  .port = "8880";
}
backend nginx {
  .host = "192.168.0.2";
  .port = "8881";
}

[...]

if (req.url ~ "\.(png|gif|jpg|ico|html|htm|js|css|txt)$") {
  set req.backend = nginx;
} else {
  set req.backend = apache;
}

Claro, há um pouco mais nisso, mas você tem a ideia.

Já que você já tem o Apache e o nginx instalado, você pode querer navegar este link, que descreve uma situação muito semelhante à sua, mas usa nginx como o front-end para conteúdo estático e, em seguida, passa solicitações para o Apache.

Se você quiser ir realmente simples, você pode simplesmente usar um proxy de armazenamento em cache reverso (como Varnish ou nginx) na frente do Apache. O que ele fará é armazenar solicitações em cache para atendê-las rapidamente aos clientes, ao mesmo tempo em que alivia o próprio servidor da Web de atender a solicitações idênticas. Isso, por sua própria natureza, dará o mesmo efeito que você está pedindo. Como as páginas e imagens estáticas raramente mudam, elas serão quase sempre armazenadas em cache pelo front-end, enquanto as páginas dinâmicas serão detectadas como tal e sempre passadas para o back-end.

    
por 10.12.2009 / 18:28