nginx和spring rest流(文本/事件流)有问题

tez616oj  于 2021-07-09  发布在  Java
关注(0)|答案(0)|浏览(200)

我有一个Spring休息控制器,它是这样的:

@GetMapping(value="/auth/stream/{param}", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
        public ResponseEntity<Flux<ServerSentEvent<LoginRequisition>>> userStream(@PathVariable String param) {
            HttpHeaders headers = new HttpHeaders();
            headers.add("Content-Type", "text/event-stream");
            headers.add("Cache-Control", "no-cache");
            headers.add("X-Accel-Buffering", "no");
            return ResponseEntity.ok().headers(headers).body(myStreamManager.DoSomething(param)); 

        }

它对当地环境非常有效。然而,在生产上,它是不起作用的。经过一番研究,我发现这是nginx配置的一个问题。就像这样:

location /app/ {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:8444/;
}

加上最后两行后,一切都开始正常工作:

location /app/ {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $http_host;
            proxy_pass http://127.0.0.1:8444/;
            #new lines
            proxy_http_version 1.1;
            proxy_set_header Connection "";
}

但是这个location/app/应用于所有其他端点,我不需要将它们配置为长时间运行的http连接,所以我尝试只将这个规则定义到我的特定端点,这就造成了混乱。
首先,我尝试将Map添加到一个新位置,如下所示:

location /app/auth/stream/ {

               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $http_host;
                proxy_pass http://127.0.0.1:8444/;
                proxy_http_version 1.1;
                proxy_set_header Connection "";
        }

但没用。我还尝试使用子定位,如下所示:

location /app/ {

                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $http_host;
                proxy_pass http://127.0.0.1:8444/;

                location /app/auth/stream {
                    proxy_http_version 1.1;
                    proxy_set_header Connection "";
                }
        }

但也没用。moerover,当我尝试这些方法时,即使我在location/app/上添加了最后两行,这个东西仍然不起作用,但只要我删除新的位置,它就会开始正常工作。
有人知道发生了什么事吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题