Nginx의 파일 또는 위치에 대한 액세스 차단

Nginx의 파일 또는 위치에 대한 액세스 차단

우리는 몇 주 전에 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/ 등과 같은 모든 파일에 대한 요청을 차단하려고 합니다. 이러한 파일/위치는 존재하지 않으므로 해당 파일/위치에 액세스하는 사람은 누구나 시스템을 해킹/남용하려고 합니다.

.htaccessApache에서는 이런 종류의 일을 방지하기 위해 사용합니다 . 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;
    }

} 

관련 정보