NginX友好的PHP框架
我正在寻找一个PHP框架,如果我幸运的话,它只在FastCGI下的nginx中工作,否则,它不需要太多的调整。正如一些评论指出的那样,您只需要正确设置nginx 带有nginx的Symfony 1.4非常棒。我已经做了调整,这里是我的生产配置的概括,我可以保证适合生产使用NginX友好的PHP框架,php,nginx,fastcgi,Php,Nginx,Fastcgi,我正在寻找一个PHP框架,如果我幸运的话,它只在FastCGI下的nginx中工作,否则,它不需要太多的调整。正如一些评论指出的那样,您只需要正确设置nginx 带有nginx的Symfony 1.4非常棒。我已经做了调整,这里是我的生产配置的概括,我可以保证适合生产使用 server { listen 80; server_name mysite.com; root /var/www/mysite.com/web; access_log /var/log/nginx/mys
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;
}
}
PHP5.4注释
dotdeb附带的php5 fpm 5.4现在默认使用套接字而不是环回。如果您使用的是php5.4,并且上面的配置出现了严重的网关错误,请尝试将127.0.0.1:9000
的所有实例替换为unix:/var/run/php5 fpm.sock
php fpm 5.4还将可解析为php的文件扩展名限制为security.limit_extensions
中指定的文件扩展名。如果您修改了location regex以包含.php
以外的其他文件扩展名,则可能会对此感兴趣。下面的安全说明仍然适用
安全说明
此配置仅使用php解析index.php、frontend.php、frontend_dev.php、backend.php和backend_dev.php文件
一般来说,使用php和nginx,而不仅仅是symfony,使用
location \.php$ {
...
}
导致与使用pathinfo的URL相关的安全漏洞,如:/index.php/foo/bar
常见的解决方法是在php.ini中设置fix_pathinfo=0。这会破坏pathinfo URL,symfony依赖它们。这里使用的解决方案是显式指定解析为php的文件
有关更多信息,请参阅
平台
这在使用dotdeb for nginx和php fpm软件包的Debian Squeeze系统以及使用ppa/brianmercer for php fpm的Ubuntu10.04 Lucid Lynx系统上是有效且安全的。它可能工作,也可能不工作,并且在其他系统上是安全的
使用说明
要添加另一个PHP文件additionalfile.PHP以进行解析,请在两个位置块中使用以下语法:
位置~^(索引|前端|前端|开发|后端|后端|开发|附加文件).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+php fpm上使用symfony 1.4
[Ehm,你在现有的200个PHP框架中遇到了什么问题?框架不关心web服务器。你只需要正确设置它。@Galen:$\u服务器的内容因web服务器而异,因此确实需要调整。我一直在寻找需要很少tono设置的框架,或者是说明如何设置的帖子为了设置一些,谢谢你,我没有偶然发现它;这很有帮助。如果你想充分利用nginx,你真的需要了解它的配置的所有细节。如果你想轻松设置,你最好使用apache。我读得越多,我就越意识到你绝对正确。Rojoca,我只是lazy,你关于codeignitor的链接帮助我创造了奇迹。我不得不在1.4版本中从你的第一个
位置
块中删除$
,这样的路径才能对我起作用:/backend\u dev.php/module/action
。这在安全性方面有问题吗?@SebastiánGrignoli是的,这将导致潜在的安全漏洞还有一个安全隐患。有人可以上传一个名为index.php.jpg的文件,其中包含恶意php代码,nginx将执行该文件。或者,您可以上传一个文件index.php.txt,在该文件中,您打算向您的朋友展示您的php“取消链接”递归版本的示例代码函数。但只要第三方恶意index.php.jpg
不存在于网站的根目录中,它就不会与表达式匹配,因此不会执行。对吗?你是对的。但这有点像是在争论家中的一颗小地雷比一颗大地雷好。在我看来,整个Nginx的安全方法就是这样的。