我正在运行一个Play框架应用程序,其中一个javascript需要连接到服务器上的websocket。服务器正在Play应用程序前面运行一个带有SSL的nginx代理,具有以下设置:
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=one:10m max_size=500m;
proxy_cache_methods GET HEAD;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 10m;
proxy_http_version 1.1;
upstream backend {
server 127.0.0.1:9001;
}
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl on;
server_name www.studiecirkel.net;
gzip off;
ssl_certificate /home/sfr/certs/ssl-bundle.crt;
ssl_certificate_key /home/sfr/certs/server.key;
ssl_session_timeout 5m;
ssl_ciphers EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA;
ssl_prefer_server_ciphers on;
location / {
proxy_pass https://backend;
auth_basic "Internt alpha-test";
auth_basic_user_file /home/sfr/studiecirkel/.htpasswd;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
tcp_nodelay on;
}
}
javascript如下所示:
var chatSocket = new WS("@routes.HomeController.connectChat().webSocketURL(request)");
connectChat方法看起来像这样:
public LegacyWebSocket<JsonNode> connectChat() {
return new LegacyWebSocket<JsonNode>() {
public void onReady(WebSocket.In<JsonNode> in, WebSocket.Out<JsonNode> out){
// Some internal code here
}
};
}
当一切都在localhost上时,这工作得很好,但是现在服务器在云中,我在Chromium中得到以下错误:
与“wss://backend/messages/socket/”的 WebSocket 连接失败: 连接建立错误: net::ERR_NAME_NOT_RESOLVED
我还尝试将proxy_pass指令地址从后端切换到127.0.0.1:9001,然后我得到ERR _ CONNECTION _ denied。
如果我尝试使用“proxy_pass http://backend”并在代理后面切换到非SSL,浏览器会说websocket连接不安全,不会连接。
这里会有什么问题呢?websockets必须能够直接连接到代理URL吗?启用SSL的websockets不是这样工作的吗?
问题在于此代码
var chatSocket = new WS("@routes.HomeController.connectChat().webSocketURL(request)")
它在服务器上被解析,因此出现ERR_NAME_NOT_RESOLVED错误。这是DNS错误时,客户端无法解决主机,这是后端在你的情况下,浏览器无法解决它。
尝试将其替换为以下代码,看看它是否有效
var chatSocket = new WS("messages/socket/");
更新。似乎上面的代码还不够。下面是从文档对象获取主机的方法
var webSocketURL = 'wss://' + window.location.host + '/messages/socket/';
var chatSocket = new (webSocketURL);
问题内容: 我有一个由Jetty驱动的网站。 我想使网站密码受保护(或类似)。 有没有一种方法可以通过单独配置来实现(无需触摸代码)。 所有帮助,不胜感激。 担 问题答案: 一种方法是通过为应用程序设置基本身份验证。仅当您使用ssl时才应执行此操作,但是没有ssl的登录仍然不安全,因此我想您已经拥有了。 在Jetty中有很多方法可以做到这一点,但这只是其中之一。 首先,您必须定义一个领域,在其中定
tags:代理服务器,翻墙 SSH 可以实现最为快捷的代理服务器,在没有其他代理服务器软件的情况下,可以作为一个临时解决方案使用。 代理服务器 建立隧道 在本地执行以下命令: ssh -D 10085 remote_server_address 设置代理 在浏览器中设置代理服务器连接为 “socket4”,链接到 “127.0.0.1/10085” 端口。 翻墙 如果远程服务器在国外, 那么这个
在连续数小时和数天试图让NGINX反向代理工作后,第一篇文章在这里发表。 我有多个子域名通过Namecheap服务指向端口80上的home,路由器/防火墙正在运行OpenWrt,OpenWrt指向端口80上的内部NGINX反向代理服务器(CentOS 7)。 本例的子域是dokuwiki。我叫Cheaptld。io和observium。我叫Cheaptld。木卫一 这是我的主要/etc/nginx
tags: polipo linux 下的 shadowsocks 不提供全局代理的功能,因此不得不寻找其他办法。 因此我们引入 polipo,在 shadowsocks 提供的 socks5 代理的基础上提供 http 代理。 PAC全局代理 参考资料: Ubuntu 16安装shadowsocks-qt5并使用PAC全局代理 具体做法如下: 安装 pip sudo apt-get insta
Here are the articles in this section:跨站脚本跨站请求伪造
网络安全目前包括WAF策略。 WAF策略 WAF策略用于为Web应用提供集中式保护,使其免受常见攻击和漏洞的侵害。