2016-09-12 3 views
0

Я делаю небольшой эксперимент, гипотеза, если хотите. Основная идея проста: три контейнера Docker, один - это контейнер данных с индексом.php в нем на /app/web/, который просто выводит phpinfo();. Это прекрасно работает.nginx + PHP-FPM: Выполнение параметров fastcgi

У меня есть контейнер nginx, который также работает нормально, и отдельный контейнер PHP-FPM. Оба они взяты из официальных изображений.

У меня было все нормально работать со стандартной настройкой, и даже в качестве меры безопасности привязывался контейнер данных только к php-fpm, поэтому nginx даже не имел доступа к самому файлу. Таким образом, контейнер данных монтируется на контейнере php-fpm по адресу /app, и все это хорошо в мире.

Все это было хорошо. Затем я начал играть с некоторыми переменными.

Мне пришло в голову, что на самом деле, если nginx просто передает переменные в php-fpm, то я мог бы, вероятно, удалить некоторые параметры в настройке fastgingi nginx, потому что зачем им это нужно, если это даже не знаете, что происходит?

Дела шли хорошо с chroot набор для /app, и я добавил chdir к /web, но как только я удалил PATH_TRANSLATED от Nginx, он не работает. Я либо получить File not found. или No input file specified.

Здесь не соответствующие части nginx.conf Nginx контейнера, не root указан в nginx.conf:

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; 
} 

и соответствующих частях www.conf бассейна:

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 

Любые идеи?

ответ

0

Так что я настраивал и настраивал, пока не нашел правильную комбинацию. Вот мой Nginx конфигурации:

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; 
    } 

А вот мой бассейн конфигурации:

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

я в основном скопированы все из умолчанию fastcgi_params файла, так что я мог видеть, что происходит. Следующим шагом будет протестировать это с чем-то в гневе, например, по умолчанию приложение Symfony 2.