[记录]Nginx 指令 Map 应用场景之: 统一 PHP 开发环境
在统一开发环境上很多团队很多公司做过很多尝试, 比如统一使用一个集成包, 使用 vagrant 等.
大部分都是在 Windows 下开发, 但是很多优秀的扩展和特性不被 Windows 支持,
同时很多人对 *nix 操作不熟练, 并且 vagrant 有个问题(其实是 VirtualBox 的问题)就是文件锁, 有时会导致 svn 无法提交/更新.
这里尝试给出另外一个方案, 个人觉得可行性还是很大的.
本文记录的方案只是个预案, 还没在公司实际推行.
本文演示环境使用 Ubuntu Server 14.04 和 Windows7
思路
- 开发人员通过 Samba 共享代码
- 服务器分别挂载开发人员共享到服务器
- 服务器配置根据开发者 IP 使用不同的代码
准备工作:
- Linux 测试服务一台.
- 开发机一台.
开发机配置
- 开发机使用固定 IP, 可在本机自行设置, 也可网络管理人员在路由器设置.
- 开发机通过共享把代码根目录共享出来, 如
E:\WerServer\CompanyA
,
公司的全部项目代码都在E:\WerServer\CompanyA\wwwroot
下. - 开发机指定 Host, 如
172.16.66.120 test.abc.com
Windows 下通过 Guest
用户或你日常登录的用户共享.
如何共享文件, 以及防火墙的设置, 请自行通过搜索引擎解决.
服务器配置
服务器根据公司业务和技术需要配置好环境, 唯一的要求是使用 Nginx
, 可选安装 echo-nginx-module
安装 Samba/CIFS 工具包:
sudo apt-get install cifs-utils -y
新建一个目录, 并挂载开发人员共享出来的文件:
sudo mkdir -p /var/development/fengqi
sudo mount -t cifs //172.16.66.112/wwwroot /var/development/fengqi
sudo mount -t cifs //172.16.66.211/wwwroot /var/development/diewu
Nginx 在 http
段内, server
段外加入如下配置:
map $remote_addr $dev_user {
"172.16.66.112" "fengqi";
"172.16.66.211" "diewu";
default "default";
}
这段配置的意思是, 根据开发机的 IP 来设置一个变量 $dev_user
, 后面会用到.
Nginx 的 Server 配置做如下变更:
server {
listen 80;
server_name test.abc.com;
root /var/development/$dev_user/test.abc.com;
#... 其他配置
}
如果有安装 echo-nginx-module
模块, 可通过如下配置来快速测试:
# nginx
location /t {
default_type text/plain;
echo $dev_user;
}
# shell
> curl test.abc.com/t
fengqi
现在大家在开发过程中虽然使用的都是同一个域名, 指向的 IP 都是服务器,
但是因为大家的电脑的 IP 不一样, 所以实际执行的代码其实是自己本地的.
这里使用 IP 识别出来用户, 动态的切换根目录, 但是有个前提,
大家使用固定 IP, 一样的目录结构, 一样的测试域名,而且全部 Host 指向服务器.
Map
指令还可以做其它的很多东西, 可自行开下脑洞.
参考资源: