我正在学校的机器人商店的Raspberry Pi上运行Spotify服务器。它位于学校wifi网络上,可以通过网页http://localhost:6680进行访问。我想添加基本的HTTP身份验证(用户名/密码),因为人们受到恶意攻击,因此我将Apache VirtualHost用作具有基本身份验证的代理。
此外,Web服务器要求WebSocket通过同一端口运行。我成功设置了VirtualHost文件,并且可以正常工作……除了它不能在Safari或iOS上运行。在控制台中查看后,Safari中的所有WebSocket请求都返回401错误:
WebSocket connection to 'ws://XX.XXX.XX.XXX/iris/ws/' failed: Unexpected response code: 401
进一步研究之后,显然使用Safari it's a known bug。这是VirtualHost文件:
<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>
有什么方法可以仅删除对
答案 0 :(得分:0)
我对WebSockets不太了解,但是我确实知道,如果要分隔流量,应该始终声明要监听的VirtualHost端口。
尝试通过在同一配置中添加两个不同的VirtualHost来做到这一点:
<VirtualHost *:80>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "/">
AllowOverride All
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
</VirtualHost>
从现在开始,我无济于事:
<VirtualHost *:6680>
somethingsomethingsomething
</VirtualHost>
我想您学校里的流量不同于:80。 我可以建议一种更激进的方法,该方法禁止Safari(台式机和移动设备)的所有流量。 您可以通过将重定向添加到礼貌页面(例如“不支持您的浏览器”)来修改配置。
<Location *>
SetEnvIfNoCase User-Agent .*Safari* bad_browser
Deny from env=bad_browser
</Location>
答案 1 :(得分:0)
如果需要,请确保您正在代理WebSocket。他们可能看起来像这样:
function saveAsJSON() {
var blob,file,fileSets,obj;
obj = {//Object literal for testing purposes
key:"value"
}
/**
* Creates a file in the users Google Drive
*/
fileSets = {
title: 'AAA_Test.json',
mimeType: 'application/json'
};
blob = Utilities.newBlob(JSON.stringify(obj), "application/vnd.google-apps.script+json");
file = Drive.Files.insert(fileSets, blob);
Logger.log('ID: %s, File size (bytes): %s, type: %s', file.id, file.fileSize, file.mimeType);
}
答案 2 :(得分:0)
尝试下一步,如here所述:
#In your case it will be like this:
<LocationMatch /(iris|mopidy)/ws>
Allow from all
</LocationMatch>
更新:请注意,您会看到此规则的广泛范围。