由于端口原因域名需要使用非80的端口,xxx.xxx.com:8080 这种,webman没有原生$_SERVER获取访问域名,通过文档的request()->host()说是可以获取访问域名但是一直拿到的是配置的ip,通过request()->header()可以看到域名但是没有追加的8080端口,问一下大佬们 webman里面怎么自动获取访问域名的全地址啊?
nginx的话需要在反代配置区域增加或者修改
proxy_set_header Host $host;
这个已经加了哦 nginx是按照老大的配置上弄得
那你打印一下原始请求 buffer 看看包不包含相关信息
这种最好 在设置里面写死当前服务器的域名,要不然自定义进程等根本拿不到域名的
这个是某些功能需要识别访问过来的域名进行分配,要动态的,写死的在配置文件里面但是不能做动态匹配呀
$host 就是 nginx 配置文件的变量啊,就是给你当前 nginx 获取到的域名
$host
nginx
。。。request()->host()也是根据请求报文来获取的,你的请求报文没有就是上一个节点的问题,要看你的上一个节点做了什么。将你的请求报文贴出来就一清二楚了
request()->host()
换一个服务器就正常了,客户服务器就是没有对应参数也是奇怪
跟踪你的报文是怎么到达的,每一个节点都会影响
客户服务器前面还有一个nginx等代理节点,没有把正确的数据传过来。 或者是nginx配置改后没重启,没生效。 最简单的,代码里直接 echo $request; 能看到原始的请求包数据,就知道http原始数据传递了哪些字段了。
echo $request;
代码里执行 echo $request; 贴出来
{"header":{"host":"192.168.5.37","x-original-port":"80","connection":"keep-alive,close","x-real-ip":"192.168.5.35","x-forwarded-for":"117.40.103.11, 192.168.5.35","remote-host":"192.168.5.35","x-forwarded-proto":"http","x-forwarded-host":"zhyy.yhjtbg.com","cache-control":"max-age=0","upgrade-insecure-requests":"1","user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36","accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.7","referer":"http://192.168.5.37/","accept-encoding":"gzip, deflate","accept-language":"zh-CN,zh;q=0.9","cookie":"WEBID=9dd75c46eb52da413ab3239e8f6527fa"}} 这是整个header头
你这中间经过了代理吧?这host都变了,用request()->host()获取的就是host头,就是那个ip了
host
ip
你这个是多层转发导致的,也就是在webman所在服务器的nginx前面还有至少一层转发,这之前的转发没有把host这个字段正确传递,host只传了一个ip。
所有我换了一台自己配的服务器就正常,客户提供的有问题!贝斯·~
对,"x-forwarded-for":"117.40.103.11, 192.168.5.35" 就能看出来,整个链路http请求至少转发了2次
nginx的话需要在反代配置区域增加或者修改
这个已经加了哦 nginx是按照老大的配置上弄得
那你打印一下原始请求 buffer 看看包不包含相关信息
这种最好 在设置里面写死当前服务器的域名,要不然自定义进程等根本拿不到域名的
这个是某些功能需要识别访问过来的域名进行分配,要动态的,写死的在配置文件里面但是不能做动态匹配呀
$host就是nginx配置文件的变量啊,就是给你当前nginx获取到的域名。。。
request()->host()也是根据请求报文来获取的,你的请求报文没有就是上一个节点的问题,要看你的上一个节点做了什么。将你的请求报文贴出来就一清二楚了换一个服务器就正常了,客户服务器就是没有对应参数也是奇怪
跟踪你的报文是怎么到达的,每一个节点都会影响
客户服务器前面还有一个nginx等代理节点,没有把正确的数据传过来。
或者是nginx配置改后没重启,没生效。
最简单的,代码里直接
echo $request;能看到原始的请求包数据,就知道http原始数据传递了哪些字段了。代码里执行 echo $request; 贴出来
{"header":{"host":"192.168.5.37","x-original-port":"80","connection":"keep-alive,close","x-real-ip":"192.168.5.35","x-forwarded-for":"117.40.103.11, 192.168.5.35","remote-host":"192.168.5.35","x-forwarded-proto":"http","x-forwarded-host":"zhyy.yhjtbg.com","cache-control":"max-age=0","upgrade-insecure-requests":"1","user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36","accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.7","referer":"http://192.168.5.37/","accept-encoding":"gzip, deflate","accept-language":"zh-CN,zh;q=0.9","cookie":"WEBID=9dd75c46eb52da413ab3239e8f6527fa"}} 这是整个header头
你这中间经过了代理吧?这
host都变了,用request()->host()获取的就是host头,就是那个ip了你这个是多层转发导致的,也就是在webman所在服务器的nginx前面还有至少一层转发,这之前的转发没有把host这个字段正确传递,host只传了一个ip。
所有我换了一台自己配的服务器就正常,客户提供的有问题!贝斯·~
对,"x-forwarded-for":"117.40.103.11, 192.168.5.35" 就能看出来,整个链路http请求至少转发了2次