Запуск Symfony2 на ISPConfig3

Вся установка, конфигурация ISPConfig и все, что связано с ней, были непростой дорогой. С ударами и синяками я, наконец, получил полный пакет, который мне нужен.

Эти удары и синяки, вероятно, потому, что я неопытен Linux (Debian Wheezy).

Однако теперь все настроено, я дошел до установки Symfony2. Это, как и все другие аспекты ISPConfig, не идет так, как предполагается.

Мои проблемы:

  • Я не знаю, как настроить nginx для symfony2 из веб-интерфейса.
  • При запуске symfony он не перенаправляет на app.php
  • Когда я перехожу непосредственно к app.php, он бросает мне 500

Журналы говорят, что существует проблема с каталогом app, недоступным open_basedir().

То, что я на самом деле ищу, - это немного уверенность в том, как настроить все это.

Не стесняйтесь спрашивать дополнительную информацию. Я с удовольствием обновлю свой вопрос.

Спасибо заранее.

Сайт Nginx conf

server {
        listen ...:80;

        listen ...:443 ssl;
        ssl_protocols ...
        ssl_certificate ...
        ssl_certificate_key ...;

        server_name mydomain.tld;

        root   /var/www/mydomain.tld/web;



        index index.html index.htm index.php index.cgi index.pl index.xhtml;


        location ~ \.shtml$ {
            ssi on;
        }


        error_page 400 /error/400.html;
        error_page 401 /error/401.html;
        error_page 403 /error/403.html;
        error_page 404 /error/404.html;
        error_page 405 /error/405.html;
        error_page 500 /error/500.html;
        error_page 502 /error/502.html;
        error_page 503 /error/503.html;
        recursive_error_pages on;
        location = /error/400.html {

            internal;
        }
        location = /error/401.html {

            internal;
        }
        location = /error/403.html {

            internal;
        }
        location = /error/404.html {

            internal;
        }
        location = /error/405.html {

            internal;
        }
        location = /error/500.html {

            internal;
        }
        location = /error/502.html {

            internal;
        }
        location = /error/503.html {

            internal;
        }

        error_log /var/log/ispconfig/httpd/mydomain.tld/error.log;
        access_log /var/log/ispconfig/httpd/mydomain.tld/access.log combined;

        location ~ /\. {
            deny all;
            access_log off;
            log_not_found off;
        }

        location = /favicon.ico {
            log_not_found off;
            access_log off;
        }

        location = /robots.txt {
            allow all;
            log_not_found off;
            access_log off;
        }

        location @php {
            try_files $uri =404;
            include /etc/nginx/fastcgi_params;
            fastcgi_pass unix:/var/lib/php5-fpm/web3.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_intercept_errors on;
        }

}

Я хотел бы отметить, что эта конфигурация автоматически генерируется ISPConfig и что это, вероятно, должно быть отредактировано из веб-интерфейса.

Изменить

Я исправил ошибку внутреннего сервера, добавив все папки symfony в:

ISPConfig Web > Sites > mydomain.tld > Options > PHP open_basedir

Ответы

Ответ 1

В конфигурации отсутствует фактическая передача на PHP. Он должен работать, если вы замените блок @php местоположения следующим трем блоками:

location / {
  try_files $uri @php;
}

location app.php {
  try_files @php =404;
}

location @php {
    include /etc/nginx/fastcgi_params;
    fastcgi_pass unix:/var/lib/php5-fpm/web3.sock;
    fastcgi_param  SCRIPT_NAME  app.php;
    fastcgi_param  SCRIPT_FILENAME  app.php;
    fastcgi_intercept_errors on;
}

Первый блок пытается найти запрошенный файл в данном корневом каталоге, что означает /var/www/mydomain.tld/web - теперь все активы Symfony будут работать и возвращаться, потому что все они находятся в веб-каталоге. Если файл не найден, он вызывает PHP.

Второй блок используется, если /app.php запрашивается напрямую - вместо доставки этого файла мы обрабатываем его с помощью PHP.

Третий блок настраивает PHP - предыдущие два блока всегда ссылаются на этот блок, поэтому любой файл, который не найден непосредственно, обрабатывается PHP. У Symfony только один фронт-контроллер, app.php, поэтому мы просто отправляем все запросы в эту точку входа.

С этой настройкой он должен быть достаточно безопасным, потому что PHP обрабатывается только приложением app.php. Для тестовой среды вы можете использовать app_dev.php вместо app.php(просто измените имя файла в блоке @php) - но никогда не для производства и без обеспечения среды тестирования.

Ответ 2

Попробуйте вставить код в поле директив nginx на вкладке "Параметры" веб-сайта в ISPConfig. Это должно сохранить ваши настройки при регенерации конфигурации.