MCSManager icon indicating copy to clipboard operation
MCSManager copied to clipboard

使用HTTPS进行Daemon连接时,使用公网域名正常连接,使用localhost连接失败

Open Yamada993 opened this issue 1 year ago • 20 comments

运行环境:

Ubuntu live server 22.04.3 面板版本:9.9.0 Daemon版本 3.4.0

问题描述:

使用nginx配置完成反向代理,对Web和Daemon均配置SSL,使用Edge访问https://192.168.x.x:24444(Daemon)返回正常,Web端https访问正常,在节点管理中,使用wss://xxxxx.xxx(公网域名):24444可以正常连接,使用wss://localhost:24444无法正常访问,是否有相同问题提交,如果有请告知我并关闭该问题,我没有在已知问题中寻找到相关问题,目前仅了解到通过文档发现必须使用公网,但是在同一台机器内是否可以不适用公网进行Daemon访问呢?

Nginx反向代理配置

/etc/nginx/nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
	worker_connections 768;
}

http {

	sendfile on;
	tcp_nopush on;
	types_hash_max_size 2048;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	ssl_certificate /home/ubuntu/ssl/xxx.pem;
	ssl_certificate_key /home/ubuntu/ssl/xxx.key;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	gzip on;

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}

/etc/nginx/sites-enabled/mcsm

server {
        # Web 端公网访问端口
        listen 23333 ssl;

        location / {
            # Web 端反向代理目标
            proxy_pass http://localhost:2333/;
            root   html;
            index  index.html index.htm;
            proxy_set_header Host localhost;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header REMOTE-HOST $remote_addr;
            # 必须的 Websocket 支持
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            add_header X-Cache $upstream_cache_status;
            add_header Cache-Control no-cache;
            expires -1;
        }
	error_page 497 https://$http_host$request_uri;
    }

server {
        # Daemon 端公网访问端口
        listen 24444 ssl;

        location / {
            # Daemon 端反向代理目标(配置与 Web 端处同理)
            proxy_pass http://localhost:2444/;
            root   html;
            index  index.html index.htm;
            proxy_set_header Host localhost;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header REMOTE-HOST $remote_addr;
            # 必须的 Websocket 支持
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            add_header X-Cache $upstream_cache_status;
            add_header Cache-Control no-cache;
            expires -1;
        }
    }

相关信息已截图

a93ba4ab07d43cd226e6c9817fbfece4 621c5b8821af81b76ce29cabdeb8d64e 28de0ae1aed242b288a645a13057f516 eb6b5065e4f2b0af81bdaeba44e7233d

Yamada993 avatar Dec 05 '23 09:12 Yamada993

  1. 试试 127.0.0.1
  2. 检查内网回环

Bluemangoo avatar Dec 05 '23 11:12 Bluemangoo

  1. 试试 127.0.0.1
  2. 检查内网回环
image

4ed550f72008781d6dd2615849995c9f 这是使用127.0.0.1的结果,检查内网回环具体是什么意思呢?

Yamada993 avatar Dec 05 '23 12:12 Yamada993

在本机中进行测试,使用curl https://127.0.0.1:24444 -k 得到正确的结果,其中-k选项为不验证SSL证书,是否是因为证书问题导致的呢?MCSM是否有设置不验证证书选项? image

Yamada993 avatar Dec 05 '23 13:12 Yamada993

在9.9.0版本中,已经做出不验证证书设置,但是似乎并没有生效?这是一个BUG?我不确定 https://github.com/MCSManager/MCSManager/commit/b8050b62f0de9aee39476dc3a30da184fec808a5 https://github.com/MCSManager/MCSManager/blob/5aed7fb33d790cf7f81324a3514256bfe291825f/src/app/entity/entity_interface.ts#L57

Yamada993 avatar Dec 05 '23 13:12 Yamada993

已和对方在QQ群进一步了解。

目前认为应该是他说指出的代码处配置不生效,导致socket.io库依然在校验证书配置,所以他只要是和证书对不上的ip等方式均无法正常连接。

后续将尝试解决此问题。谢谢你的反馈。

yumao233 avatar Dec 05 '23 15:12 yumao233

如果证书不对那公网IP也不应该可以。除非你的意思是走公网域名。

Bluemangoo avatar Dec 05 '23 23:12 Bluemangoo

另外,如果要127.0.0.1为什么还要https呢。你还不如开两个连接分别为内网http和公网https。

Bluemangoo avatar Dec 05 '23 23:12 Bluemangoo

如果证书不对那公网IP也不应该可以。除非你的意思是走公网域名。

xxxxxx.xxx指的是公网域名,描述有点歧义

Yamada993 avatar Dec 07 '23 03:12 Yamada993

另外,如果要127.0.0.1为什么还要https呢。你还不如开两个连接,分别为内网http和公网https。

开两个连接不是需要启动两个面板吗,有点冗余了感觉

Yamada993 avatar Dec 07 '23 03:12 Yamada993

没啊,一个面板就够。我就是这样子做的。

Bluemangoo avatar Dec 07 '23 07:12 Bluemangoo

如果内网和外网的端口一致、前端后端的域名。那么web可以通过localhost连接daemon。用户使用浏览器连接上反代的地址时,会自动使用同域名的该端口连接。 即在前端使用localhost连接后端时,浏览器会通过[前端域名]:[前端连接后端时的端口]来连接后端。否则,浏览器会使用前端连接后端时的[后端域名]:[前端连接后端时的端口]来连接。

huangsijun17 avatar Dec 07 '23 09:12 huangsijun17

如果内网和外网的端口一致、前端后端的域名。那么web可以通过localhost连接daemon。用户使用浏览器连接上反代的地址时,会自动使用同域名的该端口连接。 即在前端使用localhost连接后端时,浏览器会通过来连接后端。否则,浏览器会使用前端连接后端时的来连接。[前端域名]:[前端连接后端时的端口]``[后端域名]:[前端连接后端时的端口]

我不理解你的意思,首先nginx无法MCSM端口和监听端口一致,nginx需要2个端口来进行反向代理,在这个情况中,若在面板填写localhost 端口填写2444,此端口为未经过nginx的端口,为Daemon的真实服务端口,那么面板可以与该节点进行连接,如图 image 但是即使能够连接节点,却没法使用控制台功能,如图 image 因为Daemon并不支持在自身设置成https协议,需要使用如nginx的反代工具设置https,那么无法通过使用2444端口进行wss协议连接,根据下图可知此处连接所使用的连接为wss://公网域名:2444 d831823c2ec8484eaaf4b5e425eda9eb

你的这种方式固然没问题,但似乎并没有考虑到http和https之间的区别和互通关系,如果有其他方法可以将Daemon的这个原始端口启用https而不是通过nginx反代工具启用那么似乎可以解决这个问题,但在目前看来,在9.9.0版本中提到的添加忽略SSL证书验证并没有生效,若该功能正常生效,那么在面板中输入wss://localhost 端口 24444理论可以正常连接,关于提到的只使用localhost不添加wss协议,根据源代码 https://github.com/MCSManager/MCSManager/blob/5aed7fb33d790cf7f81324a3514256bfe291825f/src/app/entity/remote_service.ts#L28 可知,若在填写地址时不填写协议,则默认使用ws协议,而在Web端,若Web已启用https协议,那么进行控制台连接则使用wss协议,或许此处可以进行修改?根据Daemon端的连接进行选择协议,但根据https中不允许使用http不知是否可行。

Yamada993 avatar Dec 08 '23 13:12 Yamada993

没啊,一个面板就够。我就是这样子做的。

这个确实可以做到,在Web端使用http协议连接不经过反代可以使用不经过反代的Daemon地址进行连接,但这是仅在局域网环境下可以这样使用,我的目的主要是Web端使用https,Daemon也要使用https即使在局域网下,那么这样似乎就没办法正常使用

Yamada993 avatar Dec 08 '23 14:12 Yamada993

如果内网和外网的端口一致、前端后端的域名。那么web可以通过localhost连接daemon。用户使用浏览器连接上反代的地址时,会自动使用同域名的该端口连接。 即在前端使用localhost连接后端时,浏览器会通过来连接后端。否则,浏览器会使用前端连接后端时的来连接。 [前端域名]:[前端连接后端时的端口][后端域名]:[前端连接后端时的端口] ``

我不理解你的意思,首先nginx无法MCSM端口和监听端口一致,nginx需要2个端口来进行反向代理,在这个情况中,若在面板填写localhost 端口填写2444,此端口为未经过nginx的端口,为Daemon的真实服务端口,那么面板可以与该节点进行连接,如图 image 但是即使能够连接节点,却没法使用控制台功能,如图 image 因为Daemon并不支持在自身设置成https协议,需要使用如nginx的反代工具设置https,那么无法通过使用2444端口进行wss协议连接,根据下图可知此处连接所使用的连接为wss://公网域名:2444 d831823c2ec8484eaaf4b5e425eda9eb

你的这种方式固然没问题,但似乎并没有考虑到http和https之间的区别和互通关系,如果有其他方法可以将Daemon的这个原始端口启用https而不是通过nginx反代工具启用那么似乎可以解决这个问题,但在目前看来,在9.9.0版本中提到的添加忽略SSL证书验证并没有生效,若该功能正常生效,那么在面板中输入wss://localhost 端口 24444理论可以正常连接,关于提到的只使用localhost不添加wss协议,根据源代码

https://github.com/MCSManager/MCSManager/blob/5aed7fb33d790cf7f81324a3514256bfe291825f/src/app/entity/remote_service.ts#L28

可知,若在填写地址时不填写协议,则默认使用ws协议,而在Web端,若Web已启用https协议,那么进行控制台连接则使用wss协议,或许此处可以进行修改?根据Daemon端的连接进行选择协议,但根据https中不允许使用http不知是否可行。

需要的是端口号一致……

huangsijun17 avatar Dec 08 '23 16:12 huangsijun17

如果内网和外网的端口一致、前端后端的域名。那么web可以通过localhost连接daemon。用户使用浏览器连接上反代的地址时,会自动使用同域名的该端口连接。 即在前端使用localhost连接后端时,浏览器会通过来连接后端。否则,浏览器会使用前端连接后端时的来连接。 [前端域名]:[前端连接后端时的端口][后端域名]:[前端连接后端时的端口] ``

我不理解你的意思,首先nginx无法MCSM端口和监听端口一致,nginx需要2个端口来进行反向代理,在这个情况中,若在面板填写localhost 端口填写2444,此端口为未经过nginx的端口,为Daemon的真实服务端口,那么面板可以与该节点进行连接,如图 image 但是即使能够连接节点,却没法使用控制台功能,如图 image 因为Daemon并不支持在自身设置成https协议,需要使用如nginx的反代工具设置https,那么无法通过使用2444端口进行wss协议连接,根据下图可知此处连接所使用的连接为wss://公网域名:2444 d831823c2ec8484eaaf4b5e425eda9eb 你的这种方式固然没问题,但似乎并没有考虑到http和https之间的区别和互通关系,如果有其他方法可以将Daemon的这个原始端口启用https而不是通过nginx反代工具启用那么似乎可以解决这个问题,但在目前看来,在9.9.0版本中提到的添加忽略SSL证书验证并没有生效,若该功能正常生效,那么在面板中输入wss://localhost 端口 24444理论可以正常连接,关于提到的只使用localhost不添加wss协议,根据源代码 https://github.com/MCSManager/MCSManager/blob/5aed7fb33d790cf7f81324a3514256bfe291825f/src/app/entity/remote_service.ts#L28

可知,若在填写地址时不填写协议,则默认使用ws协议,而在Web端,若Web已启用https协议,那么进行控制台连接则使用wss协议,或许此处可以进行修改?根据Daemon端的连接进行选择协议,但根据https中不允许使用http不知是否可行。

需要的是端口号一致……

明确说明使用nginx无法做到端口号一致,你说的端口号一致是内外网端口,内外网端口一致只能通过http协议,要通过https协议要用nginx进行代理,nginx代理无法代理同一个端口,经过代理后的端口比如Daemon的端口为2444 nginx的监听端口为24444,外网转发的端口也是24444,这样是你说的内外网端口一致,但是根实际没经过代理的Daemon端口来比较还是不一致,如果要跟Daemon的实际端口一致是无法使用nginx进行代理的

Yamada993 avatar Dec 09 '23 07:12 Yamada993

如果内网和外网的端口一致、前端后端的域名。那么web可以通过localhost连接daemon。用户使用浏览器连接上反代的地址时,会自动使用同域名的该端口连接。 即在前端使用localhost连接后端时,浏览器会通过来连接后端。否则,浏览器会使用前端连接后端时的来连接。 [前端域名]:[前端连接后端时的端口][后端域名]:[前端连接后端时的端口] ``

我不理解你的意思,首先nginx无法MCSM端口和监听端口一致,nginx需要2个端口来进行反向代理,在这个情况中,若在面板填写localhost 端口填写2444,此端口为未经过nginx的端口,为Daemon的真实服务端口,那么面板可以与该节点进行连接,如图 image 但是即使能够连接节点,却没法使用控制台功能,如图 image 因为Daemon并不支持在自身设置成https协议,需要使用如nginx的反代工具设置https,那么无法通过使用2444端口进行wss协议连接,根据下图可知此处连接所使用的连接为wss://公网域名:2444 d831823c2ec8484eaaf4b5e425eda9eb 你的这种方式固然没问题,但似乎并没有考虑到http和https之间的区别和互通关系,如果有其他方法可以将Daemon的这个原始端口启用https而不是通过nginx反代工具启用那么似乎可以解决这个问题,但在目前看来,在9.9.0版本中提到的添加忽略SSL证书验证并没有生效,若该功能正常生效,那么在面板中输入wss://localhost 端口 24444理论可以正常连接,关于提到的只使用localhost不添加wss协议,根据源代码 https://github.com/MCSManager/MCSManager/blob/5aed7fb33d790cf7f81324a3514256bfe291825f/src/app/entity/remote_service.ts#L28

可知,若在填写地址时不填写协议,则默认使用ws协议,而在Web端,若Web已启用https协议,那么进行控制台连接则使用wss协议,或许此处可以进行修改?根据Daemon端的连接进行选择协议,但根据https中不允许使用http不知是否可行。

需要的是端口号一致……

明确说明使用nginx无法做到端口号一致,你说的端口号一致是内外网端口,内外网端口一致只能通过http协议,要通过https协议要用nginx进行代理,nginx代理无法代理同一个端口,经过代理后的端口比如Daemon的端口为2444 nginx的监听端口为24444,外网转发的端口也是24444,这样是你说的内外网端口一致,但是根实际没经过代理的Daemon端口来比较还是不一致,如果要跟Daemon的实际端口一致是无法使用nginx进行代理的

如果端口号不能一致,就必须填外网地址和端口号。现在的web端不能设置后端在两种连接时使用不同的端口号。

huangsijun17 avatar Dec 09 '23 11:12 huangsijun17

如果内网和外网的端口一致、前端后端的域名。那么web可以通过localhost连接daemon。用户使用浏览器连接上反代的地址时,会自动使用同域名的该端口连接。 即在前端使用localhost连接后端时,浏览器会通过来连接后端。否则,浏览器会使用前端连接后端时的来连接。 [前端域名]:[前端连接后端时的端口][后端域名]:[前端连接后端时的端口] ``

我不理解你的意思,首先nginx无法MCSM端口和监听端口一致,nginx需要2个端口来进行反向代理,在这个情况中,若在面板填写localhost 端口填写2444,此端口为未经过nginx的端口,为Daemon的真实服务端口,那么面板可以与该节点进行连接,如图 image 但是即使能够连接节点,却没法使用控制台功能,如图 image 因为Daemon并不支持在自身设置成https协议,需要使用如nginx的反代工具设置https,那么无法通过使用2444端口进行wss协议连接,根据下图可知此处连接所使用的连接为wss://公网域名:2444 d831823c2ec8484eaaf4b5e425eda9eb 你的这种方式固然没问题,但似乎并没有考虑到http和https之间的区别和互通关系,如果有其他方法可以将Daemon的这个原始端口启用https而不是通过nginx反代工具启用那么似乎可以解决这个问题,但在目前看来,在9.9.0版本中提到的添加忽略SSL证书验证并没有生效,若该功能正常生效,那么在面板中输入wss://localhost 端口 24444理论可以正常连接,关于提到的只使用localhost不添加wss协议,根据源代码 https://github.com/MCSManager/MCSManager/blob/5aed7fb33d790cf7f81324a3514256bfe291825f/src/app/entity/remote_service.ts#L28

可知,若在填写地址时不填写协议,则默认使用ws协议,而在Web端,若Web已启用https协议,那么进行控制台连接则使用wss协议,或许此处可以进行修改?根据Daemon端的连接进行选择协议,但根据https中不允许使用http不知是否可行。

需要的是端口号一致……

明确说明使用nginx无法做到端口号一致,你说的端口号一致是内外网端口,内外网端口一致只能通过http协议,要通过https协议要用nginx进行代理,nginx代理无法代理同一个端口,经过代理后的端口比如Daemon的端口为2444 nginx的监听端口为24444,外网转发的端口也是24444,这样是你说的内外网端口一致,但是根实际没经过代理的Daemon端口来比较还是不一致,如果要跟Daemon的实际端口一致是无法使用nginx进行代理的

如果端口号不能一致,就必须填外网地址和端口号。现在的web端不能设置后端在两种连接时使用不同的端口号。

启用https协议如何做到端口号一致?或者用什么工具可以做到?

Yamada993 avatar Dec 10 '23 18:12 Yamada993

你可以试试开看,将daemon进程的监听地址改成回环地址,Nginx改成监听外网IP。这样,端口号就可以同时设置为2444,web走回环连daemon,浏览器走外网Nginx反代连2444。 理论可行,没测试过。


发件人: Yamada993 @.> 发送时间: 2023年12月11日 2:23 收件人: MCSManager/MCSManager @.> 抄送: huangsijun17 @.>; Comment @.> 主题: Re: [MCSManager/MCSManager] 使用HTTPS进行Daemon连接时,使用公网域名正常连接,使用localhost连接失败 (Issue #1085)

如果内网和外网的端口一致、前端后端的域名。那么web可以通过localhost连接daemon。用户使用浏览器连接上反代的地址时,会自动使用同域名的该端口连接。 即在前端使用localhost连接后端时,浏览器会通过来连接后端。否则,浏览器会使用前端连接后端时的来连接。 [前端域名]:[前端连接后端时的端口][后端域名]:[前端连接后端时的端口] ``

我不理解你的意思,首先nginx无法MCSM端口和监听端口一致,nginx需要2个端口来进行反向代理,在这个情况中,若在面板填写localhost 端口填写2444,此端口为未经过nginx的端口,为Daemon的真实服务端口,那么面板可以与该节点进行连接,如图 [image] https://private-user-images.githubusercontent.com/93665364/289070903-b32841a1-46df-4dad-8656-9cda37b62241.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDIwNTM4NzgsIm5iZiI6MTcwMjA1MzU3OCwicGF0aCI6Ii85MzY2NTM2NC8yODkwNzA5MDMtYjMyODQxYTEtNDZkZi00ZGFkLTg2NTYtOWNkYTM3YjYyMjQxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjA4VDE2MzkzOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWZiYzNjY2I2ZjgxYmNmNjRmYzBhY2MxMTYxYjU4ODc2NmU3ZDZmZTNjOTk1ZTEyOTM4MzdlNDliMWFhOTc0NTgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.6tnbVSBZbKKaEIDhqNw7yzZZCKyFFYeQEqlCd2iULc8 但是即使能够连接节点,却没法使用控制台功能,如图 [image] https://private-user-images.githubusercontent.com/93665364/289071243-1cf51bf0-a8ed-495d-bc8a-84c50b0012b5.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDIwNTM4NzgsIm5iZiI6MTcwMjA1MzU3OCwicGF0aCI6Ii85MzY2NTM2NC8yODkwNzEyNDMtMWNmNTFiZjAtYThlZC00OTVkLWJjOGEtODRjNTBiMDAxMmI1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjA4VDE2MzkzOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ0MDU4YjY1ZWFiZjI3YTMwNzI4OGE0YzRkMzBhZjAxZmU2NWY0MjZkMGEyYjA3NjIwNmYyMTcwZjBjMDc5ZDMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.OW8EZCpJPsTlTUSAQL6E2y7Dh7cj3TZurekB2qmdKM8 因为Daemon并不支持在自身设置成https协议,需要使用如nginx的反代工具设置https,那么无法通过使用2444端口进行wss协议连接,根据下图可知此处连接所使用的连接为wss://公网域名:2444 [d831823c2ec8484eaaf4b5e425eda9eb] https://private-user-images.githubusercontent.com/93665364/289071842-de4ae15f-3950-4ae9-b93b-afb88a92d349.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDIwNTM4NzgsIm5iZiI6MTcwMjA1MzU3OCwicGF0aCI6Ii85MzY2NTM2NC8yODkwNzE4NDItZGU0YWUxNWYtMzk1MC00YWU5LWI5M2ItYWZiODhhOTJkMzQ5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjA4VDE2MzkzOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY0NDQwZjkyZmYxYzA2MDUzNzljYzg5NTI0MWY4YjRmY2IxNzFhMjUxM2E4MjY0ODM1ZjU3OGFkM2I1NWM4MDgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.LNed7V2oCpxf4r4YLy6nyz88n8YanLWPUppW926FV2o 你的这种方式固然没问题,但似乎并没有考虑到http和https之间的区别和互通关系,如果有其他方法可以将Daemon的这个原始端口启用https而不是通过nginx反代工具启用那么似乎可以解决这个问题,但在目前看来,在9.9.0版本中提到的添加忽略SSL证书验证并没有生效,若该功能正常生效,那么在面板中输入wss://localhost 端口 24444理论可以正常连接,关于提到的只使用localhost不添加wss协议,根据源代码 https://github.com/MCSManager/MCSManager/blob/5aed7fb33d790cf7f81324a3514256bfe291825f/src/app/entity/remote_service.ts#L28

可知,若在填写地址时不填写协议,则默认使用ws协议,而在Web端,若Web已启用https协议,那么进行控制台连接则使用wss协议,或许此处可以进行修改?根据Daemon端的连接进行选择协议,但根据https中不允许使用http不知是否可行。

需要的是端口号一致……

明确说明使用nginx无法做到端口号一致,你说的端口号一致是内外网端口,内外网端口一致只能通过http协议,要通过https协议要用nginx进行代理,nginx代理无法代理同一个端口,经过代理后的端口比如Daemon的端口为2444 nginx的监听端口为24444,外网转发的端口也是24444,这样是你说的内外网端口一致,但是根实际没经过代理的Daemon端口来比较还是不一致,如果要跟Daemon的实际端口一致是无法使用nginx进行代理的

如果端口号不能一致,就必须填外网地址和端口号。现在的web端不能设置后端在两种连接时使用不同的端口号。

启用https协议如何做到端口号一致?或者用什么工具可以做到?

― Reply to this email directly, view it on GitHubhttps://github.com/MCSManager/MCSManager/issues/1085#issuecomment-1849042028, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AHQLRU3ZBU3ETLDMRJWDOJ3YIX42VAVCNFSM6AAAAABAHKNDEGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQNBZGA2DEMBSHA. You are receiving this because you commented.

huangsijun17 avatar Dec 11 '23 02:12 huangsijun17

你可以试试开看,将daemon进程的监听地址改成回环地址,Nginx改成监听外网IP。这样,端口号就可以同时设置为2444,web走回环连daemon,浏览器走外网Nginx反代连2444。 理论可行,没测试过。 ... ________________________________ 发件人: Yamada993 @.> 发送时间: 2023年12月11日 2:23 收件人: MCSManager/MCSManager @.> 抄送: huangsijun17 @.>; Comment @.> 主题: Re: [MCSManager/MCSManager] 使用HTTPS进行Daemon连接时,使用公网域名正常连接,使用localhost连接失败 (Issue #1085) 如果内网和外网的端口一致、前端后端的域名。那么web可以通过localhost连接daemon。用户使用浏览器连接上反代的地址时,会自动使用同域名的该端口连接。 即在前端使用localhost连接后端时,浏览器会通过来连接后端。否则,浏览器会使用前端连接后端时的来连接。 [前端域名]:[前端连接后端时的端口][后端域名]:[前端连接后端时的端口] `` 我不理解你的意思,首先nginx无法MCSM端口和监听端口一致,nginx需要2个端口来进行反向代理,在这个情况中,若在面板填写localhost 端口填写2444,此端口为未经过nginx的端口,为Daemon的真实服务端口,那么面板可以与该节点进行连接,如图 [image] https://private-user-images.githubusercontent.com/93665364/289070903-b32841a1-46df-4dad-8656-9cda37b62241.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDIwNTM4NzgsIm5iZiI6MTcwMjA1MzU3OCwicGF0aCI6Ii85MzY2NTM2NC8yODkwNzA5MDMtYjMyODQxYTEtNDZkZi00ZGFkLTg2NTYtOWNkYTM3YjYyMjQxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjA4VDE2MzkzOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWZiYzNjY2I2ZjgxYmNmNjRmYzBhY2MxMTYxYjU4ODc2NmU3ZDZmZTNjOTk1ZTEyOTM4MzdlNDliMWFhOTc0NTgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.6tnbVSBZbKKaEIDhqNw7yzZZCKyFFYeQEqlCd2iULc8 但是即使能够连接节点,却没法使用控制台功能,如图 [image] https://private-user-images.githubusercontent.com/93665364/289071243-1cf51bf0-a8ed-495d-bc8a-84c50b0012b5.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDIwNTM4NzgsIm5iZiI6MTcwMjA1MzU3OCwicGF0aCI6Ii85MzY2NTM2NC8yODkwNzEyNDMtMWNmNTFiZjAtYThlZC00OTVkLWJjOGEtODRjNTBiMDAxMmI1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjA4VDE2MzkzOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ0MDU4YjY1ZWFiZjI3YTMwNzI4OGE0YzRkMzBhZjAxZmU2NWY0MjZkMGEyYjA3NjIwNmYyMTcwZjBjMDc5ZDMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.OW8EZCpJPsTlTUSAQL6E2y7Dh7cj3TZurekB2qmdKM8 因为Daemon并不支持在自身设置成https协议,需要使用如nginx的反代工具设置https,那么无法通过使用2444端口进行wss协议连接,根据下图可知此处连接所使用的连接为wss://公网域名:2444 [d831823c2ec8484eaaf4b5e425eda9eb] https://private-user-images.githubusercontent.com/93665364/289071842-de4ae15f-3950-4ae9-b93b-afb88a92d349.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDIwNTM4NzgsIm5iZiI6MTcwMjA1MzU3OCwicGF0aCI6Ii85MzY2NTM2NC8yODkwNzE4NDItZGU0YWUxNWYtMzk1MC00YWU5LWI5M2ItYWZiODhhOTJkMzQ5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjA4VDE2MzkzOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY0NDQwZjkyZmYxYzA2MDUzNzljYzg5NTI0MWY4YjRmY2IxNzFhMjUxM2E4MjY0ODM1ZjU3OGFkM2I1NWM4MDgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.LNed7V2oCpxf4r4YLy6nyz88n8YanLWPUppW926FV2o 你的这种方式固然没问题,但似乎并没有考虑到http和https之间的区别和互通关系,如果有其他方法可以将Daemon的这个原始端口启用https而不是通过nginx反代工具启用那么似乎可以解决这个问题,但在目前看来,在9.9.0版本中提到的添加忽略SSL证书验证并没有生效,若该功能正常生效,那么在面板中输入wss://localhost 端口 24444理论可以正常连接,关于提到的只使用localhost不添加wss协议,根据源代码 https://github.com/MCSManager/MCSManager/blob/5aed7fb33d790cf7f81324a3514256bfe291825f/src/app/entity/remote_service.ts#L28 可知,若在填写地址时不填写协议,则默认使用ws协议,而在Web端,若Web已启用https协议,那么进行控制台连接则使用wss协议,或许此处可以进行修改?根据Daemon端的连接进行选择协议,但根据https中不允许使用http不知是否可行。 需要的是端口号一致…… 明确说明使用nginx无法做到端口号一致,你说的端口号一致是内外网端口,内外网端口一致只能通过http协议,要通过https协议要用nginx进行代理,nginx代理无法代理同一个端口,经过代理后的端口比如Daemon的端口为2444 nginx的监听端口为24444,外网转发的端口也是24444,这样是你说的内外网端口一致,但是根实际没经过代理的Daemon端口来比较还是不一致,如果要跟Daemon的实际端口一致是无法使用nginx进行代理的 如果端口号不能一致,就必须填外网地址和端口号。现在的web端不能设置后端在两种连接时使用不同的端口号。 启用https协议如何做到端口号一致?或者用什么工具可以做到? ― Reply to this email directly, view it on GitHub<#1085 (comment)>, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AHQLRU3ZBU3ETLDMRJWDOJ3YIX42VAVCNFSM6AAAAABAHKNDEGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQNBZGA2DEMBSHA. You are receiving this because you commented.

这样理论看起来好像可以,但是对这个跳过证书验证来说似乎这样做之后在连接时使用的是http协议并没有使用https,这个证书验证跳过可能是在其他环节可以进行的,在连接的时候是不行的

Yamada993 avatar Dec 11 '23 02:12 Yamada993

试试这个 https://github.com/bddjr/nginx-proxy-docs-for-mcsm/blob/master/配置HTTPS反向代理.md

bddjr avatar Dec 22 '23 04:12 bddjr