Търся PHP рамка, която, ако имам късмет, работи само в nginx под FastCGI, в противен случай такава, която не изисква прекалено много настройки.
Удобна за NginX PHP рамка
Отговори (3)
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 предупреждение за сигурност
Платформи
Това работи и е сигурно на Debian Squeeze системи, които използват dotdeb за nginx и php-fpm пакети, както и Ubuntu 10.04 Lucid Lynx системи, които използвайте ppa/brianmercer за php-fpm. Може или не може да работи и да е защитен на други системи.
Бележка за употреба
За да добавите друг PHP файл, допълнителен файл.php за анализиране, използвайте този синтаксис и в двата блока за местоположение:
местоположение ~ ^(index|frontend|frontend_dev|backend|backend_dev|additionalfile).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;
}
}
$
от първия ви блок location
във версия 1.4, за да работят този вид пътища за мен: /backend_dev.php/module/action
. Това лошо ли е от гледна точка на сигурността?
- person Sebastián Grignoli; 16.02.2013
index.php.jpg
на трета страна не се намира в корена на сайта, той няма да съответства на израза и следователно няма да се изпълни. нали
- person Sebastián Grignoli; 28.02.2013
Както отбелязаха някои коментатори, просто трябва да настроите правилно nginx. Ето публикация, която настройва nginx за codeigniter.
Това репо ми помогна със symfony 1.4 на nginx+php-fpm [https://raw.githubusercontent.com/korjavin/docker-nginx-symfony/my/default][1]