我们几周前才开始运行 nginx,需要阻止对某些文件/位置的访问。例如:
/wordpress/wp-admin/
/wp-admin/
/test/wp-admin/
/hudson/login
/phpmyadmin/index.php
/mysql/index.php
/myadmin/index.php
/wp-cron.php
/xmlrpc.php
一般来说,我们希望阻止除 /index.php 之外的任何文件请求以及任何位置,例如 /wp-admin/、/test/wp-admin/、/wordpress/wp-admin/ 等。这些文件/位置不不存在,因此任何访问它们的人都在试图破解/滥用系统。
在 Apache 中我们会用来.htaccess
阻止这样的事情。 Nginx 中如何阻塞?
当前会议
server {
listen 80;
root /home/public_html;
index index.php;
server_name domain.com;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
}
答案1
下面的配置应该使 nginx 以 404 状态和基本 nginx 404 页面响应“滥用”URL;所有其他以 结尾的 URL.php
应像往常一样通过代理传递给 application/php 引擎。我已经测试了一些模式,但是您应该测试您希望由 nginx 而不是应用程序管理的所有模式。我认为此配置可能在 URL 上存在一些问题,例如/phpmyadmin/index.php
代理\.php
传递位置的正则表达式具有更高优先级,但我的测试表明它有效,至少对我而言。
另外,是的,如果没有那么多位置块会更好,但我无法想象你将如何实现这一点。
server {
listen 80;
root /home/public_html;
index index.php;
server_name domain.com;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
# The ^~ means if this prefix pattern matches use this location block
# and don't continue onto the regex location blocks - which would load
# the laravel application
location ^~ /wordpress/wp-admin/ {
return 404;
}
location ^~ /wp-admin/ {
return 404;
}
location ^~ /test/wp-admin/ {
return 404;
}
location ^~ /hudson/login {
return 404;
}
location ^~ /phpmyadmin/index.php {
return 404;
}
location ^~ /mysql/index.php {
return 404;
}
location ^~ /myadmin/index.php {
return 404;
}
location ^~ /wp-cron.php {
return 404;
}
location ^~ /xmlrpc.php {
return 404;
}
}