nginx: расположение разрешенных IP-адресов; PHP Include?

nginx: расположение разрешенных IP-адресов; PHP Include?

мой 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сопоставляется с префиксом location /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

Попробуйте добавить расположение php внутри расположения /internal, например:

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;
    }

Связанный контент