nginx: 허용된 IP의 위치; PHP 포함?

nginx: 허용된 IP의 위치; PHP 포함?

내 PHP에는 다음이 포함됩니다.

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_index index.php;
            fastcgi_pass unix:/var/run/php5.socket;
            include /etc/nginx/fastcgi_params;
    }

위치별로 디렉터리의 파일에 대한 액세스를 허용하려고 합니다.

   location ~ /internal {
           allow IP;
           deny all;
   }

작동하지만 이 디렉토리의 PHP 파일을 다운로드할 수 있습니다.

답변1

명심하세요: Nginx는 항상 요청과 일치하는 위치 블록을 하나만 선택합니다. 검색 순서는 다음과 같습니다.

  1. =
  2. ^~
  3. None
  4. ~
  5. ~*
  6. @

따라서 요청은 /internal/foo.php접두사 위치와 /internal먼저 일치한 다음 검색이 종료되고 정규식은 확인되지 않습니다. 이것이 PHP 파일을 요청할 때 다운로드 대화 상자가 나타나는 이유입니다.

중복을 피하려면 공통 지시문을 별도의 파일에 넣고include지시문은 다음과 같습니다.

/etc/nginx/php.conf

try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php5.socket;
include /etc/nginx/fastcgi_params;

/etc/nginx/nginx.conf

location /internal {
    allow IP;
    deny all;

    location ~ ^/internal(.*\.php)$ {
        include php.conf;
    }
}
location ~ \.php$ {
    include php.conf;
}

답변2

다음과 같이 /internal 위치 내부에 PHP 위치를 추가해 보세요.

location ~ /internal/\.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_index index.php;
            fastcgi_pass unix:/var/run/php5.socket;
            include /etc/nginx/fastcgi_params;
    }

관련 정보