apache - 具有身份验证、websockets 的 Apache VirtualHost
问题描述
我在学校机器人商店的 Raspberry Pi 上运行 Spotify 服务器。它位于学校 wifi 网络上,可通过网页http://localhost:6680访问。我想添加基本的 HTTP 身份验证(用户名/密码),因为人们是恶意的,所以我使用 Apache VirtualHost 作为具有基本身份验证的代理。
此外,Web 服务器需要 WebSockets 通过相同的端口运行。我成功地设置了一个 VirtualHost 文件,它工作正常......除了它不能在 Safari 或 iOS 上工作。查看控制台后,Safari 中的所有 WebSocket 请求都返回 401 错误:
WebSocket connection to 'ws://XX.XXX.XX.XXX/iris/ws/' failed: Unexpected response code: 401
在对此进行了更多研究之后,显然这是 Safari 的一个已知错误。这是虚拟主机文件:
<VirtualHost *:80>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Proxy *>
Allow from all
</Proxy>
ProxyRequests On
ProxyPass /mopidy/ws/ ws://localhost:6680/mopidy/ws/
ProxyPassReverse /mopidy/ws/ ws://localhost:6680/mopidy/ws/
ProxyPass /iris/ws/ ws://localhost:6680/iris/ws/
ProxyPassReverse /iris/ws/ ws://localhost:6680/iris/ws/
<Location />
ProxyPass http://localhost:6680/
ProxyPassReverse http://localhost:6680/
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Location>
</VirtualHost>
有什么方法可以简单地删除websockets 而不是网页的身份验证?考虑到它的结构,应该是这样,但事实并非如此。谢谢!
解决方案
如果需要,请确保您通过 websocket 进行代理。它们可能看起来像这样:
ProxyPass /socket.io http://localhost:6680/socket.io
ProxyPassReverse /socket.io http://localhost:6680/socket.io
推荐阅读
- postgresql - 通过在表中输入值,命令行不起作用
- security - 当 nginx 充当 wss 代理时,是否有可能以某种方式检查 wss 流量的内容并对其做出反应?
- stackexchange-api - How can I find the number of views all MATLAB questions have received?
- python - 如何阻止球“移入”桨?
- java - Java 可信 SSL 证书管理
- c - 我如何找到这个算法的时间复杂度?
- haskell - Lens.Family2 中的 fold 相当于什么?
- c# - WPF 获取文件夹的缩略图
- amazon-web-services - 如何在 AWS VPC 的私有子网中连接 AWS EC2 实例后面的网页
- powershell - 我想从递归搜索中排除子文件夹并复制