感謝 walkor 大佬解決多域名鑒權(quán) 關(guān)于實(shí)現(xiàn)像TP6一樣的多域名控制應(yīng)用解決方案是
安裝 大佬編寫的多域名控制插件 地址:http://wtbis.cn/plugin/11
我對于webman的使用方式是nginx處理靜態(tài)文件 webman處理動(dòng)態(tài)請求 以達(dá)到更高的效率
location ^~ /
{
if (!-e $request_filename){
proxy_pass http://127.0.0.1:8787;
}
#設(shè)置域名 不加這個(gè)webman獲取不到用戶IP
proxy_set_header Host $host;
#設(shè)置用戶IP 不加這個(gè)webman獲取不到用戶IP
proxy_set_header X-Real-IP $remote_addr;
#這個(gè)我也不知道干啥的反正加上就對了
proxy_set_header REMOTE-HOST $remote_addr;
#不需要關(guān)閉nginx緩存刪掉下面這行
proxy_cache off;
}
這樣寫的意思是判斷是否為靜態(tài)文件如果為靜態(tài)文件則把反向代理到 webman 的監(jiān)聽地址 并關(guān)閉了nginx的反向代理緩存 (為什么要關(guān)閉反向代理緩存,因?yàn)楫?dāng)你的響應(yīng)頭中帶有緩存標(biāo)識(shí)時(shí) 不只是瀏覽器會(huì)緩存這個(gè)請求nginx也會(huì)緩存這個(gè)請求(這個(gè)時(shí)候請求就到不了webman中),當(dāng)瀏覽器緩存了這個(gè)請求時(shí)nginx是完全沒有必要去緩存的畢竟我們要的只是讓他轉(zhuǎn)發(fā))
假設(shè)有應(yīng)用 A 綁定域名 www.a.com 應(yīng)用 B 綁定 www.b.com
if (-f $request_filename){
break;
}
# 根據(jù)域名重寫url
if ($host = 'www.a.com') {
rewrite ^/(.*)$ /A/$1 last;
}
# 根據(jù)域名重寫url
if ($host = 'www.b.com') {
rewrite ^/(.*)$ /B/$1 last;
}
這樣即可這樣不會(huì)導(dǎo)致靜態(tài)文件的url也被重寫
不用開多端口,給每個(gè)應(yīng)用加一個(gè)中間件,中間件里判斷域名,如果域名不對就返回404。
http://wtbis.cn/doc/webman/middleware.html
http://wtbis.cn/doc/webman/multiapp.html#%E5%A4%9A%E5%BA%94%E7%94%A8%E4%B8%AD%E9%97%B4%E4%BB%B6%E9%85%8D%E7%BD%AE
大佬,我明白你的意思 就是域名鑒權(quán) 只有指定域名可以訪問到應(yīng)用 ,假設(shè)我有倆應(yīng)用 admin client admin應(yīng)用用中間件限制域名為www.admin.com 那我訪問這個(gè)應(yīng)用時(shí)我的url 依舊是 https://www.admin.com/admin/xxxx 這樣去訪問, 我想要的是直接域名指向應(yīng)用 如上 我想要的url是 https://www.admin.com/xxxx 省略掉應(yīng)用名部分
用nginx做url重寫應(yīng)該是可行的方案。稍后我寫個(gè)webman的域名綁定插件,到時(shí)候應(yīng)該可以做到按照域名綁定應(yīng)用,并且可以簡寫url地址。
應(yīng)用域名綁定插件寫好了,試下
http://wtbis.cn/plugin/11
大佬,我來反饋BUG了
然后發(fā)現(xiàn)一個(gè)不知道算不算bug的bug就是
假設(shè)
我有倆應(yīng)用第一個(gè)client 綁定的域名是 client.123.com 有控制器index
第二個(gè)應(yīng)用叫 api 綁定的域名是 api.123.com
然后我訪問 api.123.com/index 然后訪問到的應(yīng)用是client
config/plugin/webman/domain/app.php
里的 short_url
設(shè)置為false
,然后用nginx重寫url,類似這樣配置
server {
listen 80;
server_name abc.com admin.abc.com blog.abc.com;
# 根據(jù)域名重寫url
if ($host = 'admin.abc.com') {
rewrite ^/(.*)$ /admin/$1 last;
}
# 根據(jù)域名重寫url
if ($host = 'blog.abc.com') {
rewrite ^/(.*)$ /blog/$1 last;
}
location / {
proxy_pass http://127.0.0.1:8787/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
}
}
每個(gè)域名配置個(gè)nginx
server {
listen 80;
server_name admin.abc.com;
root /your/webman/public;
if (!-e $request_filename) {
rewrite ^/(.*)$ /admin/$1 break;
}
location / {
proxy_pass http://127.0.0.1:8787/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
}
}
老大,我的解決方案是這樣的依舊是一個(gè)nginx配置 然后把偽靜態(tài)規(guī)則獨(dú)立出來成為一個(gè)文件然后引用 if (-f $request_filename){
break;
}
//后面根據(jù)域名重寫URL
對了老大,關(guān)于thinkorm 其實(shí)還有一個(gè)小bug 就是 模型,創(chuàng)建的模型文件默認(rèn)是繼承support/model 然后 support/model呢默認(rèn)繼承的是Illuminate\Database\Eloquent\Model as BaseModel 如果想要使用ThinkOrm模型的話得繼承think\Model 然后這個(gè)問題在think插件里面也沒有得到解決
對, support\Model 是針對laraval數(shù)據(jù)庫的,thinkorm不能用它。安裝thinkorm插件并不影響laraval數(shù)據(jù)庫的使用。
弄好了,composer require webman/console ^v1.0.12
阿里云composer代理好像有點(diǎn)問題,如果下載不到v1.0.12的話去掉代理 composer config -g --unset repos.packagist
試下
老大睡了沒,問個(gè)經(jīng)驗(yàn)性問題 我用think-cache建立一個(gè)redis對象 然后我把這個(gè)對象放在 控制器的類成員里面應(yīng)該沒啥問題吧,按道理應(yīng)該是沒問題的