起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3711|回复: 5

[分享] baas.php的nginx部署指引

  [复制链接]

8

主题

131

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
QQ
发表于 2016-11-3 23:26:53 | 显示全部楼层 |阅读模式
本帖最后由 deltaboy 于 2016-11-20 22:41 编辑

先说几个大坑:

一、先确认/baas/config/db.config.xml中的数据库连接各参数无误...我今天就因为密码不对(重装mysql,默认密码变了)调试了大半天。

二、确认php-fpm中配置的用户与nginx中配置的用户一致,且nginx站点根目录中对应用户的权属权限正常。

三、请把\model\Baas.php下的weixin这个目录也带上,或者将index.php中对其的引用注释掉(如未使用到微信相关扩展)【引用代码:require_once("reference.php");】。

四、无论是否启用pathinfo,都需要以下这个rewrite:
  1. location /baas/ {
  2.     rewrite /baas/(.*) /baas/index.php/$1 last;
  3. }
复制代码

因为前台xhr的post指向是/baas/包名/模块名/方法名 这种,需要rewrite成为/baas/index.php/包名/模块名/方法名,上面location正则该怎么写,大家可以自由发挥,达到目的即可。

nginx最新版本的默认配置中
  1.         location / {
  2.                 try_files $uri $uri/ =404;
  3.         }
复制代码
已解决所谓的nginx文件类型错误解析漏洞。所以cgi.fix_pathinfo=1也ok了。
由于密码错误的原因,导致一下午的尝试都是白瞎,关于cgi.fix_pathinfo=0的配置方法暂时无法确认,先讲cgi.fix_pathinfo=1下的配置方法:
1、配置文件中php文件指向及处理:
  1. location ~ .php {
  2.     fastcgi_pass unix:/run/php5-fpm.sock;
  3.     fastcgi_index index.php;
  4.     include fastcgi_params;
  5.     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;        
  6.     fastcgi_param PATH_INFO $fastcgi_script_name;
  7. }
复制代码

2、包含的fastcgi_params文件(一般无需修改):
  1. fastcgi_param  QUERY_STRING       $query_string;
  2. fastcgi_param  REQUEST_METHOD     $request_method;
  3. fastcgi_param  CONTENT_TYPE       $content_type;
  4. fastcgi_param  CONTENT_LENGTH     $content_length;
  5. fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
  6. fastcgi_param  REQUEST_URI        $request_uri;
  7. fastcgi_param  DOCUMENT_URI       $document_uri;
  8. fastcgi_param  DOCUMENT_ROOT      $document_root;
  9. fastcgi_param  SERVER_PROTOCOL    $server_protocol;
  10. fastcgi_param  REQUEST_SCHEME     $scheme;
  11. fastcgi_param  HTTPS              $https if_not_empty;
  12. fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
  13. fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
  14. fastcgi_param  REMOTE_ADDR        $remote_addr;
  15. fastcgi_param  REMOTE_PORT        $remote_port;
  16. fastcgi_param  SERVER_ADDR        $server_addr;
  17. fastcgi_param  SERVER_PORT        $server_port;
  18. fastcgi_param  SERVER_NAME        $server_name;
  19. # PHP only, required if PHP was built with --enable-force-cgi-redirect
  20. fastcgi_param  REDIRECT_STATUS    200;
复制代码

其他的官方教程里都有讲,就不赘述了。http://docs.wex5.com/wex5-runtime-php/

参考资料:http://www.jb51.net/article/28050.htm
学习资料:http://www.nginx.cn/426.html

评分

参与人数 1威望 +30 收起 理由
liangyongfei + 30 很给力!

查看全部评分

8

主题

131

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
QQ
 楼主| 发表于 2016-11-3 23:52:17 | 显示全部楼层
本帖最后由 deltaboy 于 2016-11-20 22:11 编辑

部署调试过程中,建议打开display_errors,或者在index.php文件开头加入以下代码:
  1. ini_set("display_errors", "On");
  2. error_reporting(E_ALL | E_STRICT);
复制代码

然后在
  1.                         if($_SERVER['PHP_SELF'] == '/baas/index.php')
  2.                         {
  3.                                 $URL = $_SERVER['REQUEST_URI'];
  4.                                 $ret = Engine::ExecAction('/baas/index.php'.substr($URL,5,strlen($URL)), $paramObject);
  5.                         }
复制代码

前加上
  1. echo $_SERVER['PHP_SELF'];
复制代码

能够正常拿到xhr返回包后记得要将其注释或删除,否则影响正常访问,造成其绑定的baasdata组件定义失败,web会提示data组件未定义。

访问这种连接:  /baas/index.php/$packageName/$module_file/$action
例如http://libra.tpddns.cn:8088/baas/index.php/workreport/login/queryUser,当然,得选择那种不传参的默认action,
反面举例(自定义传参的action):http://libra.tpddns.cn:8088/baas/index.php/workreport/mission/queryMission

如果看到显示:/baas/index.php/$packageName/$module_file/$action(比如/baas/index.php/workreport/login/queryUser)
以及返回xhr包的内容,那么恭喜你,大工告成了。

回复 支持 反对

使用道具 举报

8

主题

131

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
QQ
 楼主| 发表于 2016-11-6 01:39:26 | 显示全部楼层
本帖最后由 deltaboy 于 2016-11-20 22:46 编辑

补充cgi.fix_pathinfo=0的配置:
---------------------------------------------------------------------------
    location ~ .php {
        fastcgi_pass unix:/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        set $path_info "";
        set $real_script_name $fastcgi_script_name;
        if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
            set $real_script_name $1;
            set $path_info $1$2;
        }
        fastcgi_param SCRIPT_NAME $real_script_name;
        fastcgi_param PATH_INFO $path_info;
    }
---------------------------------------------------------------------------


或使用fastcgi_split_path_info(传说新版推荐):
---------------------------------------------------------------------------
    location ~ ^.+\.php {
        fastcgi_pass unix:/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_script_name$fastcgi_path_info;
    }
---------------------------------------------------------------------------

其余同上。好了,感觉去了一块心病...

回复 支持 反对

使用道具 举报

5

主题

19

帖子

69

积分

初级会员

Rank: 2

积分
69
QQ
发表于 2016-11-17 11:45:48 | 显示全部楼层
以后有时间试试
回复 支持 反对

使用道具 举报

8

主题

131

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
QQ
 楼主| 发表于 2016-11-20 22:49:54 | 显示全部楼层
本帖最后由 deltaboy 于 2016-11-20 23:06 编辑

今天把树莓派的系统重刷到dietpi最新版本了,发现cgi.fix_pathinfo=1的配置漏洞已有处理方法,于是过来更新一下。

\model\Baas.php中必须上传到/baas下的文件及目录:
  1. .:
  2. ActionContext.class.php
  3. ActionDef.class.php
  4. BaasData.php
  5. class.phplock.php
  6. CRUD.class.php
  7. DBConfig.class.php
  8. Engine.class.php
  9. index.php
  10. UrlHandler.php

  11. ./common:
  12. CRUD.service.m

  13. ./config:
  14. db.config.xml

  15. ./lock
复制代码
回复 支持 反对

使用道具 举报

1

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
QQ
发表于 2016-11-29 23:54:10 | 显示全部楼层
很有用, 我就是REWRITE那里搞了大半天没完了. 看了这贴我终于把APP搬到路由宝上面了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-4 07:05 , Processed in 0.108886 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表