当前位置: 首页 > 知识库问答 >
问题:

代理安全网络袜子通过nginx播放服务器

乌杰
2023-03-14

我正在运行一个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不是这样工作的吗?

共有1个答案

罗淮晨
2023-03-14

问题在于此代码

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应用提供集中式保护,使其免受常见攻击和漏洞的侵害。