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

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

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

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

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

  1. location /app/ {
  2. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  3. proxy_set_header X-Forwarded-Proto $scheme;
  4. proxy_set_header X-Real-IP $remote_addr;
  5. proxy_set_header Host $http_host;
  6. proxy_pass http://127.0.0.1:8444/;
  7. }

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

  1. location /app/ {
  2. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  3. proxy_set_header X-Forwarded-Proto $scheme;
  4. proxy_set_header X-Real-IP $remote_addr;
  5. proxy_set_header Host $http_host;
  6. proxy_pass http://127.0.0.1:8444/;
  7. #new lines
  8. proxy_http_version 1.1;
  9. proxy_set_header Connection "";
  10. }

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

  1. location /app/auth/stream/ {
  2. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  3. proxy_set_header X-Forwarded-Proto $scheme;
  4. proxy_set_header X-Real-IP $remote_addr;
  5. proxy_set_header Host $http_host;
  6. proxy_pass http://127.0.0.1:8444/;
  7. proxy_http_version 1.1;
  8. proxy_set_header Connection "";
  9. }

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

  1. location /app/ {
  2. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  3. proxy_set_header X-Forwarded-Proto $scheme;
  4. proxy_set_header X-Real-IP $remote_addr;
  5. proxy_set_header Host $http_host;
  6. proxy_pass http://127.0.0.1:8444/;
  7. location /app/auth/stream {
  8. proxy_http_version 1.1;
  9. proxy_set_header Connection "";
  10. }
  11. }

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

暂无答案!

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

相关问题