当后端服务器(后端)发送 HTTP 503 代码时,我希望 haproxy 使用它自己的 503 文档页面。是否可以?
见过类似“监控失败”的情况,但不知道如何将其添加到前端。
在节流/速率限制时,如何配置 nginx 以返回 http 状态代码 429(请求过多)而不是默认的 503(服务不可用)?
仅供参考,我使用 nginx 作为 HttpLimitReqModule 的反向代理。429 状态代码的草案规范是RFC6585。
stackexchanged上的这个(封闭)问题表明可以使用error_page指令。不过,我不希望返回一个429是否真的有一个服务器的问题(而不是客户打我们太多),服务器应该返回503服务不可用。
有什么建议?
我正在构建一个页面(使用 video.js,如果重要的话)可以容纳相当多视频的播放器——单击图像缩略图上的按钮,一个模式播放器打开,播放视频。工作正常; 没什么大不了。我的服务器是 Apache 2.2.15,fwiw。
问题:当我查看服务器日志时,我看到每个视频的条目的 HTTP 代码为 206(部分内容),例如:
GET /videos/a_video.mp4 HTTP/1.1" 206 1130496 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.73.11 (KHTML, like Gecko) Version/7.0.1 Safari/537.73.11"
Run Code Online (Sandbox Code Playgroud)
我不确定这些条目的确切含义。当这个页面加载时,1.1 MB 的内容是否真的通过网络推送到客户端,或者这只是当/如果用户真正请求文件时客户端打算使用的信息?将所有这些东西转储到用户/客户端对某人的带宽(更不用说我的站点)来说是一件非常吝啬的事情,尤其是在移动连接上。(基于一些额外的日志分析,看起来这些位真的被推送了,但是与其他更有知识的人一起检查这肯定是正确的做法......)
我想为我的安全网站创建一个 nagios 检查。所有检查需要做的就是使用我通过脚本的登录详细信息登录到该站点。
有没有人知道允许我这样做的插件或脚本?
我曾尝试使用check_http,但即使网站被重定向到错误页面,我也能成功。
我看到所有类似网站使用的 tinyurl 302
但有什么区别?似乎两者都为我工作
自从我们从一个简单的 Apache 实例转向负载平衡环境以来,有时会出现 POST 请求重复的问题。我们正在运行 nginx 作为反向代理。静态内容由 nginx 本身提供,动态内容由两个 Apache 后端提供。
我已经检查过这不是接口/用户错误。一个小例子:简单的图片上传会导致图片上传两次。请求/POST 不会通过双击或用户失败发送两次。我没有发现任何证据表明浏览器发送了两次请求,所以我怀疑是在服务器端。(请注意,这只是怀疑。)大多数这些请求是内部的,这意味着它们来自员工,因此我可以验证它们是如何产生的。
我能找到的唯一“错误”是 nginx499在这些情况下会记录错误。但是,我不确定这是问题的原因还是只是问题的(副作用)。(我知道 499 不是默认的 http 状态,它是 nginx 状态,意思是“客户端已关闭连接”)
重复的 POST 请求几乎是所有可能需要一段时间的请求。我在这里作为示例展示的是一个简单的图像上传,但脚本在后台执行一些操作(图像必须转换为不同的格式/大小,并且应该分发到两个服务器等)。
一个例子是上传图片。nginx 将记录一个“499”和一个 200 请求,但 Apache 正在接收(并处理!)两个请求。
阿帕奇
[17:17:37 +0200] "POST ***URL** HTTP/1. 0" 200 9045
[17:17:47 +0200] "POST ***URL** HTTP/1. 0" 200 20687
Run Code Online (Sandbox Code Playgroud)
nginx
[17:17:47 +0200] "POST ***URL** HTTP/1.1" 499 0
[17:17:52 +0200] "POST ***URL** HTTP/1.1" 200 5641
Run Code Online (Sandbox Code Playgroud)
在我看来,更大/更慢的上传受到更多影响,所以我怀疑超时。我试图阅读 499 错误:结论似乎是“客户端关闭连接”。这可能是后台的情况,但我不确定这将如何意味着应该发出第二个请求,并且肯定不会发生“用户关闭浏览器”之类的事情。
目前,它似乎有助于分解较慢的 POST 请求(如果有多个事情要做,只需让用户选择 1 并为另一个选择第二次 POST),但这可能只是降低了它发生的机会。没有把握。
这显然是一个临时解决方案。如果是超时,我需要找出在哪里并增加相应的数字,但我不确定为什么超时会导致这种行为:我怀疑是“好吧,出错了”消息,而不是重复。 …
是否有适用于通过 SNI 或 HTTP Host 标头发送错误主机名(或根本没有)的客户端的 HTTP 状态代码?
一个较旧的问题首先解决了此类请求如何以及为何发生,以及如何在 Apache 中从技术上处理它们。然而,它没有解决响应状态代码的选择问题。
过去,我实现了一个 HTTP 代理,它会发送状态代码 502 和一个 html 页面,解释为什么会产生错误消息。我使用 502 的理由是期望我看到它主要是由于配置错误,这意味着代理找不到合适的后端。实际上,仅仅看到完全虚假的主机名的频率要高得多。
是否有另一个状态代码更合适,更清楚地向客户端发出信号,表明此 IP 地址上的服务器无法识别通过 SNI 和/或主机标头发送的值?
我正在为我的网站创建自定义错误页面。我想要一个,如果有一个通用错误(无效的查询字符串、不正确的身份验证等)将被显示。这很容易,问题是,这会是什么错误代码?404未找到,403禁止。
这最好属于什么代码?
有什么方法可以防止 IIS 自动覆盖返回 500 或 400 范围内的状态代码的 Web 应用程序的输出?
举个例子,在 ColdFusion 中,我可以创建以下页面:
<cfheader statuscode="500" statustext="Error">
Sorry, an error occurred.
Run Code Online (Sandbox Code Playgroud)
行为应该是我看到一个页面,上面写着“对不起,发生了错误”。并在标题中看到状态代码为 500。
相反,我看到:
Server Error
500 - Internal server error.
There is a problem with the resource you are looking for, and it cannot be displayed.
Run Code Online (Sandbox Code Playgroud)
在可爱的 IIS 样式中。
我尝试删除 500 个自定义状态页面,但这只是导致:
The page cannot be displayed because an internal server error has occurred.
Run Code Online (Sandbox Code Playgroud)
没有任何可爱的造型。
看起来这种情况发生在任何返回不在 200 或 300 范围内的代码的页面上。
有没有办法禁用access_log200 HTTP 响应代码?我尝试使用条件,但似乎块access_log中不允许使用指令if。我试过这个:
access_log /var/log/nginx/access_log;
if ($http_status == 200){
access_log off; # <---------
}
Run Code Online (Sandbox Code Playgroud)
但它无效
# nginx -t
nginx: [emerg] "access_log" directive is not allowed here ...
Run Code Online (Sandbox Code Playgroud)
有什么办法可以做到这一点吗?
我试图让 Nginx 返回一个简单的网页,但总是带有 403 的 http 状态代码。出于某种原因,我无法让它工作。我在 /var/www/html/ 中有两个文件:
index.html 显示一些文本和 photo.jpg
这是我的 Nginx 配置:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
return 403;
}
error_page 404 /index.html;
error_page 403 /index.html;
location = /index.html {
allow all;
}
location = /photo.jpg {
allow all;
}
}
Run Code Online (Sandbox Code Playgroud)
使用此配置,index.html 和 photo.jpg 都以 200 的状态显示。如果我删除location这两个文件的块,它们都不会显示,但它们的状态为 403。我的问题是:如何我可以显示 html 文件和图像,但只返回 403 状态吗?我觉得我错过了一些简单的东西。
不知道为什么,但我所有的错误页面都以 200 响应。这对我来说有点奇怪,页面存在但它们不应该有相应的状态代码吗?如何让 Nginx 使用 404 状态代码呈现我的 404 页面?
例如:
? curl -I http://example.com/404
HTTP/1.1 200 OK <<--------------------------- WTF! THIS SHOULD BE 404!!
Server: nginx/1.8.0
Date: Tue, 17 Apr 2018 02:24:04 GMT
Content-Type: text/html; charset=UTF-8
...
Run Code Online (Sandbox Code Playgroud)
这是我的配置的相关部分:
server {
listen 80 default_server;
server_name example.com;
root /var/www/example/static;
index index.html;
try_files $uri $uri/ $uri.html =404;
# error pages
error_page 400 =400 /400; # bad request
error_page 401 =401 /401; # unauthorized
error_page 403 =403 /403; # forbidden
error_page 404 =404 /404; # …Run Code Online (Sandbox Code Playgroud) http-status-code ×13
http ×5
nginx ×5
apache-2.2 ×2
haproxy ×1
http-headers ×1
https ×1
iis ×1
nagios ×1
redirect ×1
sni ×1
ssl ×1
website ×1