2017-05-28 2 views
1

Ich habe erfolgreich installiert Nginx, PHP-FPM verwendet, aber leider habe ich einige Probleme beim Laden meiner PHP-Dateien aus einem anderen Verzeichnis. Alle meine Dateien befinden sich in Unterverzeichnissen in/var/www/html (zB befinden sich alle CSS-Dateien in/var/www/html/css, alle Javascript-Dateien befinden sich in/var/www/html/js, alle php -Dateien befinden sich in/var/www/html/php). zu Demnach ich den Root-Verzeichnis-Pfad für meine PHP-Dateien geändert/var/www/html/php:Nginx: 403 verboten, wenn PHP-Dateien in separaten Verzeichnis

server { 
    listen 80 default_server; 
    listen [::]:80 default_server; 

    # SSL configuration 
    # 
    # listen 443 ssl default_server; 
    # listen [::]:443 ssl default_server; 
    # 
    # Note: You should disable gzip for SSL traffic. 
    # See: https://bugs.debian.org/773332 
    # 
    # Read up on ssl_ciphers to ensure a secure configuration. 
    # See: https://bugs.debian.org/765782 
    # 
    # Self signed certs generated by the ssl-cert package 
    # Don't use them in a production server! 
    # 
    # include snippets/snakeoil.conf; 

    root /var/www/html; 

    # Add index.php to the list if you are using PHP 
    index index.html index.htm index.php home.php; 

    server_name _; 

    location/{ 
      # First attempt to serve request as file, then 
      # as directory, then fall back to displaying a 404. 
      try_files $uri $uri/ =404; 
    } 

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
    # 
    location ~ \.php$ { 
      root /var/www/html/php; 

      include snippets/fastcgi-php.conf; 

    #  # With php7.0-cgi alone: 
    #  fastcgi_pass 127.0.0.1:9000; 
      # With php7.0-fpm: 
      fastcgi_pass unix:/run/php/php7.0-fpm.sock; 
    } 
} 

Leider, wenn mein nginx-Server mit meinem Web-Browser zugreifen, ich bin immer Fehler 403 (Verboten). Beim direkten Zugriff auf meine index.php (http://192.168.2.109/index.php) funktioniert alles einwandfrei. Also, ich denke, es bedeutet, dass die Dateiberechtigungen korrekt sind, aber nginx kann das Verzeichnis/var/www/html/php nicht indizieren. Außerdem enthält /var/log/nginx/error.log:

2017/05/28 07:49:56 [Fehler] 13678 # 13678: * 1 Verzeichnisindex von "/ var/www/html /" ist verboten, Auftraggeber: 192.168.2.101, Server: _, Anfrage: "GET/HTTP/1.1", host: "192.168.2.109"

ich habe bereits versucht Autoindex und fügen Sie den Index Spezifizierer in der ermöglichen "location ~ .php $ {" Abschnitt ohne Erfolg. Das Ergebnis ist die gleiche :(

Hat jemand eine Idee hat, was ich falsch mache/fehlt hier Alle Vorschläge in Nginx 403 error: directory index of [folder] is forbidden nicht mein Problem lösen

+0

Ziemlich sicher, dass Sie nur einen Standardindex benötigen? https://stackoverflow.com/questions/10002439/make-index-html-default-but-allow-index-php-to-be-visited-if-typed-in – Joe

+0

Hat nginx eine "DefaultIndex" -Direktive in der Konfigurationsdatei? Der angegebene Link zeigt die Direktive für htaccess, aber ich verwende htaccess nicht. – Nrgyzer

+0

Es wäre keine Nginx-Sache, es wäre eine Webserver-Konfiguration Sache. Ich weiß nicht, wie man es mit allen möglichen Server-Setups macht. Ich weiß, dass eine DirectoryIndex-Deklaration in der .htaccess funktioniert, wenn Sie keinen Index in der URL angeben, aber ich weiß nicht, wie man einen Webserver das automatisch machen lässt. Ich weiß, dass der Server eingestellt werden kann, um einen verbotenen Fehler für das Verzeichnis-Traversal zu werfen, deshalb haben viele Aufstellungsorte gerade eine leere index.html in den Verzeichnissen, in denen Leute nicht herum spielen möchten. – Joe

Antwort

0

Das Problem ist einfach:?.

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
    # 
    location ~ \.php$ { 
      root /var/www/html/php; 

      include snippets/fastcgi-php.conf; 

    #  # With php7.0-cgi alone: 
    #  fastcgi_pass 127.0.0.1:9000; 
      # With php7.0-fpm: 
      fastcgi_pass unix:/run/php/php7.0-fpm.sock; 
    } 

Wie ich lesen kann, wenn Sie eine * .php Datei anfordern, ändern Sie die root-Adresse. Aber, wenn Sie auf „Standardindex“ anfordern, Sie/anfordern, kein .php

Sie benötigen eine neue Standort, für Change Root-Pfad auf/Anfrage Versuchen Sie, dies zu verwenden:

Vielleicht, auf dieser Konfiguration, müssen Sie eine "rewrite index.php;", aber ich habe es nicht wissen, weil ich diese Konfiguration nie testen.

Denken Sie nicht, dass meine neue Ortsreihenfolge (Standort = /) die gleiche wie Ihre (Standort /) ist, da meine Bestellung mit dem Gleichheitszeichen nur gilt, wenn Sie genau den "Haupt" Standort ohne Parameter anfordern .