我有一个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/上添加了最后两行,这个东西仍然不起作用,但只要我删除新的位置,它就会开始正常工作。
有人知道发生了什么事吗?
暂无答案!
目前还没有任何答案,快来回答吧!