nginx: Speicherort für zulässige IPs; PHP Include?

nginx: Speicherort für zulässige IPs; PHP Include?

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:

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

Daher wird eine Anfrage zunächst /internal/foo.phpanhand 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 dieincludeRichtlinie, 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;
    }

verwandte Informationen