2016-09-12 4 views
0

Ich mache ein kleines Experiment, eine Hypothese, wenn Sie so wollen. Die Grundidee ist einfach: drei Docker-Container, einer ist einfach ein Datencontainer mit einer index.php drin bei /app/web/, die einfach phpinfo(); ausgibt Das funktioniert gut.nginx + PHP-FPM: Fastcgi Parameter

Ich habe einen Nginx-Container, der auch gut funktioniert, und einen separaten PHP-FPM-Container. Beides sind die aus den offiziellen Bildern.

Ich hatte alles funktioniert gut mit einem Standard-Setup, und auch als Sicherheitsmaßnahme den Datencontainer nur an php-fpm gebunden, so Nginx hatte nicht einmal Zugriff auf die Datei selbst. Also ist der Datencontainer auf dem php-fpm Container bei /app gemountet, und alles ist gut in der Welt.

All dies war in Ordnung. Dann begann ich mit einigen Variablen zu spielen.

Es ist mir aufgefallen, dass, wenn nginx nur die Variablen an php-fpm weitergibt, dann könnte ich wahrscheinlich einige der Parameter in nginx fastcgi Setup entfernen, denn warum würde es sie brauchen, wenn es nicht einmal Wissen was los ist?

kam es gut mit chroot Set /app, und ich fügte chdir zu /web, aber sobald ich PATH_TRANSLATED von nginx entfernt, schlägt sie arbeiten. Ich entweder bekommen File not found. oder No input file specified.

Hier ist die relevanten Teile nginx.conf des nginx-Behälter, ohne root im nginx.conf angegeben:

location/{ 
    index index.php; 
    fastcgi_split_path_info ^(.+\.php)(/.*)$; 
    include fastcgi_params; 

    fastcgi_param PATH_INFO $fastcgi_path_info; 
    fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; 
    fastcgi_index index.php; 
    fastcgi_param HTTPS $https; 
    fastcgi_param HTTP_PROXY ''; 
    fastcgi_intercept_errors on; 
    fastcgi_pass php-fpm:9000; 
    break; 
} 

und die relevanten Teile des www.conf Pool:

chroot = /app 

; Chdir to this directory at the start. 
; Note: relative path can be used. 
; Default Value: current directory or/when chroot 

chdir = /web 

php_admin_value[doc_root] = /app/web 

Irgendwelche Ideen?

Antwort

0

Also ich zwickte und zwickte, bis ich die richtige Kombination gefunden hatte. Hier ist meine nginx config:

location/{ 
     index index.php; 
     fastcgi_index /index.php; 
     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  /index.php; 
     fastcgi_param REQUEST_URI  $request_uri; 
     fastcgi_param DOCUMENT_URI  $document_uri; 
     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; 
     fastcgi_param SCRIPT_FILENAME /index.php; 
     fastcgi_param HTTP_PROXY ''; 

     fastcgi_pass php-fpm:9000; 
    } 

Und hier ist mein Pool config:

chroot = /app 
chdir = /web 
php_admin_value[doc_root] = web 

ich im Grunde kopiert alles aus dem Standard fastcgi_params Datei, so konnte ich sehen, was los war. Der nächste Schritt wird sein, dies mit etwas in Wut zu testen, wie beispielsweise der Standard-Symfony 2-App.

Verwandte Themen