NginX Friendly PHP Framework

Привет, ребята, я ищу фреймворк PHP, который, если мне повезет, просто работает в nginx под FastCGI, иначе это не требует слишком большой настройки.

Symfony 1.4 с nginx фантастичен. Я уже сделал настройку, вот обобщение моей конфигурации производства, которую я могу поручиться, подходит для использования в производстве.

server { listen 80; server_name mysite.com; root /var/www/mysite.com/web; access_log /var/log/nginx/mysite.com.access.log; error_log /var/log/nginx/mysite.com.error.log; location ~ ^/(index|frontend|frontend_dev|backend|backend_dev)\.php$ { include fastcgi_params; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param HTTPS off; fastcgi_pass 127.0.0.1:9000; } location / { index index.php; try_files $uri /index.php?$args; } } server { listen 443; ssl on; ssl_certificate /etc/ssl/certs/mysite.com.crt; ssl_certificate_key /etc/ssl/private/mysite.com.key; server_name mysite.com; root /var/www/mysite.com/web; access_log /var/log/nginx/mysite.com.access.log; error_log /var/log/nginx/mysite.com.error.log; location ~ ^/(index|frontend|frontend_dev|backend|backend_dev)\.php$ { include fastcgi_params; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param HTTPS on; fastcgi_pass 127.0.0.1:9000; } location / { index index.php; try_files $uri /index.php?$args; } } 

PHP 5.4 Примечание.

php5-fpm 5.4, который поставляется с dotdeb, теперь использует сокеты вместо loopback по умолчанию. Если вы используете PHP 5.4, и вы получаете неверную ошибку шлюза с вышеуказанной конфигурацией, попробуйте заменить все экземпляры 127.0.0.1:9000 на unix:/var/run/php5-fpm.sock .

php-fpm 5.4 также ограничивает расширения файлов, которые могут быть проанализированы как PHP для тех, которые указаны в security.limit_extensions . Это может быть интересно, если вы изменили регулярное выражение местоположения, чтобы включить другие расширения файлов, чем .php . Приведенная ниже заметка о безопасности по-прежнему применяется.

Защитная записка

Этот конфиг только анализирует файлы index.php, frontend.php, frontend_dev.php, backend.php и backend_dev.php с PHP.

С php и nginx в целом, а не только с symfony, используя

 location \.php$ { ... } 

вызывает уязвимость безопасности, связанную с URL-адресами, использующими pathinfo, например: /index.php/foo/bar.

Общим решением является установка fix_pathinfo = 0 в php.ini. Это разбивает URL-адреса pathinfo, и symfony полагается на них. Используемое здесь решение состоит в том, чтобы явно указать файлы, которые обрабатываются как php.

Для получения дополнительной информации см. Предупреждение о безопасности nginx + php-cgi

платформы

Это работает и безопасно в системах Squeeze Debian, которые используют dotdeb для пакетов nginx и php-fpm , а также Ubuntu 10.04 Lucid Lynx , которые используют ppa / brianmercer для php-fpm . Он может работать или не работать и быть защищенным в других системах.

Примечание об использовании

Чтобы добавить еще один файл PHP extrafile.php, чтобы получить синтаксический анализ, используйте этот синтаксис в обоих блоках местоположения:

location ~ ^ (index | frontend | frontend_dev | backend | backend_dev | дополнительный файл) .php $ {…}

Изменить: Symfony 2.0 отсутствует! Вот конфигурация, адаптированная из приведенной выше версии 1.4:

 server { listen 80; server_name symfony2; root /var/www/symfony2/web; error_log /var/log/nginx/symfony2.error.log; access_log /var/log/nginx/symfony2.access.log; location / { index app.php; if (-f $request_filename) { break; } rewrite ^(.*)$ /app.php last; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ (app|app_dev).php { include fastcgi_params; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param HTTPS off; fastcgi_pass 127.0.0.1:9000; } } server { listen 443; server_name symfony2; root /var/www/symfony2/web; ssl on; ssl_certificate /etc/ssl/certs/symfony2.crt; ssl_certificate_key /etc/ssl/private/symfony2.key; error_log /var/log/nginx/symfony2.error.log; access_log /var/log/nginx/symfony2.access.log; location / { index app.php; if (-f $request_filename) { break; } rewrite ^(.*)$ /app.php last; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ (app|app_dev).php { include fastcgi_params; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param HTTPS off; fastcgi_pass 127.0.0.1:9000; } } 

Как отметили некоторые комментаторы, вам просто нужно правильно настроить nginx. Вот сообщение, которое устанавливает nginx для codeigniter .

Это репо помогло мне с symfony 1.4 на nginx + php-fpm [ https://raw.githubusercontent.com/korjavin/docker-nginx-symfony/my/default%5D%5B1%5D