适用于服务器端事件的带HTTPS重定向的AWS Load Balancer(eventSource)

时间:2018-07-22 01:32:33

标签: amazon-web-services nginx url-redirection eventsource

伙计们

我正在使用带有Load Balancer的AWS Elastic beantalk上的JAVA Spring构建网站。简而言之,我有一个页面,该页面使用客户端的事件源和Java Spring后端的SseEmitter从服务器接收服务器端事件(SSE)。

我希望我的网站可以使用HTTPS,所以我遵循官方的建议来设置NGINX配置: https://aws.amazon.com/premiumsupport/knowledge-center/redirect-http-https-elb/?nc1=f_ls

它运作良好...当我使用HTTP连接到我的网站时,它会自动重定向到HTTPS。

但是,我的服务器端事件停止了工作。

我尝试了另一篇文章中的解决方案: EventSource / Server-Sent Events through Nginx 但这没有帮助。

在服务器端,我还根据其他建议添加了httpHeaders。

服务器端:

public static final class CustomSseEmitter extends SseEmitter {
    static final MediaType UTF8_TEXT_EVENTSTREAM = new MediaType("text", "event-stream", Charset.forName("UTF-8"));

    @Override
    protected void extendResponse(ServerHttpResponse outputMessage) {
        HttpHeaders headers = outputMessage.getHeaders();
        headers.set("X-Accel-Buffering", "no");
        headers.set("Cache-Control", "no-cache");
        headers.set("Connection", "keep-alive");
        headers.set("Content-Type", "text/event-stream");
        if (headers.getContentType() == null) {
            headers.setContentType(UTF8_TEXT_EVENTSTREAM);
        }
    }
}

客户端:

var registerSSE = function (companyId, retryCount) {
    source = new EventSource("/middle/registerSSE/" + companyId);

    source.onopen = function (e) {
        console.log("Build SSE successful");
    };

    source.onmessage = function (e) {
        console.log("receive SSE");
    };
    source.onerror = function (e) {
        console.error("SSE broken [" + e.data + "], retry " + (
        ++retryCount) + " times!");
    }
}

抱歉,在这种情况下,我还是一个新手,如何将两个必需的功能组合在一起?

任何建议将不胜感激。 谢谢。

0 个答案:

没有答案