你好,我希望有人能帮助我,因为我尝试了所有可能的配置。我在网上搜索了很多,有很多关于如何使用位置块来阻止某人访问 php 文件的变体,但都不起作用……最后我找到了这个:
server {
server_name mywebsite.com www.mywebsite.com;
access_log /var/log/nginx/mywebsite.com.access.log rt_cache;
error_log /var/log/nginx/mywebsite.com.error.log;
root /var/www/mywebsite.com/htdocs;
index index.php index.html index.htm;
include common/wpfc-php7.conf;
include common/wpcommon-php7.conf;
include common/locations-php7.conf;
include /var/www/mywebsite.com/conf/nginx/*.conf;
limit_req zone=one burst=8;
limit_conn two 2;
location ~ (.php|.aspx|.asp|myadmin|wp-includes|wp-content) {
return 301;
}
location ~ /(wp-admin|wp-login) {
allow my.ip;
limit_req zone=one burst=50;
deny all;
}
location = /xmlrpc.php {
deny all;
}
}
现在此代码可以正常工作。如果我尝试访问任何文件夹上的 aspx、asp,我都会得到 301;如果我尝试访问 wp-includes、wp-content 中的任何内容,我都会得到 301;但是,如果我尝试访问 php,我就会得到 404。我做错了什么?
答案1
如果你想捕获所有带有 、 等扩展名的文件,.php
你可以尝试将正则表达式行添加到你的位置。请参阅示例.asp
.aspx
((.*).php|(.*).aspx|(.*).asp|myadmin|wp-includes|wp-content)
regex101.com。
所以你的位置应该是这样的:
location ~ ((.*).php|(.*).aspx|(.*).asp|myadmin|wp-includes|wp-content) {
return 301;
}
检查代码的另一个地方是
https://nginx.viraptor.info/完全条件
server {
listen 80;
server_name example.com;
location ~ ((.*).php|(.*).aspx|(.*).asp|myadmin|wp-includes|wp-content) {
return 301;
}
}