如何在 nginx 上使用 404 拒绝
Posted
技术标签:
【中文标题】如何在 nginx 上使用 404 拒绝【英文标题】:How to deny with 404 on nginx 【发布时间】:2014-12-09 17:42:41 【问题描述】:我想通过提供拒绝/允许指令来保护 nginx 中的某些位置,但我不希望外人知道某个位置被拒绝。我希望外人获得 404,而不是 403 http 代码。我的配置sn-p是
location /admin/
uwsgi_pass myupstream1;
include /path/to/uwsgi_params;
allow 127.0.0.1;
deny all;
当我尝试访问 /admin/ 时,nginx 以 HTTP 403 响应,但我希望它以 HTTP 404 响应。有什么办法吗?
【问题讨论】:
【参考方案1】:error_page 403 404 /404.html;
location = /404.html
internal; #return 404
location /admin/
uwsgi_pass myupstream1;
include /path/to/uwsgi_params;
allow 127.0.0.1;
deny all;
The 'internal' returns 404 by default.
改编自这个答案here
【讨论】:
这实际上是返回正确的错误代码,还是只返回正确的资源? 我没有检查响应头,但我认为它会响应 403。我找到了另一个可能会更好的解决方案。 但这会将所有 403 更改为 404,与否?我更喜欢另一个答案,您在拒绝后添加return 404;
行。
这确实会将所有 403 响应更改为 404。如果您想让此行为特定于 /admin/,您可以移动“error_page 403 404 /404.html;”进入它的位置块
虽然这个答案确实有效,但 nginx 文档建议第一行应该有一个赋值运算符,即 'error_page 403 =404 /404.html;'【参考方案2】:
更优雅的方法是创建自定义错误页面。在该页面中,您可以指定自定义消息,而不是显示 http 错误代码。
命名错误页面
error_page 403 =404 /40X.html; location /admin/ uwsgi_pass myupstream1; include /path/to/uwsgi_params; allow 127.0.0.1; deny all; location /40X.html root path/to/public;
在你的 40x.html 中你可以写任何信息
<html> <body> The requested resource is not available </body> </html>
把这个 40x.html 放在你的 path/to/public 目录中
【讨论】:
谢谢。在我的 50x 配置文件中已经有了这个,不知道这是做事的方式,真的很好,知道他们不知道一个位置是否真的存在:) 我使用 addons.mozilla.org/en-US/firefox/addon/live-http-headers 验证了返回的 404 标头 - 在/40X.html
节中使用 internal
(而不是 @987654325 @) 返回默认的404
页面。【参考方案3】:
您可以使用“重写”而不是“全部拒绝”
location /admin/
uwsgi_pass myupstream1;
include /path/to/uwsgi_params;
#allow 127.0.0.1;
#deny all;
rewrite ^/admin/(.*)$ /404.php?id=$1;
将 404.php 放入您的域的根目录(例如_http://127.0.0.1/404.php)或更改 "路径/to/file/404.php?id=$1"
【讨论】:
【参考方案4】:return 404; 会做你想做的事。往下看
location /admin/
uwsgi_pass myupstream1;
include /path/to/uwsgi_params;
allow 127.0.0.1;
deny all;
#Following line returns 404
return 404;
【讨论】:
我试过了,但它在允许和拒绝时都返回 404 它不起作用。更多deny
规则失效以上是关于如何在 nginx 上使用 404 拒绝的主要内容,如果未能解决你的问题,请参考以下文章
如何自定义404页面?云服务器+Nginx中加3行配置搞定,小白跟着流畅操作
nginx process = 404 如何在try_files中回退