感谢 walkor 大佬解决多域名鉴权 关于实现像TP6一样的多域名控制应用解决方案是
安装 大佬编写的多域名控制插件 地址:https://www.workerman.net/plugin/11
我对于webman的使用方式是nginx处理静态文件 webman处理动态请求 以达到更高的效率
location ^~ /
{
if (!-e $request_filename){
proxy_pass http://127.0.0.1:8787;
}
#设置域名 不加这个webman获取不到用户IP
proxy_set_header Host $host;
#设置用户IP 不加这个webman获取不到用户IP
proxy_set_header X-Real-IP $remote_addr;
#这个我也不知道干啥的反正加上就对了
proxy_set_header REMOTE-HOST $remote_addr;
#不需要关闭nginx缓存删掉下面这行
proxy_cache off;
}
这样写的意思是判断是否为静态文件如果为静态文件则把反向代理到 webman 的监听地址 并关闭了nginx的反向代理缓存 (为什么要关闭反向代理缓存,因为当你的响应头中带有缓存标识时 不只是浏览器会缓存这个请求nginx也会缓存这个请求(这个时候请求就到不了webman中),当浏览器缓存了这个请求时nginx是完全没有必要去缓存的毕竟我们要的只是让他转发)
假设有应用 A 绑定域名 www.a.com 应用 B 绑定 www.b.com
if (-f $request_filename){
break;
}
# 根据域名重写url
if ($host = 'www.a.com') {
rewrite ^/(.*)$ /A/$1 last;
}
# 根据域名重写url
if ($host = 'www.b.com') {
rewrite ^/(.*)$ /B/$1 last;
}
这样即可这样不会导致静态文件的url也被重写
不用开多端口,给每个应用加一个中间件,中间件里判断域名,如果域名不对就返回404。
https://www.workerman.net/doc/webman/middleware.html
https://www.workerman.net/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
那样的话还是会使得url中带有应用名,这样的话感觉非常麻烦 还有其他方案吗大佬
url不带域名,域名可以直接通过
$request->host()
获取大佬,我明白你的意思 就是域名鉴权 只有指定域名可以访问到应用 ,假设我有俩应用 admin client admin应用用中间件限制域名为www.admin.com 那我访问这个应用时我的url 依旧是 https://www.admin.com/admin/xxxx 这样去访问, 我想要的是直接域名指向应用 如上 我想要的url是 https://www.admin.com/xxxx 省略掉应用名部分
这种应该从入口文件就开始分辨根据应用绑定的域名来进行访问
但是我没找到webman 的入口文件是哪个
直接使用Nginx
用nginx做url重写应该是可行的方案。稍后我写个webman的域名绑定插件,到时候应该可以做到按照域名绑定应用,并且可以简写url地址。
应用域名绑定插件写好了,试下
https://www.workerman.net/plugin/11
👍
大佬牛逼!
大佬,我来反馈BUG了
2.目测这个bug无法解决因为简写URL只是通过添加路由的方式做到绑定域名
3.感觉要通过修改原生入口文件才能对这个进行修复
然后发现一个不知道算不算bug的bug就是
假设
我有俩应用第一个client 绑定的域名是 client.123.com 有控制器index
第二个应用叫 api 绑定的域名是 api.123.com
然后我访问 api.123.com/index 然后访问到的应用是client
大佬看看怎么完善一下
config/plugin/webman/domain/app.php
里的short_url
设置为false
,然后用nginx重写url,类似这样配置大佬那是不是还可以在nginx中配置伪静态就是用户在访问的时候自己吧.html那些给嘎了
然后大佬这样重写url直接把静态文件的url也重写了
每个域名配置个nginx
老大,我的解决方案是这样的依旧是一个nginx配置 然后把伪静态规则独立出来成为一个文件然后引用 if (-f $request_filename){
break;
}
//后面根据域名重写URL
好的,你这样更简洁些。能发个完整的example 配置分享给大家?感谢
发在哪里
就这个帖子里
老大弄完了,保姆级教程
非常感谢
应该的
对了老大,关于thinkorm 其实还有一个小bug 就是 模型,创建的模型文件默认是继承support/model 然后 support/model呢默认继承的是Illuminate\Database\Eloquent\Model as BaseModel 如果想要使用ThinkOrm模型的话得继承think\Model 然后这个问题在think插件里面也没有得到解决
对, support\Model 是针对laraval数据库的,thinkorm不能用它。安装thinkorm插件并不影响laraval数据库的使用。
但是命令行生成的模型 默认就是继承的support/model 但是如果我换成了think的那肯定一般来说都是废弃laraval数据库
我懂你的意思了,后面这里优化下,如果安装了thinkorm,命令生成thinkorm的model
恩恩
弄好了,
composer require webman/console ^v1.0.12
阿里云composer代理好像有点问题,如果下载不到v1.0.12的话去掉代理
composer config -g --unset repos.packagist
试下okok
老大睡了没,问个经验性问题 我用think-cache建立一个redis对象 然后我把这个对象放在 控制器的类成员里面应该没啥问题吧,按道理应该是没问题的
没问题
我是来给大佬助威的~~~
感谢 十夏 大佬远程帮忙解决类型问题!
这样后,public目录下面的静态文件就能直接下载了,比如支付 证书啥的
支付证书一般不会放倒public目录的吧