Nginx error_page自定义错误页面设置过程

本文主要介绍了Nginx error_page自定义错误页面设置过程,具有很好的参考价值,希望对大家有所帮助。

Nginx error_page自定义错误页面设置

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

#fastcgi_intercept_errors on;

    #语法:fastcgi_intercept_errors on|off

    #默认值:fastcgi_intercept_errors off

    #使用字段:http, server, location

    #这个指令指定是否传递4xx和5xx错误信息到客户端,或者允许nginx使用error_page处理错误信息。

    #你必须明确的在error_page中指定处理方法使这个参数有效,正如Igor所说“如果没有适当的处理方法,

    #nginx不会拦截一个错误,这个错误不会显示自己的默认页面,这里允许通过某些方法拦截错误。

    #proxy_intercept_errors 为on 表示 nginx按照原response

    #proxy_intercept_errors on|off

    #proxy_intercept_errors off

    #使用字段:http, server, location    #code输出,后端是404,就是404.这个变量开启后,我们才能自定义错误页面。

    proxy_intercept_errors on;

    upstream dev1 {

        server 127.0.0.1:8080;          #HessianTest3

    }

    server {

        listen       80;

        server_name  kevin.com;

        location / {

            proxy_pass http://dev1;     #HessianTest3

        }

        #参考书本第40页

        #error_page 404 =200 /404.html;

        #error_page 500 502 503 504  =200 /50x.html;

        #location = /404.html {

        #   root html;

        #  

        #}

        #location = /50x.html {

        #    root   html;

        #}

        #当页面发生异常的时候可以指定跳转到location中,也可以指定跳转到指定的URL地址上面

        error_page 404 http://www.baidu.com/;

    }

Nginx error_page 使用

接触到了error_page ,这里记录一下

1. error_page语法

语法:

1

error_page code [ code... ] [ = | =answer-code ] uri | @named_location

默认值:

1

no 

使用字段:

http, server, location, location 中的if字段 

2. 实例

nginx指令error_page的作用是当发生错误的时候能够显示一个预定义的uri,比如:

1

2

3

4

error_page 502 503 /50x.html;

location = /50x.html {

    root /usr/share/nginx/html;

}  

这样实际上产生了一个内部跳转(internal redirect),当访问出现502、503的时候就能返回50x.html中的内容,这里需要注意是否可以找到50x.html页面,所以加了个location保证找到你自定义的50x页面。

同时我们也可以自己定义这种情况下的返回状态吗,比如:

1

2

3

4

error_page 502 503 =200 /50x.html;

location = /50x.html {

    root /usr/share/nginx/html;

}   

这样用户访问产生502 、503的时候给用户的返回状态是200,内容是50x.html。

当error_page后面跟的不是一个静态的内容的话,比如是由proxyed server或者FastCGI/uwsgi/SCGI server处理的话,server返回的状态(200, 302, 401 或者 404)也能返回给用户。

1

2

3

4

5

6

error_page 404 = /404.php;

location ~ \.php$ {

    fastcgi_pass 127.0.0.1:9000;

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    include fastcgi_params;

}   

也可以设置一个named location,然后在里边做对应的处理。

1

2

3

4

error_page 500 502 503 504 @jump_to_error;

location @jump_to_error {    

    proxy_pass http://backend;

}

同时也能够通过使客户端进行302、301等重定向的方式处理错误页面,默认状态码为302。

1

2

error_page 403      http://example.com/forbidden.html;

error_page 404 =301 http://example.com/notfound.html;

同时error_page在一次请求中只能响应一次,对应的nginx有另外一个配置可以控制这个选项:recursive_error_pages

默认为false,作用是控制error_page能否在一次请求中触发多次。

3. Nginx 自定义404错误页面配置中有无等号的区别

  • error_page 404 /404.html 可显示自定义404页面内容,正常返回404状态码。
  • error_page 404 = /404.html 可显示自定义404页面内容,但返回200状态码。
  • error_page 404 /404.php 如果是动态404错误页面,包含 header 代码(例如301跳转),将无法正常执行。正常返回404代码。
  • error_page 404 = /404.php 如果是动态404错误页面,包含 header 代码(例如301跳转),加等号配置可以正常执行,返回php中定义的状态码。但如果php中定义返回404状态码,404状态码可以正常返回,但无法显示自定义页面内容(出现系统默认404页面),这种情况可以考虑用410代码替代( header("HTTP/1.1 410 Gone"); 正常返回410状态码,且可正常显示自定义内容)。

例子

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

server  {

    listen 80;

    server_name  test.com;

    index       index.html index.htm;

  

    location / { 

        proxy_pass http://online;

        error_page 404 = @fallback;

        proxy_intercept_errors on;

    }

    location @fallback {

        proxy_pass http://backend;

    }

}

  

upstream online {

         server 192.168.88.18:80;

         server 192.168.88.28:80;

}

  

upstream backend {

         server 192.168.88.38:80;

}

例子

由于在nginx配置中,设置了limit_req的流量限制,导致许多请求返回503错误代码,在限流的条件下,为提高用户体验,希望返回正常Code 200,且返回操作频繁的信息:

1

2

3

4

5

6

7

8

9

10

11

12

13

location  /test {

  ... 

  limit_req zone=zone_ip_rm burst=1 nodelay; 

  error_page 503 =200 /dealwith_503?callback=$arg_callback;

}

location /dealwith_503

  set $ret_body '{"code": "V00006","msg": "操作太频繁了,请坐下来喝杯茶。"}';

   if ( $arg_callback != ""

   

       return 200 'try{$arg_callback($ret_body)}catch(e){}'

   

   return 200 $ret_body; 

}

总结

以上为个人经验,希望能给大家一个参考,也希望可以帮到你。

来源:微点阅读   https://www.weidianyuedu.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Nginxerror_page 配置用于设置错误面的处理方式。可以使用 error_page 指令将特定的 HTTP 状态码映射到特定的错误面。 语法: error_page 错误码 [= URL]; 例如: ``` error_page 404 /404.html; error_page 500 502 503 504 /50x.html; ``` 这样当服务器返回404状态码时,将会返回/404.html,当服务器返回500,502,503,504状态码时,将会返回/50x.html 请注意,错误面文件必须在服务器上可用。 ### 回答2: 在Nginx中,error_page用于配置服务器遇到错误时的错误面。具体来说,error_page指令用于定义当客户端请求的资源出现错误时所返回给客户端的面或路径。 要配置error_page,首先需要在Nginx配置文件中指定所需的错误代码和对应的错误面或路径。例如,以下是配置404错误错误面为/error/404.html的示例: ``` error_page 404 /error/404.html; ``` 在这个示例中,当服务器返回404错误时,将会将客户端重定向到/error/404.html面。 除了简单的路径,error_page还支持其他形式的配置。例如,可以使用明确的URL来定义错误面: ``` error_page 500 http://example.com/error/500.html; ``` 这个配置将会将500错误重定向到http://example.com/error/500.html面。 还可以将错误面配置为其他返回状态码的面,例如400、503等。可以同时配置多个错误面,Nginx会按照配置的顺序查找并使用第一个匹配的错误面。 通过配置error_page,可以在服务器遇到错误时返回适当的错误面,提高用户体验和处理错误的可视化。 ### 回答3: 在Nginx中,可以通过配置error_page来指定自定义错误面。error_page指令允许当服务器出现特定错误时指定一个自定义面来替代默认的错误面。 配置error_page的语法如下: ``` error_page code [target]; ``` code是需要自定义错误面的错误码,可以是一个具体的错误码(如404),也可以是一个错误码的范围(如400-499表示所有的客户端错误)。 target是指定自定义错误面的路径。路径可以是一个本地路径,也可以是一个远程URL。 例如,如果想指定404错误自定义面为`/var/www/html/404.html`,可以在Nginx的配置文件中添加如下配置: ``` error_page 404 /404.html; ``` 这样,当出现404错误时,Nginx会显示`/var/www/html/404.html`作为错误面。 另外,可以通过配置多个error_page来指定不同错误码对应的不同自定义面。例如: ``` error_page 404 /404.html; error_page 500 502 /50x.html; ``` 这样,当出现404错误时,会显示`/404.html`作为错误面;当出现500或502错误时,会显示`/50x.html`作为错误面。 需要注意的是,当指定了自定义错误面后,Nginx会优先显示自定义面,如果没有指定自定义面或自定义面不存在,才会显示默认的错误面。 综上所述,通过配置error_page,可以方便地指定自定义错误面,提供更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值