技术解析

Nginx 404 页面位于哪里 ?
0
2021-06-22 05:34:27
idczone

最近在折腾 Nginx , 想找到这个 404 页面在那里 !

上述的 404 页面并不在 /usr/share/nginx/html 当中

/usr/share/nginx/html 中的 404 页面是这样的 :

在 linux 中执行命令,搜索 nginx/1.12.2,并没有找到这个文件

 find / -xdev -type f -print0 | xargs -0 grep -H "nginx/1.12.2"

因此 ,这个文件在哪里呢 ?


https://www.google.com/search?num=30&newwindow=1&source=hp&ei=0kwTXJz6NpiJoATuroGwAw&q=nginx+404+page&btnK=Google+Search&oq=nginx+404+page&gs_l=psy-ab.3..0j0i203l4j0i22i30l5.462.3845..4058...0.0..0.240.2537.0j10j5....2..0....1..gws-wiz.....0..35i39j0i131j0i3.zQwEHAhzKSw

为什么一定要是个文件?
https://github.com/nginx/nginx/blob/branches/default/src/http/ngx_http_special_response.c#L132

为了效率。这种常见的返回页面还要靠磁盘文件的话效率太低了。写进源代码一把梭。要修改的话直接改源码重新编译即可。

原来不是直接写在 html 文件里的呀....

原来如此 , Thanks

你可以自定义 404 页面跳转啊不一定要 重新编译源码

因为没有在 /usr/share/nginx/html 下发现这个文件,所以好奇想知道这个文件的路径在哪里。

创建个 404 丢进去就行了

这个 404 是没有实体页面的吧,nginx 返回 4xx 5xx 都是这个界面,

版本号估计会从 c 的 header(.h 文件)获得,而不是硬编码,所以你用 nginx/${版本号}去 grep 应该找不到。

是硬编码的,在$nginx_source_path/src/http/ngx_http_special_response.c 里面。
~ sed -n 132,137p $nginx_source_path/src/http/ngx_http_special_response.c
static char ngx_http_error_404_page[] =
"" CRLF
"404 Not Found" CRLF
"" CRLF
"

404 Not Found

" CRLF
;
至于页脚的版本号,应该与同一个文件中的 21,39 行有关
static u_char ngx_http_error_full_tail[] =
"
" NGINX_VER "
" CRLF
"" CRLF
"" CRLF
;

static u_char ngx_http_error_build_tail[] =
"
" NGINX_VER_BUILD "
" CRLF
"" CRLF
"" CRLF
;

static u_char ngx_http_error_tail[] =
"
nginx
" CRLF
"" CRLF
"" CRLF
;
以上结果由 nginx 1.15.7 源码得出。
你可以下载其源码,修改这个文件后,用 nginx -V 获取原先的编译参数,再重新编译安装。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服