NginX Friendly PHP Framework - PullRequest
       5

NginX Friendly PHP Framework

3 голосов
/ 22 октября 2010

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

Ответы [ 3 ]

23 голосов
/ 19 июля 2011

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. Это нарушает pathinfo URL, и Symfony полагается на них. Решением, используемым здесь, является явное указание файлов, которые анализируются как php.

Дополнительные сведения см. В предупреждении о безопасности nginx + php-cgi.

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

Чтобы добавить еще один PHP-файл Additionalfile.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;
  }
}
2 голосов
/ 22 октября 2010

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

0 голосов
/ 21 марта 2015

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

...