当我收到 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;
}