O Nginx não carregará css / js / images ao redirecionar

1

Eu preciso redirecionar minha página para uma página de manutenção quando obtiver erros de 50x. Ele redireciona, exceto que não carregará css, js ou imagens. O log de erros está limpo e o log de acesso não apresenta nenhum problema.

O seguinte código foi adicionado ao meu arquivo nginx.conf.default, mas não vi nenhuma alteração:

location ~ \.css {
    add_header  Content-Type    text/css;
}

location ~ \.js {
    add_header  Content-Type    application/x-javascript;
}

Meu arquivo html está em /home/user/Documents e meus arquivos css / js / png estão na pasta /home/user/Documents/maintenance_files . Se eu abrir o arquivo html em um navegador, ele buscará corretamente esses arquivos.

Meus tipos de mime estão em /opt/nginx/mime.types . Aqui está o meu arquivo nginx.conf:

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
error_log   logs/error.log debug;

events {
    worker_connections  1024;
}

http {
    proxy_temp_path /home/user/work/nginx_files/proxy_tmpFiles 1 2;
    proxy_redirect off; # Tells the server we aren’t redirecting content. We actually do that later with proxy_pass.


    #include /etc/nginx/mime.types;
    default_type application/octet-stream;


    ##
    # Basic Settings
    ##

    sendfile on;
    keepalive_timeout 65;


    ##
    # Logging Settings
    ##

    #access_log /home/user/nginx_files/logs/access.log;

    ##
    # Gzip Settings
    ##

    gzip on;

    ##
    # Virtual Host Configs
    ##

    #include /etc/nginx/conf.d/*.conf;
    #include /etc/nginx/sites-enabled/*;

    include  /opt/nginx/mime.types;

    server {
        listen 80;
        server_name localhost; 

        #location ~ \.css {
        #    add_header  Content-Type    text/css;
        #}

        #location ~ \.js {
        #    add_header  Content-Type    application/x-javascript;
        #}

        error_page 500 502 503 504 /maintenance.html;
        location = /maintenance.html {
            #include  /opt/nginx/mime.types;

            root /home/user/Documents;
            #index maintenance.html;
            #internal; -> no changes
        }

        location / { 
            #include  /opt/nginx/mime.types;

            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-Forwarded-Proto $scheme;

            proxy_pass http://somelink; 
            #root /home/user/Documents;
            #index maintenance.html;
        }


    }
}

Meu problema é durante o redirecionamento quando recebo erros 50x, neste código. A página html é carregada, mas o nginx não carrega as imagens nem o css.

error_page 500 502 503 504 /maintenance.html;
location = /maintenance.html {
    #include  /opt/nginx/mime.types;

    root /home/user/Documents;
    #index maintenance.html;
    #internal; -> no changes
}

Obrigado pela sua ajuda.

    
por user3641702 04.02.2016 / 12:25

1 resposta

2

Seu problema é que você está veiculando seu conteúdo estático no servidor de aplicativos de back-end. Assim, quando o servidor de aplicativos de back-end não pode responder porque está ocupado, o Nginx prepara uma resposta 502. Sua configuração direciona o Nginx a servir um HTML específico nesse caso, o que, por sua vez, carrega mais conteúdo estático do Nginx. Essas solicitações são, então, intermediadas por proxy para o servidor de aplicativos, e os 502s também são retornados para eles também.

É uma boa ideia veicular conteúdo estático diretamente do Nginx, para simplificar o trabalho do servidor de back-end de se concentrar em servir o aplicativo.

Estruture sua configuração do Nginx para que o Nginx forneça os arquivos estáticos:

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

    location @backend {
      proxy_pass http://example.com;
    }
    
por 04.02.2016 / 17:19