1. server {
  2. # 配置访问 /test.js 时报 403 错
  3. location /test.js {
  4. return 403;
  5. }
  6. # 配置访问 /404 时报 404 错
  7. location /404 {
  8. return 404;
  9. }
  10. # 配置访问 /500 时报 500 错
  11. location /500 {
  12. return 500;
  13. }
  14. # 把指定状态码指向这个文件 uri
  15. error_page 500 502 503 504 /status.html;
  16. error_page 404 /status.html;
  17. }

如:

  1. server {
  2. listen 80;
  3. server_name test.me;
  4. root /Users/xiaowu/work/test.me;
  5. # 用if匹配任何以 403 开头的,会匹配到 /4034444
  6. if ($request_uri ~* ^/403) {
  7. return 403;
  8. }
  9. # 用location匹配 /500/ /500,但不匹配 /500/1
  10. location ~* "^/500/?$" {
  11. return 500;
  12. }
  13. # 用if匹配以 /501/ 开头的,匹配 /501/1,/501/1/2 但不匹配 /501
  14. if ($request_uri ~* ^/501/) {
  15. return 501;
  16. }
  17. # 用location匹配 /502/ /502 /502/1 /502/1/2
  18. location ~* "^/502(/.*)?$" {
  19. return 502;
  20. }
  21. # 用location只匹配 /503
  22. location = /503 {
  23. return 503;
  24. }
  25. }

error_page配置小提示

注意 error_page 配置时加 = 和不加 = 的区别,加了 = 表示响应为指定的 http status code ,默认为 200,不加 = 为原错误的状态码~

  1. # 这样可以访问错误页面时 http status 为 404 ,并且页面内容是 404.html 的内容
  2. error_page 404 /404.html
  3. error_page 404 500 /404.html;
  4. # 这样配置访问错误页面时 http status 为 200 ,但页面内容是 404.html 的内容
  5. error_page 404 500 = /404.html;
  6. # 这样配置访问错误页面时 http status 为 404 ,但页面内容是 404.html 的内容
  7. error_page 404 500 =404 /404.html;
  8. # 也可以把404请求直接301到某个域上
  9. error_page 404 =301 https://xuexb.com/404;

这样就可以根据自己需求配置错误页为指定的状态码,因为非 200 的状态码可能会被浏览器拦截。