我正在尝试拒绝访问/dev
nginx 中的目录。
如果我编辑主配置文件目录:\nginx-1.18.0\conf\nginx.conf像这样,它就可以工作了:
....
http {
...
server {
...
location /dev {
deny all;
}
...
}
}
...
但实际上,我希望所有配置都位于 PHP 应用程序所在的目录中,因此我希望将所有信息放在这样的配置文件中目录:\nginx-1.18.0\html\nginx.conf。
所以我的方法是更改主配置文件目录:\nginx-1.18.0\conf\nginx.conf像这样:
....
http {
...
server {
...
include ../html/nginx.conf;
...
}
}
...
和本地配置文件目录:\nginx-1.18.0\html\nginx.conf像这样:
location /dev {
deny all;
}
但是,这不起作用。我仍然可以访问dev/
。
我尝试了所有我能想到的变体,例如,,,/dev
等等,甚至是绝对路径。但都不起作用。dev/
dev
/html/dev
我究竟做错了什么?
附加问题:是否可以在不更改主配置文件的情况下拒绝对目录的访问?就像在 Apache.htaccess
或web.config
IIS 中所做的那样?
答案1
正则表达式足以满足您的需要。所有包含的请求路径都dev
将被拒绝。
server {
location ~* dev {
deny all
}
}
是否可以在不更改主配置文件的情况下拒绝对目录的访问?就像在 Apache 的 .htaccess 或 IIS 的 web.config 中所做的那样?
http://nginx.org/en/docs/http/ngx_http_access_module.html#deny可能适合您的需要。
答案2
抱歉,因为我是新人,所以无法发表评论。
您使用的语法似乎正确
location = /dev {
deny all;
# access_log off;
log_not_found off;
return 444;
}
http://nginx.org/en/docs/http/ngx_http_core_module.html#location
当您询问 Nginx 其配置是否正确时(从命令行输入 nginx -t),您是否收到任何警告或错误?您是否确定没有其他配置设置覆盖您,类似位置块允许访问。
我个人使用 Nginx 的经验告诉我,应将所有限制尽可能简单并放在一个地方,例如 includes/restrictions.conf,并且我将该文件包含在我的每个服务器块中。
我注意到您使用的是 Windows,也许 Nginx 在 Windows 上运行时有一些我不知道的特性。
再次抱歉,我无法发表评论,否则我会发表评论。