我有一个 Jupiter notebook 在 AWS 的 Ubuntu 服务器上运行。
docker run -d -p 8880:8888 jupyter/all-spark-notebook
我能够很好地看到 Web 界面,并且我已经进入容器并获得了登录令牌。这一切看起来都很好。然而,在网络界面的底部它说
Python 3 (ipykernel)|Disconnected
运行以下行:
docker logs --tail -50 [container ID]
我得到:
[I 2023-04-24 17:57:38.251 ServerApp] Kernel started: 26f0e339-31c1-4fc6-8bf0-4208454c652f
[I 2023-04-24 17:57:38.252 ServerApp] Kernel shutdown: 3b58c1be-aba7-4c0a-9082-f4cfb1252c02
[W 2023-04-24 17:57:42.447 ServerApp] 400 GET /api/kernels/26f0e339-31c1-4fc6-8bf0-4208454c652f/channels?session_id=41770cc1-2ec4-4827-8769-25f415657ee8 ([email protected]) 10.54ms referer=None
[W 2023-04-24 17:57:43.223 ServerApp] 400 GET /api/kernels/26f0e339-31c1-4fc6-8bf0-4208454c652f/channels?session_id=0ab9b092-1a9a-4e13-a5b6-c18a343b7969 ([email protected]) 2.23ms referer=None
[W 2023-04-24 17:57:44.921 ServerApp] Replacing stale connection: 26f0e339-31c1-4fc6-8bf0-4208454c652f:41770cc1-2ec4-4827-8769-25f415657ee8
[W 2023-04-24 17:57:44.922 ServerApp] 400 GET /api/kernels/26f0e339-31c1-4fc6-8bf0-4208454c652f/channels?session_id=41770cc1-2ec4-4827-8769-25f415657ee8 ([email protected]) 2.54ms referer=None
[W 2023-04-24 17:57:47.883 ServerApp] Replacing stale connection: 26f0e339-31c1-4fc6-8bf0-4208454c652f:0ab9b092-1a9a-4e13-a5b6-c18a343b7969
[W 2023-04-24 17:57:47.884 ServerApp] 400 GET /api/kernels/26f0e339-31c1-4fc6-8bf0-4208454c652f/channels?session_id=0ab9b092-1a9a-4e13-a5b6-c18a343b7969 ([email protected]) 2.31ms referer=None
[W 2023-04-24 17:57:49.846 ServerApp] Replacing stale connection: 26f0e339-31c1-4fc6-8bf0-4208454c652f:41770cc1-2ec4-4827-8769-25f415657ee8
[W 2023-04-24 17:57:49.847 ServerApp] 400 GET /api/kernels/26f0e339-31c1-4fc6-8bf0-4208454c652f/channels?session_id=41770cc1-2ec4-4827-8769-25f415657ee8 ([email protected]) 2.57ms referer=None
[W 2023-04-24 17:57:53.474 ServerApp] Replacing stale connection: 26f0e339-31c1-4fc6-8bf0-4208454c652f:0ab9b092-1a9a-4e13-a5b6-c18a343b7969
[W 2023-04-24 17:57:53.475 ServerApp] 400 GET /api/kernels/26f0e339-31c1-4fc6-8bf0-4208454c652f/channels?session_id=0ab9b092-1a9a-4e13-a5b6-c18a343b7969 ([email protected]) 2.37ms referer=None
[W 2023-04-24 17:57:53.659 ServerApp] 400 GET /api/events/subscribe?token=[secret] ([email protected]) 1.24ms referer=None
[W 2023-04-24 17:57:54.621 ServerApp] Replacing stale connection: 26f0e339-31c1-4fc6-8bf0-4208454c652f:41770cc1-2ec4-4827-8769-25f415657ee8
[W 2023-04-24 17:57:54.622 ServerApp] 400 GET /api/kernels/26f0e339-31c1-4fc6-8bf0-4208454c652f/channels?session_id=41770cc1-2ec4-4827-8769-25f415657ee8 ([email protected]) 2.47ms referer=None
[W 2023-04-24 17:57:56.044 ServerApp] Replacing stale connection: 26f0e339-31c1-4fc6-8bf0-4208454c652f:0ab9b092-1a9a-4e13-a5b6-c18a343b7969
[W 2023-04-24 17:57:56.045 ServerApp] 400 GET /api/kernels/26f0e339-31c1-4fc6-8bf0-4208454c652f/channels?session_id=0ab9b092-1a9a-4e13-a5b6-c18a343b7969 ([email protected]) 2.61ms referer=None
[W 2023-04-24 17:58:01.418 ServerApp] Replacing stale connection: 26f0e339-31c1-4fc6-8bf0-4208454c652f:0ab9b092-1a9a-4e13-a5b6-c18a343b7969
[W 2023-04-24 17:58:01.425 ServerApp] 400 GET /api/kernels/26f0e339-31c1-4fc6-8bf0-4208454c652f/channels?session_id=0ab9b092-1a9a-4e13-a5b6-c18a343b7969 ([email protected]) 14.36ms referer=None
[W 2023-04-24 17:58:02.346 ServerApp] Replacing stale connection: 26f0e339-31c1-4fc6-8bf0-4208454c652f:41770cc1-2ec4-4827-8769-25f415657ee8
[W 2023-04-24 17:58:02.347 ServerApp] 400 GET /api/kernels/26f0e339-31c1-4fc6-8bf0-4208454c652f/channels?session_id=41770cc1-2ec4-4827-8769-25f415657ee8 ([email protected]) 2.54ms referer=None
[W 2023-04-24 17:58:03.855 ServerApp] 400 GET /api/events/subscribe?token=[secret] ([email protected]) 1.23ms referer=None
[W 2023-04-24 17:58:10.132 ServerApp] Replacing stale connection: 26f0e339-31c1-4fc6-8bf0-4208454c652f:0ab9b092-1a9a-4e13-a5b6-c18a343b7969
[W 2023-04-24 17:58:10.133 ServerApp] 400 GET /api/kernels/26f0e339-31c1-4fc6-8bf0-4208454c652f/channels?session_id=0ab9b092-1a9a-4e13-a5b6-c18a343b7969 ([email protected]) 2.55ms referer=None
我读到的内容表明这是我的 Apache2 反向代理和 Jupyter 使用 websockets 的问题。所以,我像这样配置代理(根据https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html):
<VirtualHost *:8888>
ServerName host.domain.com
<IfModule mod_ssl.c>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/host.domain.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/host.domain.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/host.domain.com/fullchain.pem
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPreserveHost On
ProxyRequests Off
ProxyVia On
ProxyPass / http://localhost:8880/
ProxyPassReverse / http://localhost:8880/
RewriteEngine on
RewriteCond ${HTTP:Upgrade} websocket [NC]
RewriteCond ${HTTP:Connection} upgrade [NC]
RewriteRule ^/?(.*) "ws://localhost:8880/$1" [P,L]
# RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
# RequestHeader set "X-Forwarded-SSL" expr=%{HTTPS}
</IfModule>
</VirtualHost>
重写模式已经启用。重启Apache后,没有任何变化。我得到相同的日志输出,但笔记本仍未连接到终端。如果我使用基本笔记本,结果相同。我错过了什么?