关于Symfony2+nginx搭建过程总结

  最近在试着用nginx+symfony搭建公司的网站,因为nginx不支持pathinfo模式,因此必须修改nginx(我使用的是nginx1.5.1)的配置文件/etc/nginx/config.d/default.conf以使其在逻辑上支持url逻辑路径到物理路径的映射,如下为个人default.conf文件内容:php

 1 server { 
 2     listen       80; 
 3     server_name  localhost;
 4     location / { 
 5         root   /usr/share/nginx/html/symfony/web; 
 6         index  index.html index.htm index.php; 
 7     }
 8     location ~ ^(.+\.php)(.*)$ { 
 9       root   /usr/share/nginx/html/symfony/web; 
10       fastcgi_index index.php;  
11       fastcgi_split_path_info ^(.+\.php)(.*)$; 
12       fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name; 
13       fastcgi_param   PATH_INFO               $fastcgi_path_info; 
14       fastcgi_param   PATH_TRANSLATED $document_root$fastcgi_path_info; 
15       fastcgi_pass 127.0.0.1:9000; 
16       include fastcgi_params;
17    }
18}

   实现url的逻辑映射后,就能够在网页中看到实际效果了(注意图中被圈部分):
  html

  可是,若是在prod模式下(即访问192.168.10.133/app.php/下的路径)时,提示出错“no route for get / ",这并非咱们的pathinfo配置出了问题(刚开始从这个方面着手,费老劲了),而是由于symfony2并无为咱们提供prod模式下的内容,咱们须要修改symfony/app/routing.yml文件本身给他提供一个逻辑路径映射,以下为我从routing_dev.xml文件中拷过来的一个配置项:  nginx

1 # AcmeDemoBundle routes (to be removed)
2 _acme_demo:
3     resource: "@AcmeDemoBundle/Resources/config/routing.yml"

  这样symfony就会在prod模式下就能够经过url逻辑映射获得src/Acme/DemoBundle/Resources/config/routing.yml文件(其内容以下所示),经过这个文件就能够找到@AcmeDemoBundle/Controller/DemoController.php文件从而显示出如上图所显示的效果了 web

1 _demo:
2      resource: "@AcmeDemoBundle/Controller/DemoController.php"
3      type:     annotation
4      prefix:   /demo    

  可是,实际访问http://192.168.10.133/app.php/demo/hello/bean时,并无显示出指望的效果,这时候又报了一个错误:
  Cannot import resource "/usr/share/nginx/html/symfony/src/Acme/DemoBundle/Resources/config/config.yml" from "/usr/share/nginx/html/symfony/app/config/config.yml".                                      app

  网上搜了下,stackoverflow上给的答案大部分是让你在resource字段前面要缩进四个字符之类的,对个人问题不适用,后来发如今上面出错信息的后面还有一行字说要在AppKernel.php中注册AcmeDemoBundle之类的,因而找到/usr/share/nginx/html/symfony/app/AppKernel.php,发现有以下一句话:  网站

1 if (in_array($this->getEnvironment(), array('dev','test'))) {
2             $bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
3             $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
4             $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
6             $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
7  }

    至此,大功告成,咱们只须要修改array('dev','test')为array('dev','test','prod')便可,这样symfony就会在prod模式下也注册AcmeDemoBundle了,实验结果显示以下:
  this

   本文系原创,转载请注明出处:http://www.cnblogs.com/beanmoon/p/3181733.htmlurl

相关文章
相关标签/搜索