Nginx servindo arquivos estáticos via Unicorn upstream (tcp)

1

Estou tentando criar um aplicativo de trilhos com o balanceador de carga. O aplicativo está em execução, mas não sei como fornecer arquivos estáticos. Todos os exemplos assumem que o nginx e o unicorn são executados na mesma máquina.

Aqui estão as configurações mínimas:

Máquina A: Nginx Máquina B: processo Unicorn com app

Máquina A:

user www-data;
worker_processes 4;
pid /run/nginx.pid;
events {
        worker_connections 768;
}

http {

        upstream unicorn_servers {
                server 192.168.14.224:8080 fail_timeout=0;
        }

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
        gzip on;
        gzip_disable "msie6";
        gzip_proxied any;
        gzip_http_version 1.1;
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
        include /etc/nginx/sites-enabled/*;
}

server {
        listen 80;
        location / {
                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_pass http://unicorn_servers;
        }
}

Máquina B:

dir = '/home/user/apps/test_app'
working_directory dir
pid "#{dir}/pids/unicorn.pid"

# logs
stderr_path "#{dir}/log/unicorn.log"
stdout_path "#{dir}/log/unicorn.log"

worker_processes 2

timeout 30

Eu sempre vejo 404 em ativos estáticos.

  <link rel="stylesheet" media="all" href="/assets/application-0723cb9a2dd5a514d954f70e0fe0b89f6f9f1ae3a375c182f43b5f2b57e9c869.css" data-turbolinks-track="true" />
  <script src="/assets/application-08a19ba96489d7fc7864bb409a6841003509fe519cbd091b7a11a1acc7e53fbb.js" data-turbolinks-track="true"></script>

Como configurar o nginx para servir arquivos estáticos de outro computador?

    
por mef_ 10.11.2015 / 06:58

1 resposta

0

No seu bloco server , você precisa definir a diretiva root para o diretório de nível superior que contém seus recursos (para um aplicativo Rails, este é o diretório public ) e usar try_files para carregar um ativo estático ou passe para o seu aplicativo Rails.

É claro que os arquivos estáticos devem estar acessíveis ao servidor da web (por exemplo, via NFS). Se você não pode fazer isso por algum motivo, então o proxy da máquina A para outra instância nginx na máquina B (que pode acessar os arquivos estáticos), que por sua vez proxies para unicórnio.

Um exemplo rápido:

server {
        listen 80;

        root /home/user/apps/test_app/public;

        location / {
            try_files $uri $uri/ @rails;
        }

        location @rails {
                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_pass http://unicorn_servers;
        }
}
    
por 10.11.2015 / 07:18