PHP是世界上最好的语言,占据了web的80%左右,中小型公司基本都使用lnmp架构。当一个仓库的开发人员超过1个或20个时,每个人可能会开发不同的模块和功能,并使用git等代码版本控制工具开设不同的分支。过程大概是先在本地搭建一个完整的环境,然后好好开发。在测试环境部署,自测或测试员测试后在预发布环境部署。预发布和线上环境基本一样,然后产品接受验收。验收完成后发布上线。既然是并行开发,那么肯定有几个功能是同时验收或测试的。这个时候预发布环境会部署谁的代码?如果换到A的分支,B不能接受。所以希望有一个多人的开发环境,每个人的开发过程互不影响。PHP运行原理首先我们来分析一下PHP的运行原理,看看PHP的语言特点。当我们从浏览器发起请求时,我们的web服务器(Nginx、Apache等)会监听80或443端口,我们来看一下Nginx最简单的vhost配置:server{listen80;服务器名称test.com;根/数据/网关/html;索引index.php;位置~\.php${fastcgi_pass127.0.0.1:9001;#unix:/Users/run/php-fcgi.sock;fastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;包括fastcgi_params;}}Nginx监听80端口,当用户访问的域名匹配到test.com时,使用对应的vhost配置。在服务端,PHP-FPM启动一个服务,监听一个端口(比如9001)或者unixsocket,Nginx通过fastcgi_pass配置将请求传递给PHP-FPM解析PHP代码,PHP解析器从index开始解析.php每次,一路往下处理,做一系列的逻辑处理,查询数据库或者缓存等操作,返回一个HTML或者其他结果给Nginx,Nginx返回给浏览器。流程如下:CGI:是Nginx和PHP_FPM之间进行数据交换的协议。FastCGI:与CGI一样,是一种通信协议,但在效率上比CGI有一些优化。PHP-CGI:是PHP对Nginx提供的CGI协议的接口程序。PHP-FPM:是PHP对Nginx提供的FastCGI协议的接口程序,另外提供了一些比较智能的任务管理。多人开发环境从PHP的原理我们可以看出,PHP其实只是一种解释型脚本语言。每个请求都需要从index.php中解析。那么我们可以在服务器上命名许多不同的开发者吗?在每个文件夹中,克隆代码仓库并切换到自己的分支。然后让Nginx去处理大家目录下的索引。比如直接访问http://wulv.test.com/,在Nginx中获取wulv,将root设置为wulv目录,这样就可以访问wulv目录下的代码了。Nginx可以这样设置:set$whowww;if($http_who!=""){set$who$http_who;}root/data/gateway/$who/html;我们可以让url携带用户的目录,在Nginx中拦截,可以携带在以下几个地方:host:http://wulv.test.compath:http://www.test.com/wulvquery:http://www.test.com?http_who=wulv总的来说可以实现需求,但是还是有一些问题。比如页面中的一些链接是硬编码的,没有使用相对路径。一旦点击,再次进入www.test.com,或者OAuth等一些第三方应用需要对域名进行校验,如果与在线域名不一致,将根本无法登录.所以需要其他方式,比如:http请求头cookie我们可以使用浏览器插件ModifyHeaders修改http请求头信息,设置一个参数http_who为wulv,然后在Nginx中获取。扩展如果可以的话,其实可以做一个网关服务器,做一个配置页面,在配置页面配置需要访问的目录。下次访问时,网关会直接帮你设置http头和代理到对应的服务器。这样一来,连浏览器插件都不需要安装,对运营和产品设计都更加友好。
