Como você serve vários arquivos estáticos de domínio com nginx na frente do apache?

1

Gostaria de executar vários domínios do mesmo servidor. Eu gostaria que o nginx ficasse na frente do apache e servisse arquivos estáticos. Por isso, pedidos de one.com/site_media/logo.png apontam para /var/www/one/site_media/logo.png e two.com/site_media/logo.png apontam para /var/www/two/site_media/logo.png . Onde estou indo errado na seguinte configuração?

ports.conf

 NameVirtualHost *:80
 Listen 8080

nginx / sites disponíveis / one.com

server {
   listen 80;
   server_name one.com;
   access_log /var/www/one/nginx_access.log;
   error_log /var/www/one/nginx_error.log;
   location / {
   proxy_pass  http://127.0.0.1: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;
   proxy_set_header   X-Magic-Header "secret";
   client_max_body_size 10m;
  }

  location ^~ /site_media/ {
     root /var/www/one;
     if ($query_string) {
         expires max;
     }
  }

nginx / sites disponíveis / two.com

server {
   listen 80;
   server_name two.com;
   access_log /var/www/two/nginx_access.log;
   error_log /var/www/two/nginx_error.log;
   location / {
   proxy_pass  http://127.0.0.1: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;
   proxy_set_header   X-Magic-Header "secret";
   client_max_body_size 10m;
  }

  location ^~ /site_media/ {
     root /var/www/two;
     if ($query_string) {
         expires max;
     }
  }

apache2 / sites disponíveis / one.com

<VirtualHost *:8080>
    ServerName one.com
    ServerAlias www.one.com
    WSGIScriptAlias / /var/www/one/one.wsgi
    ErrorLog /var/www/one/apache_error.log
    LogLevel warn
    CustomLog /var/www/one/apache_access.log combined
</VirtualHost>

apache2 / sites disponíveis / two.com

<VirtualHost *:8080>
    ServerName two.com
    ServerAlias www.two.com
    WSGIScriptAlias / /var/www/two/two.wsgi
    ErrorLog /var/www/one/apache_error.log
    LogLevel warn
    CustomLog /var/www/one/apache_access.log combined
</VirtualHost>

Um pedido em two.com para "/site_media/logo.png" falha porque o servidor procura em / var / www / one / site_media. Gostaria de manter os hrefs "/ site_media" para os dois sites. Existe uma maneira melhor de reescrever o local do nginx ^ ~ / site_media /? Ou algo mais?

(Editar) Minha solução alternativa é:

  location ^~ /site_media/ {
     if ($host = 'one.com') {
         root /var/www/one;
     }
     if ($host = 'two.com') {
         root /var/www/two;
     }
     if ($query_string) {
         expires max;
     }

Isso parece realmente "hacky" e não elegante.

    
por user51776 27.10.2011 / 17:55

2 respostas

1

Diretivas raiz devem estar no nível do servidor.

server {
   listen 80;
   server_name one.com;
   root /var/www/one;
   ...

server {
   listen 80;
   server_name two.com;
   root /var/www/two;
   ...

Verifique também se a raiz do documento no Apache está definida corretamente para cada um.

    
por 28.10.2011 / 11:48
0

Parece incrivelmente complicado. Por que você não usa o nginx em todos os níveis? Em qualquer caso, a melhor referência para as configurações do NGINX que eu já vi é: link

  • Opção 1: servidor da web Nginx para veicular arquivos estáticos

    This is a basic webserver running on port 80 (http) serving out web pages. Though we have added quite a few security checks, this is as basic a server as you can get. On an AMD64 2GHz machine this config will easily serve out thousands of pages a minute.

por 27.10.2011 / 18:01