1Panel icon indicating copy to clipboard operation
1Panel copied to clipboard

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

Open lipanpan-hub opened this issue 1 year ago • 3 comments

联系方式

交流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:18080 和 demo: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 avatar May 11 '24 04:05 lipanpan-hub

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

lipanpan-hub avatar May 11 '24 04:05 lipanpan-hub

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

zhengkunwang223 avatar May 11 '24 06:05 zhengkunwang223

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

lipanpan-hub avatar May 11 '24 07:05 lipanpan-hub

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

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

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

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

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

zhengkunwang223 avatar May 12 '24 06:05 zhengkunwang223

如果我的反代没有指定端口 只有域名 监听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 avatar May 12 '24 11:05 lipanpan-hub

如果我的反代没有指定端口 只有域名 监听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 avatar May 12 '24 11:05 lipanpan-hub

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

lipanpan-hub avatar May 12 '24 11:05 lipanpan-hub

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

大哥 优先级提一下吧

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

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

zhengkunwang223 avatar May 13 '24 00:05 zhengkunwang223

好的 我先手动操作吧

lipanpan-hub avatar May 13 '24 03:05 lipanpan-hub

好的 我先手动操作吧

老哥有没有只转发端口的配置 我也是你的这个问题

fxxkmkd avatar Jun 13 '24 16:06 fxxkmkd

好的 我先手动操作吧

这个逻辑真有点离谱,1panel的面板开了https还是域名+端口访问,配置反代只要开了https就无论如何都访问不了

shuaigekda avatar Oct 13 '24 04:10 shuaigekda