kalcaddle / kodbox

kodbox is a file manager for web. It is a newly designed product based on kodexplorer. It is also a web code editor, which allows you to develop websites directly within the web browser.You can run kodbox either online or locally,on Linux, Windows or Mac based platforms
https://kodcloud.com
2.18k stars 373 forks source link

使用带端口的url时, 第二条http通讯就会把端口号丢了 #279

Closed strugglesharp closed 2 months ago

strugglesharp commented 2 months ago

比如我的 域名是 abc.com 指向了我的一个外网ip 因为443已经被别的占用了, 所以我给kod分的口是40443 最终 url是 https://kod.abc.com:40443/ 但是从 调试窗口看, 除了我手敲的第一个 http连接是 https://kod.abc.com:40443/ 后面都是 https://kod.abc.com/xxxx 那肯定是访问不了了.

kalcaddle commented 2 months ago

解决方法总结

因为反向代理后header 没有正确配置,导致未识别到正确域名. 解决方法有2种:

  1. 代理转发设置携带上协议/端口/域名
  2. 指定站URL: 在主程序目录新建文件config/define.php 内容如下(已创建则追加)
// 替换自己的域名及端口,在子目录的需要加上子目录
define('APP_HOST','https://server.com:4433/');

测试未发现该问题.可能是服务器配置问题;导致后端没有正确识别到请求头中的端口 正常https默认443端口,如果是自定义别的端口, 使用了代理转发,需要带上转发的header头 X_FORWARDED_HOST/X_FORWARDED_SERVER

识别逻辑如下:

image

方便的话提供个http访问的链接和账号,并提供一下https自定义端口异常链接; email:warlee#kodcloud.com

strugglesharp commented 2 months ago

测试未发现该问题.可能是服务器配置问题;导致后端没有正确识别到请求头中的端口 正常https默认443端口,如果是自定义别的端口, 使用了代理转发,需要带上转发的header头 X_FORWARDED_HOST/X_FORWARDED_SERVER

识别逻辑如下: image

方便的话提供个http访问的链接和账号,并提供一下https自定义端口异常链接; email:warlee#kodcloud.com

明白了. 我确实用了代理转发. 如果不是443口, 默认就用了X_FORWARDED_HOST/X_FORWARDED_SERVER. 但是我觉得, 其实你直接用最开始的那个url就行, 没有必要重算url, 应该能获取到这个url吧? 既然一开始url能访问, 后续一定也能继续访问. 沿用最开始的url应该时胜算最大的.

您说的方法, 我也会去试试. 关键就在 ngnix上. 可惜我首先对ngnix掌握不成体系, 遇到问题都是网上乱copy. 另外,我用的时 1panel+ docker中的OpenResty, 还不是标准的ngnix, 想设 X_FORWARDED_HOST/X_FORWARDED_SERVER 那就更难找了.

这个网络架构巨复杂, 写起来比较费劲也很难被看懂. 粗略的说就是 docker中 kodbox 在 1panel中, docker中的OpenResty提供了反代, 两次NAT做了两次端口映射, 阿里云dns+运行在1panel中的脚本做了DDNS(此问题跟这个应该没有关系), 我先自己尝试解决. 如果实在不行, 再把账号+详细网络架构发到您邮箱.

kalcaddle commented 2 months ago

“但是我觉得, 其实你直接用最开始的那个url就行, 没有必要重算url, 应该能获取到这个url吧”

代理转发后,最后服务器接处理时获取到的请求已经不是最开始浏览器发出的 URL 了,这时候如果没有相关 header 是拿不到最初的 URL 的。

杭州可道云网络有限公司

------------------ 原始邮件 ------------------ 发件人: strugglesharp @.> 发送时间: 2024年6月28日 20:59 收件人: kalcaddle/kodbox @.> 抄送: warlee @.>, State change @.> 主题: Re: [kalcaddle/kodbox] 使用带端口的url时, 第二条http通讯就会把端口号丢了 (Issue #279)

测试未发现该问题.可能是服务器配置问题;导致后端没有正确识别到请求头中的端口 正常https默认443端口,如果是自定义别的端口, 使用了代理转发,需要带上转发的header头 X_FORWARDED_HOST/X_FORWARDED_SERVER

识别逻辑如下:

方便的话提供个http访问的链接和账号,并提供一下https自定义端口异常链接; email:warlee#kodcloud.com

明白了. 我确实用了代理转发. 如果不是443口, 默认就用了X_FORWARDED_HOST/X_FORWARDED_SERVER. 但是我觉得, 其实你直接用最开始的那个url就行, 没有必要重算url, 应该能获取到这个url吧? 既然一开始url能访问, 后续一定也能继续访问. 沿用最开始的url应该时胜算最大的.

您说的方法, 我也会去试试. 关键就在 ngnix上. 可惜我首先对ngnix掌握不成体系, 遇到问题都是网上乱copy. 另外,我用的时 1panel+ docker中的OpenResty, 还不是标准的ngnix, 想设 X_FORWARDED_HOST/X_FORWARDED_SERVER 那就更难找了.

这个网络架构巨复杂, 写起来比较费劲也很难被看懂. 粗略的说就是 docker中 kodbox 在 1panel中, docker中的OpenResty提供了反代, 两次NAT做了两次端口映射, 阿里云dns+运行在1panel中的脚本做了DDNS(此问题跟这个应该没有关系), 我先自己尝试解决. 如果实在不行, 再把账号+详细网络架构发到您邮箱.

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you modified the open/close state.Message ID: @.***>

strugglesharp commented 2 months ago

“但是我觉得, 其实你直接用最开始的那个url就行, 没有必要重算url, 应该能获取到这个url吧”

代理转发后,最后服务器接处理时获取到的请求已经不是最开始浏览器发出的 URL 了,这时候如果没有相关 header 是拿不到最初的 URL 的。

杭州可道云网络有限公司

感谢大力支持. 此问题已经被解决. 就是按照前面指出的思路.