我想通过提供deny / allow指令来保护nginx中的某些位置,但我不希望局外人知道位置被拒绝。我希望局外人获得404,而不是403 http代码。我的配置代码段是
location /admin/ {
uwsgi_pass myupstream1;
include /path/to/uwsgi_params;
allow 127.0.0.1;
deny all;
}
当我尝试访问/ admin / nginx使用HTTP 403进行响应时,我希望它以HTTP 404响应。有什么配方吗?
答案 0 :(得分:4)
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
答案 1 :(得分: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放在您的路径/ / public目录
中答案 2 :(得分:-1)
您可以使用“重写”而不是“拒绝所有”
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)或更改 “path / to / file / 404.php?id = $ 1”
答案 3 :(得分:-1)
返回404; 会做你想要的。看下去
location /admin/ {
uwsgi_pass myupstream1;
include /path/to/uwsgi_params;
allow 127.0.0.1;
deny all;
#Following line returns 404
return 404;
}