Traefik session stickiness doesn't seem be be working

I am trying to set session stickiness on a Jira environment running 3 nodes, proxied by traefik, and managed by docker swarm.

There is no replication in between the Jira nodes, so I want to rely on the session stickiness managed by traefik.

My docker compose swarm jira related session stickiness traefik labels look like this:

- traefik.http.services.jira-secure.loadbalancer.server.port=8080
- traefik.http.services.jira-secure.loadbalancer.sticky.cookie=true
- traefik.http.services.jira-secure.loadbalancer.sticky.cookie.name=jirastickya
- traefik.http.services.jira-secure.loadbalancer.sticky.cookie.secure=true
- traefik.http.services.jira-secure.loadbalancer.sticky.cookie.samesite=none
- traefik.http.services.jira-secure.loadbalancer.sticky.cookie.httponly=true
- traefik.http.services.jira-secure.loadbalancer.sticky.cookie.maxage=7200
- traefik.http.services.jira-secure.loadbalancer.healthcheck.path=/status
- traefik.http.services.jira-secure.loadbalancer.healthcheck.interval=60s
- traefik.http.services.jira-secure.loadbalancer.healthcheck.timeout=10s
- traefik.http.services.jira-secure.loadbalancer.strategy=p2c

From what I can see, it seem that traefik is not handling properly the session stickiness, as it seems some request end up on different nodes. This triggers a 401 error with the message: os_authType was 'any 'and an invalid cookie was sent. If the request hits the original node, the response is 200. I can also confirm that by keeping a single node in the cluster, the error goes away. The moment I start a second node, the problems shows up again.

In the browser, I can see the stickiness cookie being passed together with the jira cookies.

In the traefik console I can see that the session stickiness is configure properly. And all the nodes are up and running OK, when the error occurs.

Based on the traefik docs, my configuration should be ok. But still it seems it does not work properly.

Any idea what could be wrong ?

Running traefik:3.4 on alpine container

Thanks

Note that I would prefer not to wipe out the Jira cookies

Are you running multiple Traefik instances?

Enable and check Traefik debug log (doc), any "err" in logs?

Enable and check Traefik access log in JSON format (doc), what’s the output during requests?

I have a single Traefik instance running.

There are no error logs. In Traefik, those failing requests have actually the 200 status:

{"DownstreamStatus":200,"Duration":138347955,"RequestHost":"betaflow.hypertec.com","RequestMethod":"GET","RequestPath":"/api/InventoryStatusAPI/swagger.yml","RetryAttempts":0,"downstream_Content-Type":"application/yml;charset=UTF-8","downstream_X-Ausername":"admin","level":"info","msg":"","origin_Content-Type":"application/yml;charset=UTF-8","origin_X-Ausername":"admin","time":"2025-08-11T11:34:38Z"}

I will try to enable debug logging to see if I get more details.

I was wondering if Traefik is not somehow somehow excluding the resources like .yml files from session stickiness, as the parent page, which is the source of these requests, and which is also served by the jira server, is not experiencing this problem.

Where is OriginStatus?

The debug logs. Search for “swaggeryml” . I have removed the dot to test my theory about .yml files but it seems the issue is still visible.

FYI I had to alter the links/URLs in the logs, in order to be allowed to post these logs.

{"level":"debug","providerName":"swarm","container":"beta-cadvisor-3rqxece16ta36z6hrbn8f7yo9","time":"2025-08-11T12:11:34Z","caller":"git/traefik/traefik/v3/pkg/provider/docker/config.go:185","message":"Filtering disabled container"}
{"level":"debug","providerName":"swarm","container":"beta-cadvisor-iw9m55grh5mf7mbtio6yhu9f7","time":"2025-08-11T12:11:34Z","caller":"git/traefik/traefik/v3/pkg/provider/docker/config.go:185","message":"Filtering disabled container"}
{"level":"debug","providerName":"swarm","container":"beta-cadvisor-k4tn6ec003cc0me3nlq4t56y7","time":"2025-08-11T12:11:34Z","caller":"git/traefik/traefik/v3/pkg/provider/docker/config.go:185","message":"Filtering disabled container"}
{"level":"debug","providerName":"swarm","container":"beta-cadvisor-mwukmcpv28mz32r1c9v0zweqq","time":"2025-08-11T12:11:34Z","caller":"git/traefik/traefik/v3/pkg/provider/docker/config.go:185","message":"Filtering disabled container"}
{"level":"debug","providerName":"swarm","container":"beta-cadvisor-w2q3mrox5vteuplmyw4zhpw3d","time":"2025-08-11T12:11:34Z","caller":"git/traefik/traefik/v3/pkg/provider/docker/config.go:185","message":"Filtering disabled container"}
{"level":"debug","providerName":"swarm","container":"beta-cadvisor-zrkyt5245039e3dbdysjcou0e","time":"2025-08-11T12:11:34Z","caller":"git/traefik/traefik/v3/pkg/provider/docker/config.go:185","message":"Filtering disabled container"}
{"level":"debug","providerName":"swarm","container":"beta-loki-backend-9is3s1242r4ryy0f2wj5c9u1j","time":"2025-08-11T12:11:34Z","caller":"git/traefik/traefik/v3/pkg/provider/docker/config.go:185","message":"Filtering disabled container"}
{"level":"debug","providerName":"swarm","container":"beta-loki-backend-lgd7nhcl5uybeef9ydsvctu9t","time":"2025-08-11T12:11:34Z","caller":"git/traefik/traefik/v3/pkg/provider/docker/config.go:185","message":"Filtering disabled container"}
{"level":"debug","providerName":"swarm","container":"beta-loki-backend-myjgg70ekvvtknipljkayl5ty","time":"2025-08-11T12:11:34Z","caller":"git/traefik/traefik/v3/pkg/provider/docker/config.go:185","message":"Filtering disabled container"}
{"level":"debug","providerName":"swarm","container":"beta-blackbox-exporter-0hooeaq946b8tlc8r03fcrzi7","time":"2025-08-11T12:11:34Z","caller":"git/traefik/traefik/v3/pkg/provider/docker/config.go:185","message":"Filtering disabled container"}
{"level":"debug","providerName":"swarm","config":{"http":{"routers":{"alertmanager-secure":{"entryPoints":["https"],"middlewares":["alertmanager-secure-auth","alertmanager-strip"],"service":"alertmanager-secure","rule":"Host(beta-metricapi.myorg.local) \u0026\u0026 PathPrefix(/alertmanager)","tls":{"certResolver":"myorg","domains":[{"main":"beta-metricapi.myorg.local"}]}},"api":{"entryPoints":["https"],"middlewares":["api"],"service":"jira-api","rule":"Host(beta.myorg) \u0026\u0026 PathPrefix(/api)","priority":10,"tls":{"certResolver":"myorg"}},"confluence-app-integration":{"entryPoints":["http"],"middlewares":["confluence-app-integration-redirect-secure"],"service":"confluence-app-integration-secure","rule":"Host(beta-confluence-integration.myorg)"},"confluence-app-integration-secure":{"entryPoints":["https"],"service":"confluence-app-integration-secure","rule":"Host(beta-confluence-integration.myorg)","tls":{"certResolver":"myorg","domains":[{"main":"beta-confluence-integration.myorg"}]}},"dashboard":{"entryPoints":["http"],"middlewares":["dashboard-redirect-secure"],"service":"dashboard-secure","rule":"Host(beta-proxy.myorg.local)"},"dashboard-secure":{"entryPoints":["https"],"service":"dashboard-secure","rule":"Host(beta-proxy.myorg.local)","tls":{"certResolver":"myorg","domains":[{"main":"beta-proxy.myorg.local"}]}},"dmr-server":{"entryPoints":["http"],"middlewares":["dmr-server-redirect-secure"],"service":"dmr-server-secure","rule":"Host(beta-dmrapi.myorg.local)"},"dmr-server-secure":{"entryPoints":["https"],"service":"dmr-server-secure","rule":"Host(beta-dmrapi.myorg.local)","tls":{"certResolver":"myorg","domains":[{"main":"beta-dmrapi.myorg.local"}]}},"easypost-api":{"entryPoints":["https"],"middlewares":["api"],"service":"jira-api","rule":"Host(beta.myorg) \u0026\u0026 PathPrefix(/api/{path:(?i:easyPostWebhook)})","priority":100,"tls":{"certResolver":"myorg"}},"grafana":{"entryPoints":["http"],"middlewares":["grafana-redirect-secure"],"service":"grafana-secure","rule":"Host(beta-grafana.myorg.local)"},"grafana-secure":{"entryPoints":["https"],"service":"grafana-secure","rule":"Host(beta-grafana.myorg.local)","tls":{"certResolver":"myorg","domains":[{"main":"beta-grafana.myorg.local"}]}},"help-secure":{"entryPoints":["https"],"middlewares":["help-compress","help-cache"],"service":"help-secure","rule":"Host(beta.myorg) \u0026\u0026 PathPrefix(/myorg-help)","tls":{"certResolver":"myorg","domains":[{"main":"beta.myorg"}]}},"inventory-api":{"entryPoints":["https"],"middlewares":["api"],"service":"jira-api","rule":"Host(beta.myorg) \u0026\u0026 PathPrefix(/api/{path:(?i:InventoryStatus)})","priority":100,"tls":{"certResolver":"myorg"}},"jira":{"entryPoints":["http"],"service":"jira-secure","rule":"Host(beta.myorg)"},"jira-secure":{"entryPoints":["https"],"middlewares":["deny_analytics","security-headers"],"service":"jira-secure","rule":"Host(beta.myorg)","priority":1,"tls":{"certResolver":"myorg","domains":[{"main":"beta.myorg"}]}},"label-server":{"entryPoints":["http"],"middlewares":["label-server-redirect-secure"],"service":"label-server-secure","rule":"Host(beta-label-service.myorg.local)"},"label-server-secure":{"entryPoints":["https"],"service":"label-server-secure","rule":"Host(beta-label-service.myorg.local)","tls":{"certResolver":"myorg","domains":[{"main":"beta-label-service.myorg.local"}]}},"loki-cluster":{"entryPoints":["https"],"middlewares":["loki-auth"],"service":"loki-cluster","rule":"Host(beta-logapi.myorg.local) \u0026\u0026 (PathPrefix(/prometheus/) || PathPrefix(/api/prom/) || Path(/ring) || Path(/memberlist) || Path(/config) || Path(/metrics) || Path(/ready) || Path(/)) \u0026\u0026 !Path(/prometheus/api/v1/rules)","tls":{"certResolver":"myorg","domains":[{"main":"beta-logapi.myorg.local"}]}},"loki-read":{"entryPoints":["https"],"middlewares":["loki-auth"],"service":"loki-read","rule":"Host(beta-logapi.myorg.local) \u0026\u0026 (PathPrefix(/loki/api/) || Path(/prometheus/api/v1/rules))","tls":{"certResolver":"myorg","domains":[{"main":"beta-logapi.myorg.local"}]}},"loki-read-tail":{"entryPoints":["https"],"middlewares":["loki-read-tail-custom-headers","loki-auth"],"service":"loki-read","rule":"Host(beta-logapi.myorg.local) \u0026\u0026 (Path(/loki/api/v1/tail))","tls":{"certResolver":"myorg","domains":[{"main":"beta-logapi.myorg.local"}]}},"loki-write":{"entryPoints":["https"],"middlewares":["loki-auth"],"service":"loki-write","rule":"Host(beta-logapi.myorg.local) \u0026\u0026 Path(/loki/api/v1/push)","tls":{"certResolver":"myorg","domains":[{"main":"beta-logapi.myorg.local"}]}},"newtopia-api":{"entryPoints":["https"],"middlewares":["api"],"service":"jira-api","rule":"Host(beta.myorg) \u0026\u0026 (PathPrefix(/api/{path:(?i:newtopiaKitShipOrder)})|| PathPrefix(/api/{path:(?i:newtopiaOrderStatus)}))","priority":100,"tls":{"certResolver":"myorg"}},"pickpackship-api":{"entryPoints":["https"],"middlewares":["api"],"service":"jira-api","rule":"Host(beta.myorg) \u0026\u0026 (PathPrefix(/api/{path:(?i:pickPackShipSharepointOrder)}) || PathPrefix(/api/{path:(?i:pickPackShipOrder)}) || PathPrefix(/api/{path:(?i:pickPackShipCancelOrder)}))","priority":100,"tls":{"certResolver":"myorg","domains":[{"main":"beta.myorg"}]}},"pickpackship-status-api":{"entryPoints":["https"],"middlewares":["api"],"service":"jira-api","rule":"Host(beta.myorg) \u0026\u0026 PathPrefix(/api/{path:(?i:pickPackShipOrderStatus)})","priority":100,"tls":{"certResolver":"myorg","domains":[{"main":"beta.myorg"}]}},"prometheus":{"entryPoints":["http"],"middlewares":["prometheus-redirect-secure"],"service":"prometheus-secure","rule":"Host(beta-metricapi.myorg.local)"},"prometheus-secure":{"entryPoints":["https"],"middlewares":["prometheus-secure-auth"],"service":"prometheus-secure","rule":"Host(beta-metricapi.myorg.local) \u0026\u0026 !PathPrefix(/alertmanager)","tls":{"certResolver":"myorg","domains":[{"main":"beta-metricapi.myorg.local"}]}},"purchaseorders-api":{"entryPoints":["https"],"middlewares":["api"],"service":"jira-api","rule":"Host(beta.myorg) \u0026\u0026 PathPrefix(/api/{path:(?i:PurchaseOrders)})","priority":100,"tls":{"certResolver":"myorg"}},"retrieval-api":{"entryPoints":["https"],"middlewares":["api"],"service":"jira-api","rule":"Host(beta.myorg) \u0026\u0026 (PathPrefix(/api/{path:(?i:retrievalOrderSharepoint)}) || PathPrefix(/api/{path:(?i:retrievalOrder)}) || PathPrefix(/api/{path:(?i:retrievalOrderCancel)}))","priority":100,"tls":{"certResolver":"myorg"}},"retrieval-status-api":{"entryPoints":["https"],"middlewares":["api"],"service":"jira-api","rule":"Host(beta.myorg) \u0026\u0026 PathPrefix(/api/{path:(?i:retrievalOrderStatus)})","priority":100,"tls":{"certResolver":"myorg"}},"workorders-api":{"entryPoints":["https"],"middlewares":["api"],"service":"jira-api","rule":"Host(beta.myorg) \u0026\u0026 PathPrefix(/api/{path:(?i:WorkOrders)})","priority":100,"tls":{"certResolver":"myorg"}}},"services":{"alertmanager-secure":{"loadBalancer":{"servers":[{"url":"10.0.5.41:9093"}],"strategy":"wrr","healthCheck":{"mode":"http","path":"/-/healthy","interval":"1m0s","timeout":"10s","followRedirects":true},"passHostHeader":true,"responseForwarding":{"flushInterval":"100ms"}}},"confluence-app-integration-secure":{"loadBalancer":{"sticky":{"cookie":{"name":"confluencesticky","secure":true,"httpOnly":true,"sameSite":"none","maxAge":7200,"path":"/"}},"servers":[{"url":"10.0.1.12:3000"},{"url":"10.0.1.6:3000"}],"strategy":"p2c","healthCheck":{"mode":"http","path":"/health","interval":"1m0s","timeout":"10s","followRedirects":true},"passHostHeader":true,"responseForwarding":{"flushInterval":"100ms"}}},"dashboard-secure":{"loadBalancer":{"servers":[{"url":"10.0.4.7"}],"strategy":"wrr","passHostHeader":true,"responseForwarding":{"flushInterval":"100ms"}}},"dmr-server-secure":{"loadBalancer":{"servers":[{"url":"10.0.1.22"},{"url":"10.0.1.9"}],"strategy":"wrr","healthCheck":{"mode":"http","path":"/kitTypes","interval":"1m0s","timeout":"10s","followRedirects":true},"passHostHeader":true,"responseForwarding":{"flushInterval":"100ms"}}},"grafana-secure":{"loadBalancer":{"servers":[{"url":"10.0.5.42:3000"}],"strategy":"wrr","healthCheck":{"mode":"http","path":"/api/health","interval":"1m0s","timeout":"10s","followRedirects":true},"passHostHeader":true,"responseForwarding":{"flushInterval":"100ms"}}},"help-secure":{"loadBalancer":{"servers":[{"url":"10.0.1.24:80"},{"url":"10.0.1.14:80"}],"strategy":"wrr","healthCheck":{"mode":"http","path":"/","interval":"1m0s","timeout":"10s","followRedirects":true},"passHostHeader":true,"responseForwarding":{"flushInterval":"100ms"}}},"jira-api":{"loadBalancer":{"servers":[{"url":"10.0.1.15"},{"url":"10.0.1.19"},{"url":"10.0.1.4"}],"strategy":"wrr","healthCheck":{"mode":"http","path":"/status","interval":"1m0s","timeout":"10s","followRedirects":true},"passHostHeader":true,"responseForwarding":{"flushInterval":"100ms"}}},"jira-secure":{"loadBalancer":{"sticky":{"cookie":{"name":"jirastickya","secure":true,"httpOnly":true,"sameSite":"none","maxAge":7200,"path":"/"}},"servers":[{"url":"10.0.1.15"},{"url":"10.0.1.19"},{"url":"10.0.1.4"}],"strategy":"p2c","healthCheck":{"mode":"http","path":"/status","interval":"1m0s","timeout":"10s","followRedirects":true},"passHostHeader":true,"responseForwarding":{"flushInterval":"100ms"}}},"label-server-secure":{"loadBalancer":{"servers":[{"url":"10.0.1.3:3000"},{"url":"10.0.1.21:3000"}],"strategy":"wrr","healthCheck":{"mode":"http","path":"/","interval":"1m0s","timeout":"10s","followRedirects":true},"passHostHeader":true,"responseForwarding":{"flushInterval":"100ms"}}},"loki-cluster":{"loadBalancer":{"servers":[{"url":"10.0.6.110:3100"},{"url":"10.0.6.120:3100"},{"url":"10.0.6.113:3100"},{"url":"10.0.6.118:3100"},{"url":"10.0.6.135:3100"},{"url":"10.0.6.126:3100"}],"strategy":"wrr","healthCheck":{"mode":"http","path":"/ready","interval":"1m0s","timeout":"10s","followRedirects":true},"passHostHeader":true,"responseForwarding":{"flushInterval":"100ms"}}},"loki-read":{"loadBalancer":{"servers":[{"url":"10.0.6.110:3100"},{"url":"10.0.6.120:3100"},{"url":"10.0.6.113:3100"}],"strategy":"wrr","healthCheck":{"mode":"http","path":"/ready","interval":"1m0s","timeout":"10s","followRedirects":true},"passHostHeader":true,"responseForwarding":{"flushInterval":"100ms"}}},"loki-write":{"loadBalancer":{"servers":[{"url":"10.0.6.118:3100"},{"url":"10.0.6.135:3100"},{"url":"10.0.6.126:3100"}],"strategy":"wrr","healthCheck":{"mode":"http","path":"/ready","interval":"1m0s","timeout":"10s","followRedirects":true},"passHostHeader":true,"responseForwarding":{"flushInterval":"100ms"}}},"prometheus-secure":{"loadBalancer":{"servers":[{"url":"10.0.5.35:9090"}],"strategy":"wrr","healthCheck":{"mode":"http","path":"/-/healthy","interval":"1m0s","timeout":"10s","followRedirects":true},"passHostHeader":true,"responseForwarding":{"flushInterval":"100ms"}}}},"middlewares":{"alertmanager-secure-auth":{"basicAuth":{"users":["myuser"]}},"alertmanager-strip":{"stripPrefix":{"prefixes":["/alertmanager"],"forceSlash":false}},"api":{"chain":{"middlewares":["api-path","cors","jira-cookies","atlassian-token","api-ratelimit"]}},"api-path":{"replacePathRegex":{"regex":"^/api/(.)","replacement":"/rest/scriptrunner/latest/custom/$1"}},"api-ratelimit":{"rateLimit":{"average":3,"period":"1s","burst":3,"sourceCriterion":{"requestHeaderName":"Authorization"}}},"atlassian-token":{"headers":{"customRequestHeaders":{"X-Atlassian-Token":"no-check"}}},"confluence-app-integration-redirect-secure":{"redirectScheme":{"scheme":"https"}},"cors":{"headers":{"accessControlAllowCredentials":true,"accessControlAllowHeaders":[""],"accessControlAllowMethods":[""],"accessControlAllowOriginList":[""],"accessControlMaxAge":300,"addVaryHeader":true}},"dashboard-redirect-secure":{"redirectScheme":{"scheme":"https"}},"deny_analytics":{"plugin":{"blockpath":{"regex":"^/rest/analytics/1.0/publish/bulk(.*)"}}},"dmr-server-redirect-secure":{"redirectScheme":{"scheme":"https"}},"grafana-redirect-secure":{"redirectScheme":{"scheme":"https"}},"help-cache":{"headers":{"customRequestHeaders":{"Cache-Control":"max-age=604800""}}},"help-compress":{"compress":{"encodings":["gzip","br","zstd"]}},"jira-cookies":{"headers":{"customResponseHeaders":{"Set-Cookie":""}}},"jira-redirect-secure":{"redirectScheme":{"scheme":"https"}},"label-server-redirect-secure":{"redirectScheme":{"scheme":"https"}},"loki-auth":{"basicAuth":{"users":["myuser"]}},"loki-read-tail-custom-headers":{"headers":{"customRequestHeaders":{"Connection":"Upgrade","Upgrade":"websocket"}}},"prometheus-redirect-secure":{"redirectScheme":{"scheme":"https"}},"prometheus-secure-auth":{"basicAuth":{"users":["myuser"]}},"security-headers":{"headers":{"customResponseHeaders":{"Content-Security-Policy":"frame-ancestors 'self' beta-myorg.crm3.dynamics;"}}}}},"tcp":{},"udp":{},"tls":{}},"time":"2025-08-11T12:11:34Z","caller":"git/traefik/traefik/v3/pkg/server/configurationwatcher.go:227","message":"Configuration received"}
{"level":"debug","providerName":"swarm","time":"2025-08-11T12:11:34Z","caller":"git/traefik/traefik/v3/pkg/server/configurationwatcher.go:127","message":"Skipping unchanged configuration"}
{"level":"debug","time":"2025-08-11T12:11:34Z","caller":"git/traefik/traefik/v3/pkg/tls/tlsmanager.go:228","message":"Serving default certificate for request: """}
{"level":"debug","time":"2025-08-11T12:11:34Z","caller":"git/traefik/traefik/v3/pkg/server/service/loadbalancer/p2c/p2c.go:176","message":"Service selected by P2C: 10.0.1.19"}
{"DownstreamStatus":200,"Duration":11264530,"RequestHost":"beta.myorg","RequestMethod":"GET","RequestPath":"/status","RetryAttempts":0,"downstream_Content-Type":"application/json;charset=UTF-8","downstream_X-Ausername":"anonymous","level":"info","msg":"","origin_Content-Type":"application/json;charset=UTF-8","origin_X-Ausername":"anonymous","time":"2025-08-11T12:11:34Z"}
{"level":"debug","time":"2025-08-11T12:11:34Z","caller":"git/traefik/traefik/v3/pkg/server/service/loadbalancer/wrr/wrr.go:175","message":"Service selected by WRR: 10.0.4.7"}
{"DownstreamStatus":200,"Duration":1014611,"RequestHost":"beta-proxy.myorg.local","RequestMethod":"GET","RequestPath":"/api/overview","RetryAttempts":0,"downstream_Content-Type":"application/json","level":"info","msg":"","origin_Content-Type":"application/json","time":"2025-08-11T12:11:34Z"}
{"DownstreamStatus":200,"Duration":317266581,"RequestHost":"beta.myorg","RequestMethod":"GET","RequestPath":"/rest/scriptrunner/latest/custom/InventoryStatusAPI","RetryAttempts":0,"downstream_Content-Type":"text/html;charset=UTF-8","downstream_X-Ausername":"myuser","level":"info","msg":"","origin_Content-Type":"text/html;charset=UTF-8","origin_X-Ausername":"myuser","time":"2025-08-11T12:11:36Z"}
{"level":"debug","time":"2025-08-11T12:11:37Z","caller":"git/traefik/traefik/v3/pkg/server/service/loadbalancer/wrr/wrr.go:175","message":"Service selected by WRR: 10.0.1.19"}
{"DownstreamStatus":200,"Duration":21671499,"RequestHost":"beta.myorg","RequestMethod":"GET","RequestPath":"/favicon.ico","RetryAttempts":0,"downstream_Content-Type":"image/x-icon","level":"info","msg":"","origin_Content-Type":"image/x-icon","time":"2025-08-11T12:11:37Z"}
{"level":"debug","time":"2025-08-11T12:11:39Z","caller":"git/traefik/traefik/v3/pkg/server/service/loadbalancer/wrr/wrr.go:175","message":"Service selected by WRR: 10.0.4.7"}
{"DownstreamStatus":200,"Duration":816012,"RequestHost":"beta-proxy.myorg.local","RequestMethod":"GET","RequestPath":"/api/overview","RetryAttempts":0,"downstream_Content-Type":"application/json","level":"info","msg":"","origin_Content-Type":"application/json","time":"2025-08-11T12:11:39Z"}
{"level":"debug","time":"2025-08-11T12:11:40Z","caller":"git/traefik/traefik/v3/pkg/tls/tlsmanager.go:228","message":"Serving default certificate for request: """}
{"level":"debug","time":"2025-08-11T12:11:40Z","caller":"git/traefik/traefik/v3/pkg/server/service/loadbalancer/p2c/p2c.go:176","message":"Service selected by P2C: 10.0.1.4"}
{"DownstreamStatus":200,"Duration":8195513,"RequestHost":"beta.myorg","RequestMethod":"GET","RequestPath":"/status","RetryAttempts":0,"downstream_Content-Type":"application/json;charset=UTF-8","downstream_X-Ausername":"anonymous","level":"info","msg":"","origin_Content-Type":"application/json;charset=UTF-8","origin_X-Ausername":"anonymous","time":"2025-08-11T12:11:40Z"}
{"DownstreamStatus":200,"Duration":282760206,"RequestHost":"beta.myorg","RequestMethod":"GET","RequestPath":"/rest/scriptrunner/latest/custom/InventoryStatusAPI","RetryAttempts":0,"downstream_Content-Type":"text/html;charset=UTF-8","downstream_X-Ausername":"myuser","level":"info","msg":"","origin_Content-Type":"text/html;charset=UTF-8","origin_X-Ausername":"myuser","time":"2025-08-11T12:11:42Z"}
{"level":"debug","time":"2025-08-11T12:11:42Z","caller":"git/traefik/traefik/v3/pkg/server/service/loadbalancer/wrr/wrr.go:175","message":"Service selected by WRR: 10.0.1.4"}
{"DownstreamStatus":200,"Duration":17264302,"RequestHost":"beta.myorg","RequestMethod":"GET","RequestPath":"/favicon.ico","RetryAttempts":0,"downstream_Content-Type":"image/x-icon","level":"info","msg":"","origin_Content-Type":"image/x-icon","time":"2025-08-11T12:11:42Z"}
{"DownstreamStatus":200,"Duration":129979820,"RequestHost":"beta.myorg","RequestMethod":"GET","RequestPath":"/api/InventoryStatusAPI/swaggeryml","RetryAttempts":0,"downstream_Content-Type":"application/yml;charset=UTF-8","downstream_X-Ausername":"myuser","level":"info","msg":"","origin_Content-Type":"application/yml;charset=UTF-8","origin_X-Ausername":"myuser","time":"2025-08-11T12:11:42Z"}
{"level":"debug","time":"2025-08-11T12:11:42Z","caller":"git/traefik/traefik/v3/pkg/tls/tlsmanager.go:228","message":"Serving default certificate for request: """}
{"level":"debug","time":"2025-08-11T12:11:43Z","caller":"git/traefik/traefik/v3/pkg/server/service/loadbalancer/p2c/p2c.go:176","message":"Service selected by P2C: 10.0.1.15"}
{"DownstreamStatus":200,"Duration":7785291,"RequestHost":"beta.myorg","RequestMethod":"GET","RequestPath":"/status","RetryAttempts":0,"downstream_Content-Type":"application/json;charset=UTF-8","downstream_X-Ausername":"anonymous","level":"info","msg":"","origin_Content-Type":"application/json;charset=UTF-8","origin_X-Ausername":"anonymous","time":"2025-08-11T12:11:43Z"}
{"level":"debug","time":"2025-08-11T12:11:44Z","caller":"git/traefik/traefik/v3/pkg/tls/tlsmanager.go:228","message":"Serving default certificate for request: """}
{"level":"debug","time":"2025-08-11T12:11:44Z","caller":"git/traefik/traefik/v3/pkg/server/service/loadbalancer/p2c/p2c.go:176","message":"Service selected by P2C: 10.0.1.4"}
{"DownstreamStatus":200,"Duration":11626629,"RequestHost":"beta.myorg","RequestMethod":"GET","RequestPath":"/status","RetryAttempts":0,"downstream_Content-Type":"application/json;charset=UTF-8","downstream_X-Ausername":"anonymous","level":"info","msg":"","origin_Content-Type":"application/json;charset=UTF-8","origin_X-Ausername":"anonymous","time":"2025-08-11T12:11:44Z"}

I am not seeing any OriginStatus for these requests

Please use 3 backticks before and after code/config.

Traefik access log in JSON should have some origin attributes:

"OriginContentSize":43, "OriginDuration":18594534, "OriginStatus":200,
"origin_Content-Length":"43", "origin_Content-Type":"application/json; charset=utf-8"

You can try:

accesslog:
  #filepath: /var/log/traefik-access.log
  #bufferingsize: 10
  format: json
  fields:
    defaultmode: keep
    headers:
      defaultmode: keep

The logs with the OriginStatus attributes:

{"ClientAddr":"10.0.0.117:64259","ClientHost":"10.0.0.117","ClientPort":"64259","ClientUsername":"-","DownstreamContentSize":15631,"DownstreamStatus":200,"Duration":357980189,"OriginContentSize":15631,"OriginDuration":357632484,"OriginStatus":200,"Overhead":347705,"RequestAddr":"beta.myorg.com","RequestContentSize":0,"RequestCount":219,"RequestHost":"beta.myorg.com","RequestMethod":"GET","RequestPath":"/api/InventoryStatusAPI/swaggeryml","RequestPort":"-","RequestProtocol":"HTTP/2.0","RequestScheme":"https","RetryAttempts":0,"RouterName":"api@swarm","ServiceAddr":"10.0.1.4:8080","ServiceName":"jira-api@swarm","ServiceURL":"10.0.1.4:8080","StartLocal":"2025-08-11T13:11:13.91284756Z","StartUTC":"2025-08-11T13:11:13.91284756Z","TLSCipher":"TLS_AES_128_GCM_SHA256","TLSVersion":"1.3","downstream_Access-Control-Allow-Credentials":"true","downstream_Access-Control-Allow-Origin":"","downstream_Content-Security-Policy":"sandbox","downstream_Content-Type":"application/yml;charset=UTF-8","downstream_Date":"Mon, 11 Aug 2025 13:11:14 GMT","downstream_Referrer-Policy":"strict-origin-when-cross-origin","downstream_Server-Timing":"threadId;desc=4020","downstream_Strict-Transport-Security":"max-age=31536000","downstream_Vary":"Origin","downstream_X-Anodeid":"jira_node_xh8jw81bw93cde9nnb4i0ie3t","downstream_X-Arequestid":"791x1029x1","downstream_X-Asessionid":"c38aul","downstream_X-Ausername":"admin","downstream_X-Content-Type-Options":"nosniff","downstream_X-Seraph-Loginreason":"OK","downstream_X-Xss-Protection":"1; mode=block","entryPointName":"https","level":"info","msg":"","origin_Access-Control-Allow-Credentials":"true","origin_Access-Control-Allow-Origin":"","origin_Content-Security-Policy":"sandbox","origin_Content-Type":"application/yml;charset=UTF-8","origin_Date":"Mon, 11 Aug 2025 13:11:14 GMT","origin_Referrer-Policy":"strict-origin-when-cross-origin","origin_Server-Timing":"threadId;desc=4020","origin_Strict-Transport-Security":"max-age=31536000","origin_Vary":"Origin","origin_X-Anodeid":"jira_node_xh8jw81bw93cde9nnb4i0ie3t","origin_X-Arequestid":"791x1029x1","origin_X-Asessionid":"c38aul","origin_X-Ausername":"admin","origin_X-Content-Type-Options":"nosniff","origin_X-Seraph-Loginreason":"OK","origin_X-Xss-Protection":"1; mode=block","request_Accept":"/","request_Accept-Encoding":"gzip, deflate, br, zstd","request_Accept-Language":"en-US,en;q=0.9","request_Cookie":"_gcl_au=1.1.1663720694.1747241802; _ga=GA1.1.156892064.1747241799; hubspotutk=a28a4be7fae47de3779ce78a1fc9a3d7; __hs_cookie_cat_pref=1:true,2:true,3:true; _fbp=fb.1.1747241802019.291581449209961923; _clck=15ezxfa%7C2%7Cfxf%7C0%7C1960; _uetvid=6722858030e411f0bb49bb113f71cf87; __hstc=52561079.a28a4be7fae47de3779ce78a1fc9a3d7.1747241799809.1751553455349.1751996236568.5; _ga_2J3K2S79R7=GS2.1.s1752005760$o6$g0$t1752005760$j60$l0$h0; jirastickya=2334522489e1bd0d; JSESSIONID=12CF64BA3066EA1E2CE12CA982179788; atlassian.xsrf.token=BS7C-LT0A-DSIW-M1IT_fbeaad1d56fed37bda67bc66021bc73f88c93162_lin; sr-selectedScriptRoot=/var/atlassian/application-data/jira-shared/scripts","request_Priority":"u=1, i","request_Referer":"beta.myorg.com/rest/scriptrunner/latest/custom/InventoryStatusAPI","request_Sec-Ch-Ua":""Not;A=Brand";v="99", "Microsoft Edge";v="139", "Chromium";v="139"","request_Sec-Ch-Ua-Mobile":"?0","request_Sec-Ch-Ua-Platform":""Windows"","request_Sec-Fetch-Dest":"empty","request_Sec-Fetch-Mode":"cors","request_Sec-Fetch-Site":"same-origin","request_User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36 Edg/139.0.0.0","request_X-Atlassian-Token":"no-check","request_X-Forwarded-Host":"beta.myorg.com","request_X-Forwarded-Port":"443","request_X-Forwarded-Proto":"https","request_X-Forwarded-Server":"3a29ff62d744","request_X-Real-Ip":"10.0.0.117","request_X-Replaced-Path":"/api/InventoryStatusAPI/swaggeryml","time":"2025-08-11T13:11:14Z"}

It seems request_Cookie is set correctly.

I quickly tested, seems to work for me, even when calling https://whoami.example/abc/def.yml.

services:
  traefik:
    image: traefik:v3.5
    hostname: '{{.Node.Hostname}}'
    ports:
      # listen on host ports without ingress network
      - target: 80
        published: 80
        protocol: tcp
        mode: host
      - target: 443
        published: 443
        protocol: tcp
        mode: host
    networks:
      - proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /var/log:/var/log
      - letsencrypt:/letsencrypt
    command:
      - --api.dashboard=true
      - --log.level=DEBUG
      #- --log.filepath=/var/log/traefik.log
      - --accesslog=true
      #- --accesslog.filepath=/var/log/traefik-access.log
      - --accesslog.format=json
      - --accesslog.fields.defaultmode=keep
      - --accesslog.fields.headers.defaultmode=keep
      - --providers.swarm.network=proxy
      - --providers.swarm.exposedByDefault=false
      - --entrypoints.web.address=:80
      - --entrypoints.web.http.redirections.entrypoint.to=websecure
      - --entryPoints.web.http.redirections.entrypoint.scheme=https
      - --entrypoints.websecure.address=:443
      - --entrypoints.websecure.asDefault=true
      - --entrypoints.websecure.http.tls.certresolver=myresolver
      - --certificatesresolvers.myresolver.acme.tlschallenge=true
      - --certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json
    deploy:
      mode: global
      placement:
        constraints:
          - node.role==manager
      labels:
        - traefik.enable=true
        - traefik.http.routers.mydashboard.rule=Host(`traefik.example.com`)
        - traefik.http.routers.mydashboard.service=api@internal
        - traefik.http.routers.mydashboard.middlewares=myauth
        - traefik.http.services.mydashboard.loadbalancer.server.port=1337
        - traefik.http.middlewares.myauth.basicauth.users=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/

  whoami:
    image: traefik/whoami:v1.10
    #hostname: '{{.Node.Hostname}}'
    networks:
      - proxy
    deploy:
      replicas: 4
      #mode: global
      labels:
        - traefik.enable=true
        - traefik.http.routers.whoami.rule=Host(`whoami.example.com`) || PathPrefix(`/whoami`)
        - traefik.http.services.whoami.loadbalancer.server.port=80

        - traefik.http.services.whoami.loadbalancer.sticky.cookie=true
        - traefik.http.services.whoami.loadbalancer.sticky.cookie.name=mysticky
        - traefik.http.services.whoami.loadbalancer.sticky.cookie.secure=true
        - traefik.http.services.whoami.loadbalancer.sticky.cookie.samesite=none
        - traefik.http.services.whoami.loadbalancer.sticky.cookie.httponly=true
        - traefik.http.services.whoami.loadbalancer.sticky.cookie.maxage=7200
        #- traefik.http.services.whoami.loadbalancer.strategy=p2c

networks:
  proxy:
    name: proxy
    driver: overlay
    attachable: true

volumes:
  letsencrypt:
    name: letsencrypt

Is it hitting the same node or is it hitting different nodes on your end? Can you tell?

I know I sad that the parent page is not experiencing this problem, but actually if a try long enough I can see the behavior on that page too.

So clearly something is not working properly in regards to session stickiness.

My traefik configuration currently looks like this:

traefik:
command:

  • "--providers.swarm=true"
  • "--providers.swarm.endpoint=unix:///var/run/docker.sock"
  • "--providers.swarm.exposedByDefault=false"
  • "--providers.swarm.watch"
  • "--providers.swarm.allowEmptyServices=true"
  • "--entrypoints.http.address=:80"
  • "--entrypoints.https.address=:443"
  • "--entrypoints.metrics.address=:8082"
  • "--entryPoints.https.asDefault=true"
  • "--certificatesresolvers.myorg.acme.httpchallenge=true"
  • "--certificatesresolvers.myorg.acme.httpchallenge.entrypoint=http"
  • "--certificatesresolvers.myorg.acme.storage=acme.json"
  • "--certificatesresolvers.myorg.acme.caserver=https://intermediate.myorg.local/acme/myorg/directory"
  • "--ping"
  • "--log"
  • "--log.level=DEBUG"
  • "--log.format=json"
  • "--api"
  • "--api.dashboard"
  • "--api.insecure"
  • "--metrics.prometheus=true"
  • "--metrics.prometheus.entrypoint=metrics"
  • "--metrics.prometheus.buckets=0.1,0.3,1.2,5.0"
  • "--metrics.prometheus.addEntryPointsLabels=true"
  • "--metrics.prometheus.addServicesLabels=true"
  • "--metrics.prometheus.addrouterslabels=true"
  • "--accessLog.format=json"
  • "--accesslog.bufferingsize=100"
  • "--accessLog.filters.statusCodes=200-201,400,500"
  • "--accessLog.filters.retryAttempts=true"
  • "--accessLog.filters.minDuration=400ms"
  • "--accesslog.fields.defaultmode=keep"
  • "--accesslog.fields.names.RequestHost=keep"
  • "--accesslog.fields.names.RequestMethod=keep"
  • "--accesslog.fields.names.RequestPath=keep"
  • "--accesslog.fields.names.DownstreamStatus=keep"
  • "--accesslog.fields.names.Duration=keep"
  • "--accesslog.fields.names.RetryAttempts=keep"
  • "--accesslog.fields.headers.defaultmode=keep"
  • "--accesslog.fields.headers.names.Content-Type=keep"
  • "--accesslog.fields.headers.names.X-Ausername=keep"
  • "--experimental.plugins.blockpath.moduleName= GitHub - traefik/plugin-blockpath: Block Path is a middleware plugin for Traefik which sends an HTTP 403 Forbidden response when the requested HTTP path matches one the configured regular expressions "
  • "--experimental.plugins.blockpath.version=v0.2.1"
    deploy:
    labels:
  • traefik.enable=true
  • traefik.swarm.network=frontend
  • traefik.http.middlewares.dashboard-redirect-secure.redirectscheme.scheme=https
  • traefik.http.routers.dashboard-secure.entrypoints=https
  • traefik.http.routers.dashboard-secure.rule=Host(${TRAEFIK_DNS_NAME})
  • traefik.http.routers.dashboard-secure.tls.domains[0].main=${TRAEFIK_DNS_NAME}
  • traefik.http.routers.dashboard-secure.tls=true
  • traefik.http.routers.dashboard-secure.tls.certresolver=myorg
  • traefik.http.routers.dashboard.entrypoints=http
  • traefik.http.routers.dashboard.middlewares=dashboard-redirect-secure
  • traefik.http.routers.dashboard.rule=Host(${TRAEFIK_DNS_NAME})
  • traefik.http.services.dashboard-secure.loadbalancer.server.port=8080
  • traefik.http.middlewares.loki-auth.basicauth.users=${MONITORING_AUTH_USER}:${MONITORING_AUTH_HASHED_PASSWORD}
    placement:
    constraints:
  • node.role == manager
    image: ${REGISTRY_SERVER}/myorg_traefik
    volumes:
  • /var/run/docker.sock:/var/run/docker.sock

PLEASE use 3 backticks before and after code/config. Or select and use </> button.

I am passing the traefik configuration in my docker-compose.yml. What I’ve pasted above works. The dots are generated by the text formatter on this page. Originally they were dashes

With the vertical bar to the left it's "quoted", not "preformatted".

For debugging I highly recommend to disable bufferingsize.

Also I would disable all the massive customization. How do you want to see things going wrong when filtering for certain http status codes? When using 4 year old plugins?

Please bear with me! I am new to traefik and the configs I am playing with, were put in place by someone else.

The plugin is not used for these urls. It only applies to

  • traefik.http.middlewares.deny_analytics.plugin.blockpath.regex=^/rest/analytics/1.0/publish/bulk(.*)

After disabling the bufferingsize and removing the filtering I see this:

{"ClientAddr":"10.0.0.4:56004","ClientHost":"10.0.0.4","ClientPort":"56004","ClientUsername":"-","DownstreamContentSize":45308,"DownstreamStatus":401,"Duration":31308889,"OriginContentSize":45308,"OriginDuration":31019085,"OriginStatus":401,"Overhead":289804,"RequestAddr":"beta.myorg.com","RequestContentSize":0,"RequestCount":241,"RequestHost":"beta.myorg.com","RequestMethod":"GET","RequestPath":"/api/InventoryStatusAPI/swaggeryml","RequestPort":"-","RequestProtocol":"HT../2.0","RequestScheme":"ht..s","RetryAttempts":0,"RouterName":"api@swarm","ServiceAddr":"10.0.1.15","ServiceName":"jira-api@swarm","ServiceURL":"10.0.1.15","StartLocal":"2025-08-11T14:39:02.954290059Z","StartUTC":"2025-08-11T14:39:02.954290059Z","TLSCipher":"TLS_AES_128_GCM_SHA256","TLSVersion":"1.3","downstream_Access-Control-Allow-Credentials":"true","downstream_Access-Control-Allow-Origin":"*","downstream_Content-Type":"text/html;charset=UTF-8","downstream_Date":"Mon, 11 Aug 2025 14:39:02 GMT","downstream_Referrer-Policy":"strict-origin-when-cross-origin","downstream_Server-Timing":"threadId;desc=1529","downstream_Strict-Transport-Security":"max-age=31536000","downstream_Vary":"Origin","downstream_Www-Authenticate":"OAuth realm=\"beta.myorg.com\"","downstream_X-Anodeid":"jira_node_yc7i6cx801xev7m3rh74cdhlg","downstream_X-Arequestid":"879x1774x1","downstream_X-Content-Type-Options":"nosniff","downstream_X-Xss-Protection":"1; mode=block","entryPointName":"ht...","level":"info","msg":"","origin_Access-Control-Allow-Credentials":"true","origin_Access-Control-Allow-Origin":"*","origin_Content-Type":"text/html;charset=UTF-8","origin_Date":"Mon, 11 Aug 2025 14:39:02 GMT","origin_Referrer-Policy":"strict-origin-when-cross-origin","origin_Server-Timing":"threadId;desc=1529","origin_Strict-Transport-Security":"max-age=31536000","origin_Vary":"Origin","origin_Www-Authenticate":"OAuth realm=\"beta.myorg.com\"","origin_X-Anodeid":"jira_node_yc7i6cx801xev7m3rh74cdhlg","origin_X-Arequestid":"879x1774x1","origin_X-Content-Type-Options":"nosniff","origin_X-Xss-Protection":"1; mode=block","request_Accept":"*/*","request_Accept-Encoding":"gzip, deflate, br, zstd","request_Accept-Language":"en-US,en;q=0.9","request_Cookie":"_gcl_au=1.1.1663720694.1747241802; _ga=GA1.1.156892064.1747241799; hubspotutk=a28a4be7fae47de3779ce78a1fc9a3d7; __hs_cookie_cat_pref=1:true,2:true,3:true; _fbp=fb.1.1747241802019.291581449209961923; _clck=15ezxfa%7C2%7Cfxf%7C0%7C1960; _uetvid=6722858030e411f0bb49bb113f71cf87; __hstc=52561079.a28a4be7fae47de3779ce78a1fc9a3d7.1747241799809.1751553455349.1751996236568.5; _ga_2J3K2S79R7=GS2.1.s1752005760$o6$g0$t1752005760$j60$l0$h0; sr-selectedScriptRoot=/var/atlassian/application-data/jira-shared/scripts; jirastickya=2334522489e1bd0d; JSESSIONID=23077D1804BAF3B80F1617736438A76F; atlassian.xsrf.token=BS7C-LT0A-DSIW-M1IT_5d5c40ca0531bdf00fe8e77c8a464529bf21e28c_lin","request_Priority":"u=1, i","request_Referer":"beta.myorg.com/api/InventoryStatusAPI","request_Sec-Ch-Ua":"\"Not;A=Brand\";v=\"99\", \"Microsoft Edge\";v=\"139\", \"Chromium\";v=\"139\"","request_Sec-Ch-Ua-Mobile":"?0","request_Sec-Ch-Ua-Platform":"\"Windows\"","request_Sec-Fetch-Dest":"empty","request_Sec-Fetch-Mode":"cors","request_Sec-Fetch-Site":"same-origin","request_User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36 Edg/139.0.0.0","request_X-Atlassian-Token":"no-check","request_X-Forwarded-Host":"beta.myorg.com","request_X-Forwarded-Port":"443","request_X-Forwarded-Proto":"htt..","request_X-Forwarded-Server":"4c5d87556b66","request_X-Real-Ip":"10.0.0.4","request_X-Replaced-Path":"/api/InventoryStatusAPI/swaggeryml","time":"2025-08-11T14:39:02Z"}

And this is a 200 request. The ServiceAddr is clearly different. 10.0.1.4:8080 (200) vs 10.0.1.15:8080 (401)

{"ClientAddr":"10.0.0.3:56722","ClientHost":"10.0.0.3","ClientPort":"56722","ClientUsername":"-","DownstreamContentSize":15631,"DownstreamStatus":200,"Duration":297055786,"OriginContentSize":15631,"OriginDuration":296806783,"OriginStatus":200,"Overhead":249003,"RequestAddr":"beta.myorg.com","RequestContentSize":0,"RequestCount":523,"RequestHost":"beta.myorg.com","RequestMethod":"GET","RequestPath":"/api/InventoryStatusAPI/swaggeryml","RequestPort":"-","RequestProtocol":"HTTP/2.0","RequestScheme":"https","RetryAttempts":0,"RouterName":"api@swarm","ServiceAddr":"10.0.1.4:8080","ServiceName":"jira-api@swarm","ServiceURL":"http://10.0.1.4:8080","StartLocal":"2025-08-11T14:50:40.154224981Z","StartUTC":"2025-08-11T14:50:40.154224981Z","TLSCipher":"TLS_AES_128_GCM_SHA256","TLSVersion":"1.3","downstream_Access-Control-Allow-Credentials":"true","downstream_Access-Control-Allow-Origin":"*","downstream_Content-Security-Policy":"sandbox","downstream_Content-Type":"application/yml;charset=UTF-8","downstream_Date":"Mon, 11 Aug 2025 14:50:40 GMT","downstream_Referrer-Policy":"strict-origin-when-cross-origin","downstream_Server-Timing":"threadId;desc=3742","downstream_Strict-Transport-Security":"max-age=31536000","downstream_Vary":"Origin","downstream_X-Anodeid":"jira_node_xh8jw81bw93cde9nnb4i0ie3t","downstream_X-Arequestid":"890x1999x2","downstream_X-Asessionid":"1yclyng","downstream_X-Ausername":"admin","downstream_X-Content-Type-Options":"nosniff","downstream_X-Seraph-Loginreason":"OK","downstream_X-Xss-Protection":"1; mode=block","entryPointName":"https","level":"info","msg":"","origin_Access-Control-Allow-Credentials":"true","origin_Access-Control-Allow-Origin":"*","origin_Content-Security-Policy":"sandbox","origin_Content-Type":"application/yml;charset=UTF-8","origin_Date":"Mon, 11 Aug 2025 14:50:40 GMT","origin_Referrer-Policy":"strict-origin-when-cross-origin","origin_Server-Timing":"threadId;desc=3742","origin_Strict-Transport-Security":"max-age=31536000","origin_Vary":"Origin","origin_X-Anodeid":"jira_node_xh8jw81bw93cde9nnb4i0ie3t","origin_X-Arequestid":"890x1999x2","origin_X-Asessionid":"1yclyng","origin_X-Ausername":"admin","origin_X-Content-Type-Options":"nosniff","origin_X-Seraph-Loginreason":"OK","origin_X-Xss-Protection":"1; mode=block","request_Accept":"*/*","request_Accept-Encoding":"gzip, deflate, br, zstd","request_Accept-Language":"en-US,en;q=0.9","request_Cookie":"_gcl_au=1.1.1663720694.1747241802; _ga=GA1.1.156892064.1747241799; hubspotutk=a28a4be7fae47de3779ce78a1fc9a3d7; __hs_cookie_cat_pref=1:true,2:true,3:true; _fbp=fb.1.1747241802019.291581449209961923; _clck=15ezxfa%7C2%7Cfxf%7C0%7C1960; _uetvid=6722858030e411f0bb49bb113f71cf87; __hstc=52561079.a28a4be7fae47de3779ce78a1fc9a3d7.1747241799809.1751553455349.1751996236568.5; _ga_2J3K2S79R7=GS2.1.s1752005760$o6$g0$t1752005760$j60$l0$h0; sr-selectedScriptRoot=/var/atlassian/application-data/jira-shared/scripts; jirastickya=2334522489e1bd0d; JSESSIONID=23077D1804BAF3B80F1617736438A76F; atlassian.xsrf.token=BS7C-LT0A-DSIW-M1IT_5d5c40ca0531bdf00fe8e77c8a464529bf21e28c_lin","request_Priority":"u=1, i","request_Referer":"https://beta.myorg.com/api/InventoryStatusAPI","request_Sec-Ch-Ua":"\"Not;A=Brand\";v=\"99\", \"Microsoft Edge\";v=\"139\", \"Chromium\";v=\"139\"","request_Sec-Ch-Ua-Mobile":"?0","request_Sec-Ch-Ua-Platform":"\"Windows\"","request_Sec-Fetch-Dest":"empty","request_Sec-Fetch-Mode":"cors","request_Sec-Fetch-Site":"same-origin","request_User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36 Edg/139.0.0.0","request_X-Atlassian-Token":"no-check","request_X-Forwarded-Host":"beta.myorg.com","request_X-Forwarded-Port":"443","request_X-Forwarded-Proto":"https","request_X-Forwarded-Server":"4c5d87556b66","request_X-Real-Ip":"10.0.0.3","request_X-Replaced-Path":"/api/InventoryStatusAPI/swaggeryml","time":"2025-08-11T14:50:40Z"}

Have you tried to remove loadbalancer.strategy? Maybe that interferes.

No. I am currently using: - traefik.http.services.jira-secure.loadbalancer.strategy=p2c

I will try to remove it and see how it behaves.

Same behavior with no strategy set. I have also tries to set the strategy to WRR but again, it did not worked.

@bluepuma77 I have found my problem. There was an URL rewrite configuration on my jira service which was not configured for sticky session. After adding sticky session configs to that section, it started to work properly. Thanks for your help!