如何在Apache代理后运行IPython
我想在Apache(反向)代理之后运行一个IPython笔记本web服务器,以便如何在Apache代理后运行IPython,apache,proxy,ipython,reverse-proxy,Apache,Proxy,Ipython,Reverse Proxy,我想在Apache(反向)代理之后运行一个IPython笔记本web服务器,以便 https://my.server:XXXX (其中XXXX是一些端口号)我可以使用 https://my.server/py0 我知道IPython使用websockets,我怀疑这是我的设置中缺少的部分,但我无法找到关于如何配置它的适当详细说明。不幸的是,除此之外,对于代理没有什么可说的: 在代理之后,尤其是当系统或浏览器设置为 自动检测代理,笔记本电脑web应用程序可能无法 连接到服务器的WebSocket[
https://my.server:XXXX
(其中XXXX是一些端口号)我可以使用
https://my.server/py0
我知道IPython使用websockets,我怀疑这是我的设置中缺少的部分,但我无法找到关于如何配置它的适当详细说明。不幸的是,除此之外,对于代理没有什么可说的:
在代理之后,尤其是当系统或浏览器设置为
自动检测代理,笔记本电脑web应用程序可能无法
连接到服务器的WebSocket[…]
因此,我决定自己尝试一下,并将以下内容放入/etc/apache2/sites enabled/default ssl.conf
:
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
ProxyPass /py0/ https://localhost:10000/
ProxyPassReverse /py0/ https://localhost:10000/
通过URL“直接”访问IPythonhttps://my.server:10000
与广告宣传的一样完美
URLhttps://my.server/py0
(不带尾随斜杠)返回“404未找到”
尾随斜杠https://my.server/py0/
转发到https://my.server/login?next=%2F
,它本身就“找不到”——显然是因为/py0/部分丢失了。也许我应该告诉IPython,但是怎么做
也许相关的版本号是:Ubuntu14.04LTS,Apache2.4.7
或许相关的问题是:。但是,由于我的设置中的所有其他内容都由Apache处理,我完全满意,因此我不想另外运行Nginx
有没有人成功地在Apache背后配置了IPython笔记本网络服务器?如果是,请站出来分享你的知识:-)非常感谢 警告:这相当冗长,因为我想您已经了解了其中的大部分内容,但出于文档目的,我在这里列出了足够的细节,供其他人参考 在各个环节的帮助下,我自己实现了这一点,然后把这个答案放在了一起。第一个从这里开始。我在这里重复了很多内容,并做了一些修改。其他链接参考如下 1.设置iPython: 这是在帖子里,但我并没有按照原帖子的建议去做,而是按照一般的说明去做。完成此操作后,您应该能够测试设置,这将需要启用为此配置的端口。如果这不起作用,那么任何Apache设置都将不起作用 2.配置Apache:
/configure--enable proxy--enable ssl--enable deflate--enable proxy http--enable proxy wstunnel--enable info--enable rewrite--enable headers
在此处添加了--启用标题
,因为它们未安装在我的设备上。我还使用了apache2a2enmod命令。所以sudoa2enmod头文件
,sudoa2enmod代理文件
,等等
如果您运行的是Apache 2.4之前的版本,那么您没有proxy\u wstunnel
mod。您可以修补您的版本或升级。要修补您的版本,您可以按照以下步骤操作。一定要复制mod_proxy.so
和mod_proxy\u wstunnel.so
。要获取configure
脚本,您需要运行/buildconfig
,它有自己的依赖项。其中的一条评论指出了这一点
httpd.conf
或者ports.conf
。添加您自己的站点文件更干净,并且允许您在需要时启用/禁用配置
Listen[这里的任何端口]#post在这里有端口8999。。。
...
post上的SSLProxyEngine没有这个。。。
ProxyPass/http://127.0.0.1:8888/
ProxyPassReverse/http://127.0.0.1:8888/
#伪造标题,使记事本接受来自同一来源的请求
标题集原点“http://127.0.0.1:8888/"
RequestHeader集合原点“http://127.0.0.1:8888/"
日志级调试
注1:post使用端口8999,但它可以是您想要的任何端口。此处需要端口80,但不需要指定它,因此,修改上述端口将产生:
... # 这里的一切都是一样的。。。
注意2:由于您使用的是SSL,因此需要在VirtualHost
定义的主体中添加SSLProxyEngine On
。如上所述,该员额没有明确规定这一点
注3:端口8888是运行ipython的端口。根据您的配置进行更改
注4:如果您希望托管多个应用程序,而这是其中之一,而不是使用/
和:8888/
,则需要/ipython
和:8888/ipython
或任何您希望命名的名称。要支持这一点,请参阅sudo a2ensite iPython
sudo a2dispate iPython
sudo服务apache2重新加载
Ubuntu 14.04.1
Apache 2.4.7
ipython 2.3.0
编辑:更新以反映我为使其正常工作所做的最终更改。我还将指令顺序更改为我认为更有意义的指令。我通过以下设置实现了这一点 伊皮顿 IPython笔记本正在收听
http://localhost:8888/ipython
。有必要添加/ipython
前缀,因为ipython使用绝对路径,因此它必须与反向代理路径相同
ipython\u notebook\u config.py
c=get_config()
c、 NotebookApp.ip='localhost'
c、 NotebookApp.open\u browser=False
c、 NotebookApp.port=8888
c、 NotebookApp.base_url='/ipython'
阿帕奇
我启用
mod_代理
mod\u proxy\u ht
<VirtualHost *:80> ServerAdmin myname@my.place.com ServerName some.server.com SSLEngine off Redirect permanent / https://some.server.com </VirtualHost> ## From http://stackoverflow.com/questions/23890386/how-to-run-ipython-behind-an-apache-proxy # <VirtualHost *:443> ServerAdmin myname@my.place.com ServerName some.server.com SSLEngine on SSLCertificateFile some_server_com.crt SSLCertificateKeyFile some_server_com.key <Location /> ProxyPass http://localhost:8888/ ProxyPassReverse http://localhost:8888/ ProxyPassReverseCookieDomain localhost some.server.com RequestHeader set Origin "http://localhost:8888" </Location> <Location /api/kernels/> ProxyPass ws://localhost:8888/api/kernels/ ProxyPassReverse ws://localhost:8888/api/kernels/ </Location> Redirect permanent / https://some.server.com </VirtualHost>
<Location /ipython/terminals/websocket/> ProxyPass ws://localhost:8888/ipython/terminals/websocket/ ProxyPassReverse ws://localhost:8888/ipython/terminals/websocket/ </Location>
<VirtualHost *:443> ServerName default ProxyPreserveHost On ProxyRequests off SSLProxyEngine on SSLEngine on SSLProtocol TLSv1 SSLProxyVerify none SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLCertificateFile /home/ubuntu/.certs/mycert.pem ProxyPass /notebook/terminals/websocket/ wss://localhost:9999/notebook/terminals/websocket/ ProxyPassReverse /notebook/terminals/websocket/ wss://localhost:9999/notebook/terminals/websocket/ ProxyPass /notebook/api/kernels/ wss://127.0.0.1:9999/notebook/api/kernels/ ProxyPassReverse /notebook/api/kernels/ wss://127.0.0.1:9999/notebook/api/kernels/ ProxyPass /notebook https://127.0.0.1:9999/notebook ProxyPassReverse /notebook https://127.0.0.1:9999/notebook </VirtualHost>
c.NotebookApp.allow_origin = '*' c.NotebookApp.base_url = '/SomeName'
SSLProxyEngine on SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off <Location "/SomeName"> ProxyPass https://localhost:XXXX/SomeName ProxyPassReverse https://localhost:XXXX/SomeName </Location> <Location "/SomeName/api/kernels"> ProxyPass wss://localhost:XXXX/SomeName/api/kernels ProxyPassReverse wss://localhost:XXXX/SomeName/api/kernels </Location> <Location "/SomeName/terminals/websocket"> ProxyPass wss://localhost:XXXX/SomeName/terminals/websocket ProxyPassReverse wss://localhost:XXXX/SomeName/terminals/websocket </Location>