当前位置:  开发笔记 > 编程语言 > 正文

关于nginx的Zend Framework

如何解决《关于nginx的ZendFramework》经验,为你挑选了5个好方法。

我一直在研究的基于Zend Framework的站点现在正在迁移到它的生产服务器.这个服务器原来是nginx(惊喜!).当然,该站点无法正常工作,因为它是在Apache上开发的,并且依赖于htaccess文件.

我的问题是......任何人都有这方面的经验吗?关于如何将htaccess文件转换为nginx.conf文件的任何想法?我正在研究这个,但希望有人已经有过这方面的经验.谢谢!

编辑:这是当前的htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]

小智.. 29

server {

 listen   80; ## listen for ipv4
 listen   [::]:80 default ipv6only=on; ## listen for ipv6

 server_name  localhost;

 access_log  /var/log/nginx/localhost.access.log;
 error_log  /var/log/nginx/localhost.error.log;

 root   /var/www/localhost/public;

 try_files $uri @php_index;

 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 #
 location @php_index {
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_param  SCRIPT_FILENAME /var/www/localhost/index.php;
  include fastcgi_params;
 }
}

建议尽可能使用try_files.



1> 小智..:
server {

 listen   80; ## listen for ipv4
 listen   [::]:80 default ipv6only=on; ## listen for ipv6

 server_name  localhost;

 access_log  /var/log/nginx/localhost.access.log;
 error_log  /var/log/nginx/localhost.error.log;

 root   /var/www/localhost/public;

 try_files $uri @php_index;

 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 #
 location @php_index {
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_param  SCRIPT_FILENAME /var/www/localhost/index.php;
  include fastcgi_params;
 }
}

建议尽可能使用try_files.


这个解决方案比我接受的答案更适合我.使用接受的答案版本,没有POST数据传递给PHP,可能是由于使用了错误页面.使用此解决方案,一切都按预期工作.
这是一个更好的解决方案.

2> stunti..:

我知道这是一个相当古老的线索,但无论如何它可能会帮助一些人.

基本上它将任何404错误重定向到index.php,但如果文件存在(类型文件),它将设置正确的根.

我是从头顶做到的.它可能不会马上工作,你必须把正确的路径和fastcgi配置.我还把所有东西都放回到index.php,因为它应该像Zend_Framework那样工作

error_page  404 = /index.php;

location / {
    if (-f $request_filename) {
        root   /var/www;
    }
}

location ~ \.php$ {
        fastcgi_pass   unix:/tmp/php.sock;
        fastcgi_index  index.php;

        fastcgi_param  SCRIPT_FILENAME     /var/www/index.php;
        include /etc/nginx/fastcgi_params;
}


显然,在`location`里面使用`If`是不好的做法,应该尽可能避免:http://wiki.nginx.org/IfIsEvil.这适用于`Drupal`(http://wiki.nginx.org/Drupal),但应该使用`ZF`进行微小的更改.
-f(Nginx)检查文件是否存在.它与Apache语法不同:-s(常规文件)OR -l(符号链接)OR -d(目录).正确的等价是-e.并且应该使用try_files而不是if.

3> mooware..:

我不知道转换htaccess文件的任何自动/系统方式,你可能必须手动完成.该Nginx的维基是nginx的文档的最佳资源.

编辑: 我现在在Nginx上运行Zend Framework,配置如下:

server {
  listen 80;
  server_name servername.com;

  root /var/www/zendapp/public;

  location / {
    index index.php;
  }

  # Deny access to sensitive files.
  location ~ (\.inc\.php|\.tpl|\.sql|\.tpl\.php|\.db)$ {
    deny all;
  }
  location ~ \.htaccess {
    deny all;
  }

  # Rewrite rule adapted from zendapp/public/.htaccess
  if (!-e $request_filename) {
    rewrite ^.*$ /index.php last;
  }

  # PHP scripts will be forwarded to fastcgi processess.
  # Remember that the `fastcgi_pass` directive must specify the same
  # port on which `spawn-fcgi` runs.
  location ~ \.php$ {
    include /etc/nginx/fastcgi_params;

    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
  }

  location = /50x.html {
      root   /var/www/default;
  }
}

如您所见,重写规则本身非常简单.



4> 小智..:

这是"官方的",简单而且效果很好:

http://wiki.nginx.org/Zend_Framework#Time_for_nginx



5> nerkn..:

对于可以提供帮助的登台服务器;)

            fastcgi_param APPLICATION_ENV staging;

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有