laravel + nginx에서 특정 디렉토리에만 IP 주소 제한을 적용하는 방법

laravel과 nginx로 웹 서버를 세우고 있을 때, 특정의 디렉토리에만 IP 주소 제한을 걸고 싶은 것이 자주 있군요.
IP 주소 제한은 laravel 측에서 할 수 있지만, laravel + nginx의 설정으로 실시하는 경우의 설정 예가별로 보이지 않았기 때문에 정리했습니다.

허용하려는 IP 주소의 수가 1 개이면 적절한 곳에
if($_SERVER["REMOTE_ADDR"] !== "xxx.xxx.xxx.xxx"){
   abort(403);
}

그래도 써 두면 좋지만, 수가 늘어나면 조금 귀찮게 되어 옵니다.
만약 추가 IP 주소를 서브넷 단위로 지정되면. . .

전제가 되는 laravel+nginx의 환경 구축



도커
Nginx
라라벨

이 기사의 전제가 되는 laravel+nginx+docker의 환경 구축은, 이쪽의 @ucan-lab씨의 신기사가 참고가 됩니다.

특정 디렉토리에만 IP 주소 제한을 적용하는 laravel+nginx 구성 파일



설정에 관계없는 곳은 생략하고 있으므로, nginx의 설정에 대해서는, 상기의 신기사를 참고로 해 주세요.

nginx.conf

    # 以下の2つがnginxでlaravelを動作させるための基本的な設定です。
    # 全てのリクエストをlaravelのrootであるindex.phpにリダイレクトする
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # .phpファイルをfastcgiで処理する
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # ここからが、本題であるディレクトリIP制限になります。
    # admin/ ディレクトリに制限をかける例
    location /admin/ {
        try_files $uri $uri/ /index.php?$query_string;
        # allow ip list
        allow xxx.xxx.xxx.xxx;
        allow yyy.yyy.yyy.yyy;
        deny all;
    }


설정 포인트



아래의 location 설정만으로는,/admin/이하의 파일을 nginx가 그대로 표시하려고 하기 때문에, laravel로서 동작하지 않습니다.
    location /admin/ {
        allow yyy.yyy.yyy.yyy;
        deny all;
    }

그래서 location내에 index.php로 리디렉션하는 설정을 다시 한번 써줄 필요가 있었습니다.
try_files $uri $uri/ /index.php?$query_string;

물론 서브넷 단위로 지정도 가능합니다.
allow 192.168.1.0/24;

다만, 어플리케이션 전체의 보안 설정이 복수의 개소에 분산하게 되므로,/admin/이하의 컨트롤러나 route.php등에

/*

IP 주소 제한은 nginx 측에서 수행됩니다.

*/

라고 코멘트 해 두면, 장래의 자신이나 계승한 후임의 사람이 살아날 것입니다.
그래? 그런 보통 어디서 보안 설정하고 있는지 알 수 있을까?

달콤한



이상으로 laravel의 특정 디렉토리에 IP 주소 제한을 걸 수있었습니다.

함께 읽고 싶은 laravel 보안 관련 기사



laravel로 연속 로그인에 실패하면 잠금을 걸어 보안을 더욱 높이는 방법
htps : // 이 m / Repa_Shar-kun / ms / 7에서 f0-c0 a 8647df10

이 기사가 도움이 되면
↓ 버튼을 눌러 응원해 ↓

좋은 웹페이지 즐겨찾기