Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NginX友好的PHP框架_Php_Nginx_Fastcgi - Fatal编程技术网

NginX友好的PHP框架

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

我正在寻找一个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/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的安全方法就是这样的。