Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] 反向代理 域名+端口 的形式不可用 #4980

Closed
lipanpan-hub opened this issue May 11, 2024 · 9 comments
Closed

[BUG] 反向代理 域名+端口 的形式不可用 #4980

lipanpan-hub opened this issue May 11, 2024 · 9 comments
Assignees

Comments

@lipanpan-hub
Copy link

lipanpan-hub commented May 11, 2024

联系方式

交流2群 昵称ls

1Panel 版本

v1.10.7-lts

问题描述

image

我的网站采用一个域名+多个端口的形式
我在8080端口部署了halo 然后8081端口反代到8080端口的halo

我发现 /opt/1panel/apps/openresty/openresty/conf/conf.d 目录当中 自动生成的 反向代理配置文件 有着很多让人困惑的地方

server {
    listen 8081 ; 
    listen [::]:8081 ; 
    listen 80 ; 
    listen [::]:80 ; 
    server_name demo.com; 
    xxxx
}

不清楚这里为啥要监听 80端口
然后当我 开启 https 并绑定证书之后 这里又非常诡异的 监听了443端口

server {
    listen 8081 ; 
    listen [::]:8081 ; 
    listen 80 ; 
    listen [::]:80 ; 
    listen 443 ssl http2 ; 
    listen [::]:443 ssl http2 ; 
    server_name demo.com; 
}

如果 没有在 1Panle开启https 的时候 我访问 http://demo.com:8081 会自动跳转到 https://demo.com:8081 会访问失败
在 1Panel开启https之后 访问 https://demo.com:8081 会自动 跳转到 https://demo.com 同样失败

不过 http://demo.com:8081 确实是可以用curl访问的 不过在浏览器里面会自动跳转成 https
https://demo.com:8081 在我更改配置文件之后也能正常访问了 我改成了下面这样

server {
    listen 8081 ssl; 
    listen [::]:8081 ssl;
    server_name demo.com;
    xxx
} 

重现步骤

添加反向代理 域名+端口的形式

期待的正确结果

用户创建反向代理时 如果采用 域名:端口 的形式, 应该仅仅监听用户设置的端口
例如 我的halo在8080 端口 我设置 demo.com:18080 和 demo.com:18043 反代halo

server {
    listen 18043 ; 
    listen [::]:18043 ; 
    listen 18080 ; 
    listen [::]:18080 ; 
}

当用户 开启https的时候 能够指定哪个端口 作为 https端口
例如我设置 18043作为 https端口 18080作为 http端口

server {
    listen 18043 ssl ; 
    listen [::]:18043 ssl ; 
    listen 18080 ; 
    listen [::]:18080 ; 
}

不要去监听 80 和443 这种和用户设置完全没有关系的端口
用户开启 https 应该可以选择自己设置的端口 而不是直接监听443端口

相关日志输出

No response

附加信息

No response

@lipanpan-hub
Copy link
Author

那位大佬有时间改一下这个呀 太蛋疼了

@zhengkunwang223
Copy link
Collaborator

Openresty 安装的时候默认会填写两个端口
一个 http 端口 一个 https 端口
默认是 80 和 443 (国际惯例)
所以你创建网站 会监听默认 80 端口 当做 http 端口
然后你开启 https 默认就是 443 端口
如果你只想添加 https 端口,并且 https 要自定义,那么我建议你自行修改配置文件

@lipanpan-hub
Copy link
Author

如果我的反代没有指定端口 只有域名 监听80 和 443 肯定没有问题
用户已经指定端口了 还去 监听 80 我感觉不合理
而且此时开启https之后 直接无视用户设置的端口 加了一个443的监听 这逻辑 有点看不懂了
而且用户设置的端口也不能用 这里改一下吧 大佬

@zhengkunwang223
Copy link
Collaborator

如果我的反代没有指定端口 只有域名 监听80 和 443 肯定没有问题

用户已经指定端口了 还去 监听 80 我感觉不合理

而且此时开启https之后 直接无视用户设置的端口 加了一个443的监听 这逻辑 有点看不懂了

而且用户设置的端口也不能用 这里改一下吧 大佬

80这个我能理解,你可能不需要80,但是443这个从 1panel 角度来讲,是不知道你要给哪个端口开 https 的,所以只能给默认端口开。比如你添加了5个域名,都是不同端口,开启https ,需要给所有端口都转为 https 吗?但是大部分人都是要 443 端口的。所以这个不好处理

@lipanpan-hub
Copy link
Author

lipanpan-hub commented May 12, 2024

如果我的反代没有指定端口 只有域名 监听80 和 443 肯定没有问题
用户已经指定端口了 还去 监听 80 我感觉不合理
而且此时开启https之后 直接无视用户设置的端口 加了一个443的监听 这逻辑 有点看不懂了
而且用户设置的端口也不能用 这里改一下吧 大佬

80这个我能理解,你可能不需要80,但是443这个从 1panel 角度来讲,是不知道你要给哪个端口开 https 的,所以只能给默认端口开。比如你添加了5个域名,都是不同端口,开启https ,需要给所有端口都转为 https 吗?但是大部分人都是要 443 端口的。所以这个不好处理

我的halo是8080端口 我设置了两个反代 demo.com:18043 和 demo.com:18080
如果用户选择开启 https 则可以 在18043和18080 两个端口当中做选择
我在上面 期待的正确结果 里面有详细的说明 我感觉逻辑应该是清晰的

如果 用户配置的反代 只有域名没有端口 用户开启https的时候 直接监听443
如果 用户配置的反代是 域名:端口 的形式 用户开启https的时候 则让用户选择端口开启https
这个逻辑应该是清晰的 不知道是不是我哪里理解的不到位 请详细说明下

@lipanpan-hub
Copy link
Author

如果我的反代没有指定端口 只有域名 监听80 和 443 肯定没有问题
用户已经指定端口了 还去 监听 80 我感觉不合理
而且此时开启https之后 直接无视用户设置的端口 加了一个443的监听 这逻辑 有点看不懂了
而且用户设置的端口也不能用 这里改一下吧 大佬

80这个我能理解,你可能不需要80,但是443这个从 1panel 角度来讲,是不知道你要给哪个端口开 https 的,所以只能给默认端口开。比如你添加了5个域名,都是不同端口,开启https ,需要给所有端口都转为 https 吗?但是大部分人都是要 443 端口的。所以这个不好处理

我的halo是8080端口 我设置了两个反代 demo.com:18043 和 demo.com:18080 如果用户选择开启 https 则可以 在18043和18080 两个端口当中做选择 我在上面 期待的正确结果 里面有详细的说明 我感觉逻辑应该是清晰的

如果 用户配置的反代 只有域名没有端口 用户开启https的时候 直接监听443 如果 用户配置的反代是 域名:端口 的形式 用户开启https的时候 则让用户选择端口开启https 这个逻辑应该是清晰的 不知道是不是我哪里理解的不到位 请详细说明下

假设用户设置了5个域名反代到halo的8080端口
demo.com:1111
demo.com:2222
demo.com:3333
demo.com:4444
demo.com:5555
如果用户没有开启 https 则监听这5个端口

server {
    listen 1111 ;
    listen 2222 ;
    listen 3333 ;
    listen 4444 ;
    listen 5555 ;
    listen [::]:1111 ;
    listen [::]:2222 ;
    listen [::]:3333 ;
    listen [::]:4444 ;
    listen [::]:5555 ;
    server_name demo.com; 
}

如果 用户选择了 开启https 让用户 选择开启https的端口 如果用户选择 了1111和3333端口
则这两个端口用作 https 端口 其余端口继续用作 http 端口

server {
    listen 1111 ssl;
    listen 2222 ;
    listen 3333 ssl;
    listen 4444 ;
    listen 5555 ;
    listen [::]:1111 ssl;
    listen [::]:2222 ;
    listen [::]:3333 ssl;
    listen [::]:4444 ;
    listen [::]:5555 ;
    server_name demo.com; 
}

@lipanpan-hub
Copy link
Author

这么 严重的问题 应该归类到bug类型 里面 而不是问题类型 里面
大哥 优先级提一下吧
这个反代的功能如果带端口 一开https就废 目前根本用不了呀

@zhengkunwang223
Copy link
Collaborator

这么 严重的问题 应该归类到bug类型 里面 而不是问题类型 里面

大哥 优先级提一下吧

这个反代的功能如果带端口 一开https就废 目前根本用不了呀

我们的逻辑和其他面板的逻辑是一样的,后续会优化创建网站域名带端口时不增加80端口监听,至于 https 的,我们短期内不会更改逻辑

@lipanpan-hub
Copy link
Author

好的 我先手动操作吧

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants