html 通用错误页面

打印 上一主题 下一主题

主题 842|帖子 842|积分 2526

因为业务业务需求,必要做一个错误的页面,制止出现错误信息或者相干业务信息泄露,所以在Nginx配置一个通用错误页面。

完成后页面访问路径:
/error.htmlstatus=500&uri=/user&time_local=2024年7月29日10:16:04&remote_addr=127.0.0.1&args=test=1

Nginx获取相干错误信息的方式:
  1. location / {
  2.         #root  D:/Product/xxx;
  3.         proxy_pass http://192.168.110.28:8080;
  4.         #主要是拦截tomcat的错误,不然获取不到Java抛出的异常
  5.         proxy_intercept_errors on; # 开启错误拦截
  6. }
  7. error_page  404 405 500 502 503 504  /50x.html;
  8. location /50x.html {
  9.         internal;  # 确保该页面只能通过内部重定向访问
  10.     root   html;
  11.         # 传递状态码和其他信息到自定义页面
  12.         rewrite ^ /error.html?status=$status&uri=$uri&remote_addr=$remote_addr&http_user_agent=$http_user_agent&time_local=$time_local permanent;
  13. }
  14. # 目标前缀
  15. location /error.html {
  16. }
复制代码
以下是一些常用的 Nginx 变量及其用途,你可以在错误页面或日志中利用这些变量:

  • 请求相干信息:
    $request: 完整的原始请求行。
    $uri: 当前请求的 URI(不包罗请求参数)。
    $args: 请求参数。
    $request_body: 请求体内容。
    $request_method: 请求方法(例如 GET、POST 等)。
    $remote_addr: 客户端 IP 所在。
    $remote_port: 客户端端口。
    $http_user_agent: 客户端的 User-Agent 头信息。
    $http_referer: 引用页面(Referer 头信息)。
  • 服务器相干信息:
    $server_name: 服务器名称。
    $server_addr: 服务器所在。
    $server_port: 服务器端口。
    $hostname: 服务器主机名。
  • 毗连和会话信息:
    $connection: 毗连序列号。
    $connection_requests: 当前毗连上的请求数量。
    $cookie_name: 指定的 cookie 值(例如 $cookie_SESSIONID 获取名为 SESSIONID 的 cookie 值)。
  • 时间相干信息:
    $time_iso8601: 当前时间,ISO 8601 格式。
    $time_local: 当前时间,本地时间格式。
完整代码:
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4.     <meta charset="utf-8"/>
  5.     <title>错误页面</title>
  6.     <style>
  7.         body {
  8.             margin: 0;
  9.         }
  10.         h1 {
  11.             font-family: 'Lato', sans-serif;
  12.             font-weight: 300;
  13.             letter-spacing: 2px;
  14.             font-size: 48px;
  15.         }
  16.         p {
  17.             font-family: 'Lato', sans-serif;
  18.             letter-spacing: 1px;
  19.             font-size: 14px;
  20.             color: #333333;
  21.         }
  22.         .header {
  23.             position: relative;
  24.             text-align: center;
  25.             background: linear-gradient(60deg, rgba(84, 58, 183, 1) 0%, rgba(0, 172, 193, 1) 100%);
  26.             color: white;
  27.         }
  28.         .logo {
  29.             width: 50px;
  30.             fill: white;
  31.             padding-right: 15px;
  32.             display: inline-block;
  33.             vertical-align: middle;
  34.         }
  35.         .inner-header {
  36.             height: 65vh;
  37.             width: 100%;
  38.             margin: 0;
  39.             padding: 0;
  40.         }
  41.         .flex {
  42.             /*Flexbox for containers*/
  43.             display: flex;
  44.             justify-content: center;
  45.             align-items: center;
  46.             text-align: center;
  47.         }
  48.         .waves {
  49.             position: relative;
  50.             width: 100%;
  51.             height: 15vh;
  52.             margin-bottom: -7px; /*Fix for safari gap*/
  53.             min-height: 100px;
  54.             max-height: 150px;
  55.         }
  56.         .content .button {
  57.             display: inline-block;
  58.             padding: 0 20px;
  59.             line-height: 40px;
  60.             font-size: 14px;
  61.             color: #fff;
  62.             background-color: #5dadf5;
  63.             text-decoration: none;
  64.         }
  65.         .content .button:hover {
  66.             opacity: .9;
  67.         }
  68.         /* Animation */
  69.         .parallax > use {
  70.             animation: move-forever 25s cubic-bezier(0.55, 0.5, 0.45, 0.5) infinite;
  71.         }
  72.         .parallax > use:nth-child(1) {
  73.             animation-delay: -2s;
  74.             animation-duration: 7s;
  75.         }
  76.         .parallax > use:nth-child(2) {
  77.             animation-delay: -3s;
  78.             animation-duration: 10s;
  79.         }
  80.         .parallax > use:nth-child(3) {
  81.             animation-delay: -4s;
  82.             animation-duration: 13s;
  83.         }
  84.         .parallax > use:nth-child(4) {
  85.             animation-delay: -5s;
  86.             animation-duration: 20s;
  87.         }
  88.         @keyframes move-forever {
  89.             0% {
  90.                 transform: translate3d(-90px, 0, 0);
  91.             }
  92.             100% {
  93.                 transform: translate3d(85px, 0, 0);
  94.             }
  95.         }
  96.         /*Shrinking for mobile*/
  97.         @media (max-width: 768px) {
  98.             .waves {
  99.                 height: 40px;
  100.                 min-height: 40px;
  101.             }
  102.             .content {
  103.                 height: 30vh;
  104.             }
  105.             h1 {
  106.                 font-size: 24px;
  107.             }
  108.         }
  109.         .card {
  110.             text-align: left;
  111.             letter-spacing: 1px;
  112.             color: #666666;
  113.             width: 300px;
  114.             padding: 20px 100px;
  115.             min-height: 250px;
  116.             background: rgba(255, 255, 255, .4);
  117.             border-radius: 5px;
  118.         }
  119.         .card .card-title {
  120.             color: #ff2929;
  121.             padding: 10px 0;
  122.             font-size: 24px;
  123.         }
  124.         .card .card-content{
  125.             word-break: break-all;
  126.         }
  127.     </style>
  128. </head>
  129. <body>
  130. <div class="header">
  131.     <div class="inner-header flex">
  132.         <div class="card">
  133.             <div class="card-title"><b class="status"></b> 页面响应错误!</div>
  134.             <div class="card-content">
  135.                 <p>页面状态:<span class="status"></span></p>
  136.                 <p>访问地址:<span class="uri"></span></p>
  137.                 <p>请求参数:<span class="args"></span></p>
  138.                 <p>访问时间:<span class="time_local"></span></p>
  139.                 <p>客户端 IP:<span class="remote_addr"></span></p>
  140.             </div>
  141.         </div>
  142.     </div>
  143.     <svg
  144.             class="waves"
  145.             xmlns="http://www.w3.org/2000/svg"
  146.             xmlns:xlink="http://www.w3.org/1999/xlink"
  147.             viewBox="0 24 150 28"
  148.             preserveAspectRatio="none"
  149.             shape-rendering="auto"
  150.     >
  151.         <defs>
  152.             <path
  153.                     id="gentle-wave"
  154.                     d="M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z"
  155.             />
  156.         </defs>
  157.         <g class="parallax">
  158.             <use xlink:href="#gentle-wave" x="48" y="0" fill="rgba(255,255,255,0.7"/>
  159.             <use xlink:href="#gentle-wave" x="48" y="3" fill="rgba(255,255,255,0.5)"/>
  160.             <use xlink:href="#gentle-wave" x="48" y="5" fill="rgba(255,255,255,0.3)"/>
  161.             <use xlink:href="#gentle-wave" x="48" y="7" fill="#fff"/>
  162.         </g>
  163.     </svg>
  164. </div>
  165. <div class="content flex">
  166.     <p>
  167.         <a class="button" href="/">返回主页</a>
  168.     </p>
  169. </div>
  170. </body>
  171. <script type="text/javascript">
  172.     var urlParams = new URLSearchParams(window.location.search);
  173.     var statusCode = urlParams.get('status');
  174.     document.querySelectorAll('.status').forEach(function (e) {
  175.         e.textContent = statusCode;
  176.     })
  177.     document.querySelector('.uri').textContent = urlParams.get('uri');
  178.     document.querySelector('.args').textContent = urlParams.get('args');
  179.     document.querySelector('.time_local').textContent = urlParams.get('time_local');
  180.     document.querySelector('.remote_addr').textContent = urlParams.get('remote_addr');
  181. </script>
  182. </html>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表