haproxy使用时的小注意--by{流芒}-{土豆}
aproxy的errorloc不支持404错误的处理,需要到到后端的web服务器如nginx或者apache那里进行处理:
如果nginx的话:
error_page 404 /sorry.html;
haproxy增加errorloc的处理时,需要注意路径问题
errorloc 403 http://127.0.0.1:8081/sorry.html
errorloc 403 http://www.example.com/sorry.html
Apache:
ErrorDocument 指令
说明: 定义了当遇到错误的时候服务器将给客户端什么样的回应
语法: ErrorDocument 错误代码文档
上下文: 服务器配置, 虚拟主机, 目录, .htaccess
覆盖项: FileInfo
状态: 核心
模块: core
兼容性: 在Apache 2.0中引用文字的语法有了不同
当遇到问题或错误的时候,Apache能被配置为进行以下四种处理之一:
1. 输出一个简单生硬的错误代码信息
2. 输出一个经过配置的信息
3. 转向一个本地的URL-path来处理这个问题(错误)
4. 转向一个外部的URL来处理这个问题(错误)
默认会采取第一种方法,而第2-4种可以使用ErrorDocument指令后面跟随一个HTTP回应代码和一个URL或信息来进行配置。Apache有时会额外提供一些信息来描述所发生的问题/错误。
URL可以由一个斜杠(/)开头来指示一个本地的URL,或是提供一个能被客户端解释的完整的URL。此外还能提供一个可以被浏览器显示的消息。比如说:
ErrorDocument 500 http://foo.example.com/cgi-bin/tester
ErrorDocument 404 /cgi-bin/bad_urls.pl
ErrorDocument 401 /subscription_info.html
ErrorDocument 403 “Sorry can’t allow you access today”
请注意,如果您为ErrorDocument指定了一个外部的URL(比如说,任何在开头指示了类似“http”这样的访问方法的字串),Apache将会向客户端发送一个转向指令来告诉它在哪里找到这个文档,哪怕这个文档最后还是在这个服务器上。这里面包含着一些暗示:最重要的就是客户端无法接收到一个原始的错误状态代码,取而代之的是一个转向状态代码。这将会使一些用状态代码来判断一个URL是否有效的web机器人或其它客户端产生误解。另外,如果您在ErrorDocument 401中使用了外部URL,客户端将不会提示用户输入密码,因为它根本没收到这样一个401的状态代码。所以,如果您想使用“ErrorDocument 401”指令,它必须指向一个本地的文档。
Microsoft Internet Explorer (MSIE)在服务器端产生的错误信息“很小”的时候会忽略它们而用自己的“友好的”错误信息进行取代。这个大小的阈值根据错误类型而不同。但一般来说,如果您使您的错误文档的大小在512byte以上,MSIE就会显示这些服务器端产生的错误文档而不会屏蔽它们。
Tags: haproxy