Server-Side event in traefik? nginx ok - traefik => internal server error


I'm trying to set a server-side event correctly to no avail.
I have a Django server that has a URL that sends sse, I can proxy easily with nginx with this simple conf:

server {
  listen 80;
  server_name _ ;
  charset utf-8;
  client_max_body_size 20M;

  location / {
    proxy_pass http://django:8000;
    proxy_http_version 1.1;
    proxy_set_header Host $host;

In traefik using docker labels I set:

       - "traefik.enable=true"
       - "`$HOST_ADK`)"
       - ""
       - ""
       - "" 
       #- ""
       #- "traefik.http.middlewares.compress-no-stream.compress=true"
       #- "traefik.http.middlewares.compress-no-stream.compress.excludedcontenttypes=text/event-stream"

This resolve to internal server error that I cannot further debug.

Any hint on what's the correct configuration su make Server-Side event work?


1 Like

Some more info to help debug the problem. The error I get in the application is "took too long to shut down and was killed." or precisely:

Application instance <Task pending name='Task-2' coro=<StaticFilesWrapper.__call__() running at /home/sandro/.pyenv/versions/3.8.6/envs/fiverr-traefik/lib/python3.8/site-packages/channels/> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x7fe3092690d0>()]>> for connection <WebRequest at 0x7fe309b68640 method=GET uri=/adrenalinik/sse/channels/sse-example/ clientproto=HTTP/1.1> took too long to shut down and was killed.
Exception inside application: [Errno -3] Temporary failure in name resolution
Traceback (most recent call last):
  File "/home/sandro/.pyenv/versions/3.8.6/envs/fiverr-traefik/lib/python3.8/site-packages/channels/generic/", line 81, in http_request
    await self.handle(b"".join(self.body))
  File "/home/misc/src/hg/thunder/siti/adk/fiverr-traefik/apps/adrenalinik/", line 71, in handle
    await asyncio.sleep(4)
  File "/home/sandro/.pyenv/versions/3.8.6/lib/python3.8/asyncio/", line 656, in sleep
    return await future

I guess "Temporary failure in name resolution" is a good candidate for the culprit, but I'm not able to make good profit of it. Rememnber: when passing via nginx it does work correctly.

1 Like

I'm honestly baffled by the total silence around this issue. I even posted a question on StackOverflow and an issue on github.

I thought there were quite a lot of people using Server-Sent events and the fact that there's a compress option to cope with text/stream-data makes me think it's a well-supported setup.

I'd like at least to understand if others have managed to proxy server-sent events.

BTW: am I correct in thinking that if I don't use compress middleware, there's no compression at all and ideally it should work? ie: I only need the option that excludes compression if I explicitely set compression.


1 Like

@sandroden: I am also highly interested in this. I tested SSE with Traefik v2 and it appears to work fine.
I don't know whether compression is enabled for this test.


The compress option may indeed have something to do with SSE, take a look at this article:

SOLVED. It turns out I was sending 2 identical headers and that makes Traefik complain.
More explanation in the issue (that I couldn't comment as I realized when it was already frozen...)