我在 nginx 上运行了一些虚拟主机,我希望它们每个都有自己的自定义 404 页面。每个虚拟主机都有自己的 nginx.conf,我包括我的全局 nginx.conf。
在我目前无法正常工作的特定虚拟主机的配置文件中,配置块如下所示:
server{
listen 80;
server_name www.foo.com;
expires 1M;
access_log /srv/www/foo/logs/acces.log;
error_log /srv/www/foo/logs/error.log;
error_page 404 /404.html;
location / {
root /srv/www/foo/public_html;
index index.html;
rewrite ^/(.*)/$ /$1 permanent;
try_files "${uri}.html" $uri $uri/ =404;
}
location = /404.html {
internal;
}
}
Run Code Online (Sandbox Code Playgroud)
404'ing 本身没问题,但是当返回 404 状态代码时,将显示默认的 nginx 404 页面,而不是位于站点根目录中的自定义页面 404.html。
我已经尝试通过文件系统和站点的 URI 绝对路径到错误页面,并且我已经尝试将 error_page 指令放在位置块中。这些都没有奏效。我怀疑问题出在我用来“美化”我的 URL 的重写和 try_files 组合中。
在我全新的Windows Server 2008和IIS7 上,似乎customErrors无法正常工作。
我们已经在我们的 Asp.Net 站点和应用程序的 web.config 中customErrors设置了RemoteOnly。然而,无论我们做什么,看起来我们的站点都像它设置的那样,On当远程连接到我们的服务器时,我们无法在我们的应用程序上看到任何详细的消息。
我不完全确定如何跟踪它被覆盖的位置,或者服务器的配置方式是否会使服务器认为请求是内部的?无论如何,这实际上如何正确解决?
任何帮助表示赞赏...
我们的网络管理员已将域添加到我们的主机文件中,以将应用程序定向到 IP 地址。
这个问题早就应该回答了,但尽管阅读了许多常见的答案,但我似乎无法弄清楚,有人可以指出为什么我的配置不起作用吗?
目标:当上游 server_api 关闭时(例如,其工作进程崩溃),我希望 nginx 显示我的自定义错误页面。
我的配置:
location @server {
proxy_pass http://server_api;
proxy_redirect off;
...
proxy_intercept_errors on;
error_page 502 /error-502.html;
}
error_page 502 /error-502.html;
location = /error-502.html {
internal;
root /srv/my-server/html;
}
Run Code Online (Sandbox Code Playgroud)
我的步骤:
/srv/my-server/html/error-502.html准备好静态错误页面,与其他静态资产具有相同的权限和所有者。[error] 2359#0: *25 connect() failed (111: Connection refused) while connecting to upstream出现在日志中。error_page在两者或其中之一server或location块上进行设置。error_page用proxy_intercept_errors on在location或server块;他们似乎都没有说服 nginx 显示我的错误页面。为什么不?我错过了什么?
我注意到,比如说,goolge 的 404 页面返回 404 状态(http://www.google.com/404.html),而 github 的返回 200(https://github.com/404.html)。错误页面(甚至 503 等)是否应该始终使用正确的状态代码?或者前端服务器应该拦截它们并显示 200ed 错误页面?
我在 Windows Server 2008 R2 上有一个 Apache 2.4 服务器,用作反向代理。它一直运行良好,并为大约 15 个虚拟主机提供服务。每当主机出现故障时,我想显示一个网页,指示服务器暂时关闭。我将自定义错误文件放在 htdocs 文件夹中名为 errors 的文件夹中。我在 httpd.conf 文件中有以下指令:
ErrorDocument 500 /errors/default.html
ErrorDocument 502 /errors/default.html
ErrorDocument 503 /errors/default.html
ErrorDocument 504 /errors/default.html
ErrorDocument 400 /errors/default.html
ErrorDocument 404 /errors/default.html
ErrorDocument 408 /errors/default.html
<Directory "C:/Program Files/Apache Software Foundation/Apache2.4/htdocs/errors">
Order deny,allow
Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)
我关闭了一台代理服务器来测试错误页面,我看到以下内容:
服务不可用 由于维护停机或容量问题,服务器暂时无法为您的请求提供服务。请稍后再试。
此外,在尝试使用 ErrorDocument 处理请求时遇到 503 Service Unavailable 错误。
如果我使用文本错误消息,例如“服务器当前离线”,那么我确实会看到该文本显示。如果我引用外部 Web 服务器来提供页面,那么我会看到从该服务器提供的页面。几乎就好像 Apache 服务器只是代理请求,无法为本地错误页面提供服务。
我猜我需要添加或更改虚拟主机条目以允许 Apache 服务器提供本地页面(错误页面),但由于服务器仅由 DNS 中的 IP 引用,我不知道该怎么做(它是使用命名主机)。我只是假设错误页面将由 Apache 正确提供而无需额外配置(除了允许对包含错误页面的文件夹的权限并在 ErrorDocument 条目中引用它们)。
我错过了什么?自定义错误文档的设置看起来很简单,但我无法从代理本身提供它们。
我正在尝试为404我的 apache 服务器上的错误设置一个自定义错误页面。
这是我包含在 Virtualhost
<VirtualHost *:80>
ErrorDocument 404 /var/www/html/mant.html
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
但是这个页面没有显示而是重定向到默认的 404 页面
笔记:
我已经重新启动了apache sudo service apache2 restart
我可以使用以下网址访问错误页面
<ip>/mant.html