우리는 몇 주 전에 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/ 등과 같은 모든 파일에 대한 요청을 차단하려고 합니다. 이러한 파일/위치는 존재하지 않으므로 해당 파일/위치에 액세스하는 사람은 누구나 시스템을 해킹/남용하려고 합니다.
.htaccess
Apache에서는 이런 종류의 일을 방지하기 위해 사용합니다 . 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 상태의 "abuse" URL에 응답하고 기본 nginx 404 페이지가 nginx로 끝나는 다른 모든 URL이 .php
평소와 같이 프록시를 통해 application/php 엔진으로 전달되어야 합니다. 일부 모드를 테스트했지만 애플리케이션이 아닌 nginx에서 관리하려는 모든 모드를 테스트해야 합니다. /phpmyadmin/index.php
프록시가 통과하는 \.php
정규식의 우선 순위가 더 높은 것처럼 URL의 이 구성에 몇 가지 문제가 있을 수 있다고 생각했지만 테스트 결과 적어도 나에게는 작동하는 것으로 나타났습니다.
그리고 네, 위치 블록이 그렇게 많지 않으면 더 좋겠지만, 그걸 어떻게 구현할지는 상상이 안 가네요.
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;
}
}