Nginx 在重定向时不会加载 css/js/images

Nginx 在重定向时不会加载 css/js/images

当我收到 50x 错误时,我需要将页面重定向到维护页面。它确实重定向了,但不会加载 css、js 或图像。错误日志很干净,访问日志没有显示任何问题。

以下代码已添加到我的 nginx.conf.default 文件中,但我没有看到任何变化:

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

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

我的 html 文件在里面/home/user/Documents,我的 css/js/png 文件在/home/user/Documents/maintenance_files文件夹中。如果我在浏览器中打开 html 文件,它会正确获取这些文件。

我的 mime 类型是/opt/nginx/mime.types。这是我的 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;
        }


    }
}

我的问题是在重定向期间,在此代码中出现 50x 错误。html 页面已加载,但 nginx 不会加载图像或 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
}

感谢您的帮助。

答案1

您的问题在于,您正在从后端应用服务器提供静态内容。因此,当后端应用服务器因繁忙而无法响应时,Nginx 会准备一个 502 响应。在这种情况下,您的配置指示 Nginx 提供特定的 HTML,从而从 Nginx 加载更多静态内容。然后,这些请求被代理到应用服务器,并且也会为它们返回 502。

无论如何,直接从 Nginx 提供静态内容是一个好主意,以简化后端服务器专注于服务应用程序的工作。

像这样构建你的 Nginx 配置以使 Nginx 提供静态文件:

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

    location @backend {
      proxy_pass http://example.com;
    }

相关内容