mein PHP-Include:
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;
}
Ich versuche den Zugriff auf Dateien in einem Verzeichnis nach Speicherort zu ermöglichen:
location ~ /internal {
allow IP;
deny all;
}
Es funktioniert, aber PHP-Dateien in diesem Verzeichnis können heruntergeladen werden.
Antwort1
Beachten Sie: Nginx wählt immer nur einen Standortblock aus, der einer Anfrage entspricht. Die Suchreihenfolge ist:
=
^~
None
~
~*
@
Daher wird eine Anfrage zunächst /internal/foo.php
anhand des Präfixstandorts abgeglichen /internal
, dann wird die Suche beendet und der reguläre Ausdruck wird nicht überprüft. Aus diesem Grund wird beim Anfordern von PHP-Dateien ein Download-Dialog angezeigt.
Um Duplikate zu vermeiden, legen Sie die allgemeine Direktive in eine separate Datei und verwenden Sie dieinclude
Richtlinie, etwa so:
/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;
}
Antwort2
Versuchen Sie, einen PHP-Speicherort für das Innere des /internal-Speicherorts hinzuzufügen, etwa:
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;
}