2016-07-11 7 views
1

In AWS EC2 Instance, mache ich Web-Umgebung mit PHP7.0 und Nginx. Und das macht 404 Seitenfehler.php7.0 + nginx macht 404 Seitenfehler

HTML-Erweiterung Seite funktioniert gut, aber nicht auf PHP.

in default.conf

server { 
listen  80; 
server_name localhost; 

#charset koi8-r; 
#access_log /var/log/nginx/log/host.access.log main; 

location/{ 
    root /var/www; 
    index index.php index.html index.htm; 
} 

#error_page 404    /404.html; 

# redirect server error pages to the static page /50x.html 
# 
error_page 500 502 503 504 /50x.html; 
location = /50x.html { 
    root /var/error; 
} 

# proxy the PHP scripts to Apache listening on 127.0.0.1:80 
# 
#location ~ \.php$ { 
# proxy_pass http://127.0.0.1; 
#} 

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
# 
location ~ \.php$ { 
    root /var/www; 
    fastcgi_intercept_errors on; 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 
    include  fastcgi_params; 
} 
# deny access to .htaccess files, if Apache's document root 
# concurs with nginx's one 
# 
#location ~ /\.ht { 
# deny all; 
#} 

}

in fastcgi_params

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_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 REQUEST_SCHEME  $scheme; 
fastcgi_param HTTPS    $https if_not_empty; 

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; 

# PHP only, required if PHP was built with --enable-force-cgi-redirect 
fastcgi_param REDIRECT_STATUS 200; 

und in nginx.conf

user www-data; 
worker_processes 1; 

error_log /var/log/nginx/error.log warn; 
pid  /var/run/nginx.pid; 


events { 
    worker_connections 1024; 
} 


http { 
    include  /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
         '$status $body_bytes_sent "$http_referer" ' 
         '"$http_user_agent" "$http_x_forwarded_for"'; 

    access_log /var/log/nginx/access.log main; 

    sendfile  on; 
    #tcp_nopush  on; 

    keepalive_timeout 65; 

    #gzip on; 

    include /etc/nginx/conf.d/*.conf; 
} 

gesamte Umgebung ist Nginx + + php7.0 mariaD B auf AWS EC2-Instanz.

Ich kann nicht finden, was falsch ist ...

+0

Oh mein Fehler. Inhalt von fastcgi_param ist 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_NAME $ fastcgi_script_name; fastcgi_param REQUEST_URI $ request_uri; fastcgi_param DOCUMENT_URI $ document_uri; fastcgi_param DOCUMENT_ROOT $ Dokumentstammverzeichnis; fastcgi_param SERVER_PROTOCOL $ server_protocol; – OhHyeonJun

+0

fastcgi_param REQUEST_SCHEME $ Schema; fastcgi_param HTTPS $ https if_not_empty; 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; # Nur PHP, wenn PHP mit --enable-force-cgi-redirect erstellt wurde fastcgi_param REDIRECT_STATUS 200; – OhHyeonJun

+0

@RichardSmith Danke! Ich bearbeite den fastcgi_params Teil. – OhHyeonJun

Antwort

0

Ich werde diesen Beitrag als eine Antwort, aber ich bin nicht vertraut mit php7 und AWS EC2.

Sie scheinen eine Inkonsistenz in Ihrer nginx Konfiguration zu haben.

Dieser Block:

location/{ 
    root /var/www; 
    index index.php index.html index.htm; 
} 

sagt nginx, dass Ihre Dateien unter /var/www befinden, so dass zum Beispiel:

  • die URI /index.html kann /foo/bar.html bei /var/www/index.html
  • die URI gefunden werden kann bei /var/www/foo/bar.html
gefunden werden

Die index Direktive sagt nginx nach index.php (etc.) zu suchen, auch unter /var/www. Jeder URI, der mit .php endet, wird jedoch von einem anderen Standortblock verarbeitet.

Der Block:

location ~ \.php$ { 
    root /var/www; 
    fastcgi_intercept_errors on; 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 
    include  fastcgi_params; 
} 

soll .php URIs verarbeiten. Wenn die Architektur nicht speziell ist, übergibt der Parameter SCRIPT_FILENAME den Speicherort der Datei von nginx an das Subsystem php. Und auf den meisten Systemen wird der Wert von $document_root$fastcgi_script_name verwendet, was bedeutet, dass:

  • die URI /index.php kann bei /var/www/index.php
  • die /foo/bar.php kann bei /var/www/foo/bar.php

Unter der Annahme, finden URI gefunden werden, dass root ist auf /var/www eingestellt.


In der Konfigurationsdatei werden Sie root im location ~ \.php$ Block Einstellung aber ihn nicht. Die root-Anweisung legt den Wert $document_root fest.

Es gibt andere Probleme, aber das wichtige ist, dass (es sei denn, Sie eine spezielle Architektur verwenden) der Wert von SCRIPT_FILENAME sein sollte:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 

Sie sollten include fastcgi_params;vor jede fastcgi_param Richtlinie platzieren zu vermeiden Die enthaltene Datei überschreibt den gewünschten Wert stillschweigend.