WordPress im Unterverzeichnis mit Nginx unter Verwendung von Proxy Pass mit dem Fehler „Keine Eingabedatei“.

Lesezeit: 4 Minuten

Benutzer-Avatar
Lee

Ich hoffe, Sie können helfen, aber ich erhalte unten eine Fehlermeldung, wenn ich versuche, auf den Admin-Bereich unseres Blogs zuzugreifen.

Keine Eingabedatei angegeben.

Der eigentliche Blog funktioniert gut, aber nicht die Login/Admin-Bereiche.

Laut Titel befindet sich der Blog auf einem separaten Server als Hauptdomäne und verwendet Proxy-Pass, um Anfragen so weiterzuleiten.

upstream blog {
    server 111.111.111.111:443 weight=2 max_fails=3 fail_timeout=60s;
}

server{
  ...
  location /blog {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass https://blog;
    }
}

Die nginx-Einstellungen, die ich auf dem Blog-Server habe, sind wie folgt.

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name www.domain.com;
    root /home/www.domain.com/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /blog/index.php?$query_string;
    }

    error_log  /var/log/nginx/www.domain.com-error.log error;

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php5.6-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

}

Hier sind die fastcgi_params, falls es auch hilft.

fastcgi_param   QUERY_STRING        $query_string;
fastcgi_param   REQUEST_METHOD      $request_method;
fastcgi_param   CONTENT_TYPE        $content_type;
fastcgi_param   CONTENT_LENGTH      $content_length;
fastcgi_param   SCRIPT_FILENAME     $request_filename;
fastcgi_param   SCRIPT_NAME     $fastcgi_script_name;
fastcgi_param   REQUEST_URI     $request_uri;
fastcgi_param   DOCUMENT_URI        $document_uri;
fastcgi_param   DOCUMENT_ROOT       $document_root;
fastcgi_param   SERVER_PROTOCOL     $server_protocol;
fastcgi_param   GATEWAY_INTERFACE   CGI/1.1;
fastcgi_param   SERVER_SOFTWARE     nginx/$nginx_version;
fastcgi_param   REMOTE_ADDR     $remote_addr;
fastcgi_param   REMOTE_PORT     $remote_port;
fastcgi_param   SERVER_ADDR     $server_addr;
fastcgi_param   SERVER_PORT     $server_port;
fastcgi_param   SERVER_NAME     $server_name;
fastcgi_param   HTTPS           $https if_not_empty;
fastcgi_param   REDIRECT_STATUS     200;
fastcgi_param   HTTP_PROXY  "";

Ich verstehe, dass ich glaube, dass PHP die Datei index.php nicht finden kann?

Hoffe jemand kann helfen..

  • Ist fastcgi_param SCRIPT_FILENAME existiert in fastcgi_params?

    – Dmitry MiksIr

    19. Januar 2017 um 17:15 Uhr

  • Ja. Wenn Sie aktualisieren, habe ich hinzugefügt, was dort drin ist.

    – Lee

    19. Januar 2017 um 17:26 Uhr

  • Funktionieren Anfragen an den zweiten Server direkt? Und Fehler nur bei Anfrage über den ersten Server?

    – Dmitry MiksIr

    19. Januar 2017 um 17:34 Uhr

  • Ja. Wenn ich meine Hosts-Datei ändere, um direkt damit zu arbeiten, funktioniert es. ich denke das fragst du..

    – Lee

    19. Januar 2017 um 17:35 Uhr

  • Kann keine Probleme sehen (außer besser zu bedienen fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;). Kann Probleme im übersprungenen Teil der ersten Konfiguration geben.

    – Dmitry MiksIr

    19. Januar 2017 um 17:41 Uhr

Benutzer-Avatar
Kinna T

Sie sollten in der Lage sein, nur zu spezifizieren index index.php;.

Sie sollten sich auch ändern

location / { try_files $uri $uri/ /blog/index.php?$query_string; }

zu

location / { try_files $uri $uri/ /blog/index.php?$args; }

und ändern:

fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php5.6-fpm.sock;

zu:

fastcgi_split_path_info ^(/blog)(/.*)$;
fastcgi_pass php;

Das kommt von der WordPress-Dokumentation ebenso wie NGINX-Dokumentation.

Vielleicht den /blog-Pfad umschreiben, um das Präfix zu unterdrücken?

server{
  ...
  location /blog {

        #strip the '/blog' prefix
        rewrite /blog/(.*) /$1  break;

        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass https://blog;
    }
}

  • Verstehe leider nicht. Wollen Sie damit sagen, dass der Standort-/Blog-Teil entfernt werden soll?

    – Lee

    26. Januar 2017 um 19:12 Uhr

  • Ich sage, dass Sie die URLs ohne das ‘/blog’ weiterleiten, ngnix wird diesen Teil intern entfernen. Wenn Sie auf /blog/page1 zugreifen, erhält der Upstream-Wordpress-Server /page1

    – Tudor Ilisoi

    26. Januar 2017 um 20:16 Uhr

  • Wenn ich diese Zeile hinzufüge, bekomme ich 403. Ich habe das /blog-Präfix in der Blog-Nginx-Datei entfernt und immer noch 403

    – Lee

    26. Januar 2017 um 20:46 Uhr

  • Nun, ich bin verloren. Sie sollten wahrscheinlich die nginx-Protokolle überprüfen/aktivieren, um weitere Informationen zu erhalten

    – Tudor Ilisoi

    26. Januar 2017 um 21:17 Uhr

Der Grund dafür war, dass der Upstream keine anderen Parameter zuließ, dh die Erweiterung .php, dies war die Änderung des Upstream-Standorts.

location ^~ /blog {
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_pass https://blog;
}

Hoffe, dies hilft jemand anderem in der Zukunft.

1369020cookie-checkWordPress im Unterverzeichnis mit Nginx unter Verwendung von Proxy Pass mit dem Fehler „Keine Eingabedatei“.

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy