nginx 自定义403返回页面

文章介绍了如何配置Nginx以显示自定义的403Forbidden错误页面,包括开启fastcgi_intercept_errors选项,使用error_page指令指定403错误页面,并展示了如何在HTML中使用SSI(ServerSideIncludes)来显示动态信息如远程IP地址和当前时间。
摘要由CSDN通过智能技术生成

背景

因公司内部域名通常用白名单的方式来进行域名访问限制,想要自定义 403 返回页面

配置

1、开启允许 nginx 使用 error_page 处理错误信息

fastcgi_intercept_errors on;

因为只涉及 nginx ip 白名单,所以只需要开启 fastcgi_intercept_errors 即可,如果需要自定义 上游/代理 服务器的状态吗,则需要开启 proxy_intercept_errors
2、关于 error_page 配置

error_page 403 /403.html 可显示自定义403页面内容,正常返回403状态码。
error_page 403 = /403.html 可显示自定义403页面内容,但返回200状态码。

3、ssi 配置
开启 ssi 配置就可以在 html 文件中使用 nginx 中的自有变量
以下配置就可以展示 nginx 中的 $remote_addr 变量

<!--# echo var="remote_addr" -->

4、具体配置
也可以配置成返回固定的 html 文件

fastcgi_intercept_errors on;
error_page 403 /custom_403.html; #自定义错误页面 uri
location = /custom_403.html {
    ssi on;  # 使html支持读取变量
    ssi_silent_errors on;  # 默认值是off,开启后在处理SSI文件出错时不输出错误提示
    add_header Content-Type 'text/html';
    add_header X-Frame-Options 'SAMEORIGIN';
    return 403 '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
 Sorry for the inconvenience.<br/>
Please report this message and include the following information to us.<br/>
Thank you very much!</p>
<table>
<tr>
<td>URL:</td>
<td><!--# echo var="scheme" -->://<!--# echo var="host" --><!--# echo var="request_uri" --></td>
</tr>
<tr>
<td>Server:</td>
<td>AMS_PROXY</td>
</tr>
<tr>
<td>Your Ip:</td>
<td><!--# echo var="remote_addr" --></td>
</tr>
<tr>
<td>Date:</td>
<td>
<script language="JavaScript" type="text/javascript">
var enabled = 0; today = new Date();
var date;
M=today.getMonth() + 1
D=today.getDate()
HH=today.getHours()
MM=today.getMinutes()
SS=today.getSeconds()
if (M<10)
{
M="0"+M
}
if (D<10)
{
D="0"+D
}
if (MM<10)
{
MM="0"+MM
}
if (HH<10)
{
HH="0"+HH
}
if (SS<10)
{
SS="0"+SS
}
date = (today.getFullYear()) + "/" + M + "/" + D + " " + HH+":"+MM+":"+SS +"";
document.write(date);
</script>
</td>
</tr>
</table>
<hr/>Powered by Tengine<hr><center>tengine</center>
</body>
</html>';
}
您可以使用 Nginx 的 error_page 指令来自定义返回所有 40x 错误码页面。 示例: ``` error_page 400 /error/400.html; error_page 401 /error/401.html; error_page 403 /error/403.html; error_page 404 /error/404.html; error_page 405 /error/405.html; error_page 406 /error/406.html; error_page 407 /error/407.html; error_page 408 /error/408.html; error_page 409 /error/409.html; error_page 410 /error/410.html; error_page 411 /error/411.html; error_page 412 /error/412.html; error_page 413 /error/413.html; error_page 414 /error/414.html; error_page 415 /error/415.html; error_page 416 /error/416.html; error_page 417 /error/417.html; error_page 418 /error/418.html; error_page 422 /error/422.html; error_page 423 /error/423.html; error_page 424 /error/424.html; error_page 425 /error/425.html; error_page 426 /error/426.html; error_page 428 /error/428.html; error_page 429 /error/429.html; error_page 431 /error/431.html; error_page 440 /error/440.html; error_page 444 /error/444.html; error_page 449 /error/449.html; error_page 450 /error/450.html; error_page 451 /error/451.html; error_page 494 /error/494.html; error_page 495 /error/495.html; error_page 496 /error/496.html; error_page 497 /error/497.html; error_page 499 /error/499.html; location ^~ /error/ { internal; root /usr/share/nginx/html; } ``` 在上面的示例中,我们定义了所有 40x 错误码页面的路径,并将它们与相应的错误码关联起来。然后,我们在 /error/ 目录下创建了实际的错误码页面,并使用 internal 关键字来表示这些页面只能从 Nginx 内部访问,不能被公开访问。 最后,我们将 /error/ 目录与 root 指令关联起来,以便 Nginx 可以找到实际的错误码页面。 这样,当用户访问您的网站时,如果出现 40x 错误码,Nginx返回自定义的错误码页面,而不是默认的错误页面
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值