摘要:由于是并行開發(fā),肯定存在好幾個功能同時(shí)驗(yàn)收或者測試的情況,這個時(shí)候預(yù)發(fā)環(huán)境到底部署誰的代碼呢切換到的分支,就不能驗(yàn)收了。所以希望存在一個多人開發(fā)環(huán)境,每個人的開發(fā)流程互不影響。運(yùn)行原理首先我們來分析下的運(yùn)行原理,看看的語言特點(diǎn)。
PHP 作為世界上最“好”的語言,在web里占據(jù)著大概80%的份額,中小公司基本都說 lnmp 架構(gòu)。當(dāng)一個倉庫開發(fā)人員大于1,20人的時(shí)候,每個人可能開發(fā)不同的模塊和功能,用代碼版本控制工具比如 git 開不同的分支,流程大概是先在本地搭一套完整的環(huán)境,開發(fā)好部署在測試環(huán)境,自測或者測試人員測試好之后部署在預(yù)發(fā)布環(huán)境,預(yù)發(fā)布基本和線上環(huán)境一樣,然后給產(chǎn)品驗(yàn)收,驗(yàn)收完成后再發(fā)布上線。
由于是并行開發(fā),肯定存在好幾個功能同時(shí)驗(yàn)收或者測試的情況,這個時(shí)候預(yù)發(fā)環(huán)境到底部署誰的代碼呢?切換到A的分支,B就不能驗(yàn)收了。所以希望存在一個多人開發(fā)環(huán)境,每個人的開發(fā)流程互不影響。
PHP運(yùn)行原理首先我們來分析下 PHP 的運(yùn)行原理,看看 PHP 的語言特點(diǎn)。當(dāng)我們從瀏覽器發(fā)起一個請求,我們的web服務(wù)器(Nginx、Apache等)監(jiān)聽了80或者443端口,我們來看一個最簡單的 Nginx 的 vhost 配置:
server { listen 80; server_name test.com; root /data/gateway/html; index index.php; location ~ .php$ { fastcgi_pass 127.0.0.1:9001; #unix:/Users/run/php-fcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
Nginx 監(jiān)聽80端口,當(dāng)匹配到用戶訪問的域名是test.com后使用對應(yīng)的 vhost 配置。在服務(wù)器里PHP-FPM起一個服務(wù),監(jiān)聽一個端口(比如9001)或者一個unix socket,Nginx通過fastcgi_pass配置,將請求傳遞給 PHP-FPM 來解析PHP代碼,PHP解析器每次從index.php開始解析,一路處理下去、做一系列的邏輯處理、查詢數(shù)據(jù)庫或者緩存等操作,返回一個 HTML 或者其他結(jié)果給 Nginx,Nginx 再返回給瀏覽器。流程如下圖:
CGI:是 Nginx 與 PHP_FPM 之間數(shù)據(jù)交換的一種協(xié)議。
FastCGI:同 CGI,是一種通信協(xié)議,但比 CGI 在效率上做了一些優(yōu)化。
PHP-CGI:是 PHP 對 Nginx 提供的 CGI 協(xié)議的接口程序。
PHP-FPM:是 PHP 對 Nginx 提供的 FastCGI 協(xié)議的接口程序,額外還提供了相對智能一些任務(wù)管理。
多人開發(fā)環(huán)境從 PHP 原理我們可以看到,PHP其實(shí)只是一個解釋型的腳本語言,每次請求都要從index.php解析一次,那我們是不是可以在服務(wù)器根據(jù)不同開發(fā)者的名字,命名很多個文件夾,在各自文件夾里,clone 好代碼倉庫,切換到自己的分支。再讓 Nginx 處理每個人目錄下的index就可以了。比如直接訪問http://wulv.test.com/,在 Nginx 獲取到 wulv,把 root 設(shè)置到 wulv 這個目錄,這樣就訪問到 wulv 這個目錄下的代碼了。可以讓 Nginx 這樣設(shè)置:
set $who www; if ($http_who != "") { set $who $http_who; } root /data/gateway/$who/html;
我們可以讓 URL 里攜帶用戶的目錄,在 Nginx 截取下來,可以在一下幾個地方攜帶:
host: http://wulv.test.com
path: http://www.test.com/wulv
query: http://www.test.com?http_who=wulv
這樣大體上可以實(shí)現(xiàn)需求了,但還是有點(diǎn)問題,比如頁面里有些鏈接是寫死的,沒有使用相對路徑,你一點(diǎn)擊就又跑 www.test.com 去了,或者有些第三方應(yīng)用比如 OAuth 等需要校驗(yàn)域名,你和線上域名不一致根本無法登陸。所以需要其他方式來實(shí)現(xiàn),比如:
http request header
cookie
我們可以使用Modify Headers這個瀏覽器插件,修改http request 頭信息,設(shè)置一個參數(shù) http_who 為 wulv,然后在 Nginx 獲取。
拓展如果有條件的話,其實(shí)還可以做一個網(wǎng)關(guān)服務(wù)器,做一個配置頁面,在配置頁面里配置一下需要訪問的目錄,下次訪問,網(wǎng)關(guān)就直接幫你設(shè)置http header,代理到對應(yīng)服務(wù)器。這樣連瀏覽器插件都不需要裝了,對運(yùn)營和產(chǎn)品設(shè)計(jì)更加友好。
本文首發(fā)于我的個人博客:https://wulv.site/2017-11-05/...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/26185.html
摘要:由于是并行開發(fā),肯定存在好幾個功能同時(shí)驗(yàn)收或者測試的情況,這個時(shí)候預(yù)發(fā)環(huán)境到底部署誰的代碼呢切換到的分支,就不能驗(yàn)收了。所以希望存在一個多人開發(fā)環(huán)境,每個人的開發(fā)流程互不影響。運(yùn)行原理首先我們來分析下的運(yùn)行原理,看看的語言特點(diǎn)。 PHP 作為世界上最好的語言,在web里占據(jù)著大概80%的份額,中小公司基本都說 lnmp 架構(gòu)。當(dāng)一個倉庫開發(fā)人員大于1,20人的時(shí)候,每個人可能開發(fā)不同的...
摘要:提供了完整的環(huán)境,并且支持自定義域名指向,動態(tài)計(jì)算資源調(diào)整,可以完成各種應(yīng)用的開發(fā)編譯與部署。 react 新特性 react16 Context 算法相關(guān) 圖解排序算法(二)之希爾排序 微信小程序 微信小程序組件化的解決方案移動端尺寸基本知識 瀏覽器 前端必讀:瀏覽器內(nèi)部工作原理瀏覽器緩存原理解讀瀏覽器加載css和js及dom解析之間的關(guān)系瀏覽器緩存 CSS學(xué)習(xí) 移動web開發(fā)布局入...
摘要:很多面試,很多人員能力要求都有高級工程師的字眼,如果您真心喜歡,并且您剛起步,那么我簡單說說一個高級工程師所應(yīng)該具備的,希望給初級或已經(jīng)達(dá)到中級的工程師一些幫助。程序的執(zhí)行順序問題。 初次接觸PHP,就為其美所折服,于是一發(fā)不可收拾。 很多面試,很多人員能力要求都有PHP高級工程師的字眼,如果您真心喜歡PHP,并且您剛起步,那么我簡單說說一個PHP高級工程師所應(yīng)該具備的,希望給初級或已...
摘要:反向代理和負(fù)載均衡通過判斷不同的,我們可以通過反向代理轉(zhuǎn)發(fā)到不同的機(jī)器和端口,這里同一臺測試機(jī)可以轉(zhuǎn)發(fā)到本機(jī)的不同的端口,監(jiān)聽不同的端口設(shè)置不同的網(wǎng)站目錄。 showImg(https://segmentfault.com/img/bVG4E4?w=1328&h=874); 假如我們使用 git 進(jìn)行版本控制,在一個大型網(wǎng)站中,開發(fā)人員在不同的分支上開發(fā)不同的需求,當(dāng)一個需求開發(fā)完成需...
閱讀 894·2021-09-03 10:42
閱讀 1511·2019-08-30 15:56
閱讀 1444·2019-08-29 17:27
閱讀 870·2019-08-29 15:25
閱讀 3157·2019-08-26 18:27
閱讀 2480·2019-08-26 13:41
閱讀 1888·2019-08-26 10:39
閱讀 1570·2019-08-23 18:36