easyhaproxy 6.1.0__tar.gz → 6.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/PKG-INFO +1 -1
  2. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/RELEASE.md +2 -1
  3. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/docker-compose.yml +1 -1
  4. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/kubernetes/easyhaproxy-clusterip.yml +13 -13
  5. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/kubernetes/easyhaproxy-daemonset.yml +11 -11
  6. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/kubernetes/easyhaproxy-nodeport.yml +13 -13
  7. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/getting-started/kubernetes.md +3 -3
  8. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/getting-started/swarm.md +1 -1
  9. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/guides/acme.md +1 -1
  10. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/guides/ssl.md +1 -1
  11. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/plugins/fastcgi.md +62 -15
  12. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/Chart.yaml +2 -2
  13. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/templates/deployment.yaml +3 -0
  14. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/values.yaml +13 -1
  15. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/pyproject.toml +1 -1
  16. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/builtin/fastcgi.py +88 -4
  17. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_plugins.py +126 -1
  18. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-acme.yml +1 -1
  19. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-portainer.yml +1 -1
  20. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/cloudflare.yml +1 -1
  21. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/ip-whitelist.yml +1 -1
  22. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/jwt-validator.yml +1 -1
  23. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/plugins-combined.yml +1 -1
  24. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/service.yml +1 -1
  25. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/service_tls.yml +1 -1
  26. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/test_docker_compose.py +1 -1
  27. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/uv.lock +1 -1
  28. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/.dockerignore +0 -0
  29. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/.github/FUNDING.yml +0 -0
  30. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/.github/dependabot.yml +0 -0
  31. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/.github/workflows/build.yml +0 -0
  32. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/.gitignore +0 -0
  33. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/.python-version +0 -0
  34. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/.run/pytest in tests.run.xml +0 -0
  35. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/.vscode/launch.json +0 -0
  36. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/.vscode/settings.json +0 -0
  37. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/CONTRIBUTING.md +0 -0
  38. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/LICENSE +0 -0
  39. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/Makefile +0 -0
  40. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/README.md +0 -0
  41. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/build-multiarch.sh +0 -0
  42. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/Dockerfile +0 -0
  43. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/assets/entrypoint.sh +0 -0
  44. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/assets/etc/easyhaproxy/haproxy/conf.d/README.md +0 -0
  45. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/400.http +0 -0
  46. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/403.http +0 -0
  47. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/408.http +0 -0
  48. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/500.http +0 -0
  49. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/502.http +0 -0
  50. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/503.http +0 -0
  51. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/assets/etc/easyhaproxy/haproxy/errors-custom/504.http +0 -0
  52. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/docker/assets/etc/easyhaproxy/www/dashboard.html +0 -0
  53. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/deploy/kubernetes/README.md +0 -0
  54. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/concepts/_category_.json +0 -0
  55. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/concepts/index.md +0 -0
  56. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/concepts/limitations.md +0 -0
  57. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/dashboard.png +0 -0
  58. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/dashboard_login.png +0 -0
  59. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/dashboard_thumbnail.png +0 -0
  60. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/easyhaproxy_digitalocean.png +0 -0
  61. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/easyhaproxy_docker.png +0 -0
  62. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/easyhaproxy_dokku.png +0 -0
  63. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/easyhaproxy_helm.png +0 -0
  64. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/easyhaproxy_kubernetes.png +0 -0
  65. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/easyhaproxy_logo.png +0 -0
  66. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/easyhaproxy_microk8s.png +0 -0
  67. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/easyhaproxy_static.png +0 -0
  68. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/easyhaproxy_swarm.png +0 -0
  69. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/getting-started/_category_.json +0 -0
  70. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/getting-started/docker.md +0 -0
  71. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/getting-started/index.md +0 -0
  72. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/getting-started/native.md +0 -0
  73. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/getting-started/static.md +0 -0
  74. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/guides/_category_.json +0 -0
  75. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/guides/dashboard.md +0 -0
  76. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/guides/digitalocean.md +0 -0
  77. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/guides/dokku.md +0 -0
  78. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/guides/helm.md +0 -0
  79. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/guides/microk8s.md +0 -0
  80. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/guides/plugin-development.md +0 -0
  81. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/guides/plugins.md +0 -0
  82. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/icons.xcf +0 -0
  83. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/logo.png +0 -0
  84. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/logo.xcf +0 -0
  85. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/_category_.json +0 -0
  86. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/cli.md +0 -0
  87. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/container-labels.md +0 -0
  88. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/environment-variables.md +0 -0
  89. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/helm.md +0 -0
  90. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/other.md +0 -0
  91. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/plugins/_category_.json +0 -0
  92. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/plugins/cleanup.md +0 -0
  93. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/plugins/cloudflare.md +0 -0
  94. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/plugins/deny-pages.md +0 -0
  95. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/plugins/ip-whitelist.md +0 -0
  96. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/plugins/jwt-validator.md +0 -0
  97. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/reference/volumes.md +0 -0
  98. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/video-docker-ssl.png +0 -0
  99. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/video-docker.png +0 -0
  100. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/video-kubernetes-letsencrypt.png +0 -0
  101. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/video-kubernetes.png +0 -0
  102. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/video-static.png +0 -0
  103. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/docs/video-tcp-mysql.png +0 -0
  104. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/.helmignore +0 -0
  105. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/LICENSE +0 -0
  106. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/README.md +0 -0
  107. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/templates/_helpers.tpl +0 -0
  108. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/templates/clusterrole.yaml +0 -0
  109. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/templates/clusterrolebinding.yaml +0 -0
  110. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/templates/ingressclass.yaml +0 -0
  111. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/templates/service.yaml +0 -0
  112. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/templates/serviceaccount.yaml +0 -0
  113. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/helm/easyhaproxy/values.schema.json +0 -0
  114. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/scripts/bump-version.sh +0 -0
  115. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/easyhaproxy/__init__.py +0 -0
  116. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/easyhaproxy/main.py +0 -0
  117. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/easymapping/__init__.py +0 -0
  118. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/easymapping/config_generator.py +0 -0
  119. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/easymapping/label_handler.py +0 -0
  120. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/functions/__init__.py +0 -0
  121. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/functions/certbot.py +0 -0
  122. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/functions/consts.py +0 -0
  123. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/functions/container_env.py +0 -0
  124. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/functions/filter.py +0 -0
  125. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/functions/functions.py +0 -0
  126. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/functions/haproxy.py +0 -0
  127. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/functions/loggers.py +0 -0
  128. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/__init__.py +0 -0
  129. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/builtin/__init__.py +0 -0
  130. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/builtin/cleanup.py +0 -0
  131. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/builtin/cloudflare.py +0 -0
  132. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/builtin/deny_pages.py +0 -0
  133. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/builtin/ip_whitelist.py +0 -0
  134. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/builtin/jwt_validator.py +0 -0
  135. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/interface.py +0 -0
  136. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/manager.py +0 -0
  137. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/plugins/types.py +0 -0
  138. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/processor/__init__.py +0 -0
  139. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/processor/docker.py +0 -0
  140. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/processor/interface.py +0 -0
  141. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/processor/kubernetes.py +0 -0
  142. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/processor/static.py +0 -0
  143. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/processor/swarm.py +0 -0
  144. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/templates/bind.j2 +0 -0
  145. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/templates/frontend-mode-http.j2 +0 -0
  146. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/templates/frontend-mode-tcp.j2 +0 -0
  147. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/templates/haproxy.cfg.j2 +0 -0
  148. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/templates/ssl_default.j2 +0 -0
  149. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/templates/ssl_loose.j2 +0 -0
  150. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/src/templates/ssl_strict.j2 +0 -0
  151. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/__init__.py +0 -0
  152. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/conftest.py +0 -0
  153. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/docker.txt +0 -0
  154. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/no-services.txt +0 -0
  155. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/services-fcgi.txt +0 -0
  156. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/services-letsencrypt.txt +0 -0
  157. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/services-multi-containers.txt +0 -0
  158. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/services-multiple-hosts.txt +0 -0
  159. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/services-redirect-ssl.txt +0 -0
  160. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/services-tcp.txt +0 -0
  161. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/services.txt +0 -0
  162. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/ssl-loose.txt +0 -0
  163. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/ssl-strict.txt +0 -0
  164. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/static-cors.txt +0 -0
  165. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/expected/static.txt +0 -0
  166. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/00_haproxy.cfg +0 -0
  167. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/10_haproxy.cfg +0 -0
  168. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/no-services +0 -0
  169. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/run_bash.sh +0 -0
  170. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services +0 -0
  171. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-changed-label +0 -0
  172. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-clone-to-ssl +0 -0
  173. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-fcgi +0 -0
  174. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-letsencrypt +0 -0
  175. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-multi-containers +0 -0
  176. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-multiple-hosts +0 -0
  177. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-redirect-ssl +0 -0
  178. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-tcp +0 -0
  179. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-with-cloudflare +0 -0
  180. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-with-deny-pages +0 -0
  181. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-with-ip-whitelist +0 -0
  182. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-with-jwt-validator +0 -0
  183. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/services-with-multiple-plugins +0 -0
  184. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/static.yml +0 -0
  185. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/static_cors.yml +0 -0
  186. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/fixtures/static_multi_domain.yml +0 -0
  187. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_certbot.py +0 -0
  188. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_certbot_haproxy_config.py +0 -0
  189. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_containerenv.py +0 -0
  190. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_daemonize.py +0 -0
  191. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_docker.py +0 -0
  192. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_functions.py +0 -0
  193. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_kubernetes_processor.py +0 -0
  194. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_labels.py +0 -0
  195. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_parser.py +0 -0
  196. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests/test_static.py +0 -0
  197. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/conftest.py +0 -0
  198. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/AGENTS.md +0 -0
  199. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/README.md +0 -0
  200. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-acme-e2e.yml +0 -0
  201. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-changed-label.yml +0 -0
  202. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-cloudflare.yml +0 -0
  203. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-ip-whitelist.yml +0 -0
  204. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-jwt-validator.yml +0 -0
  205. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-multi-containers.yml +0 -0
  206. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-php-fpm.yml +0 -0
  207. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-plugins-combined.yml +0 -0
  208. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-portainer-app-example.yml +0 -0
  209. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose-proxy-headers.yml +0 -0
  210. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/docker-compose.yml +0 -0
  211. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/pebble-config.json +0 -0
  212. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/php-app/README.md +0 -0
  213. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/php-app/index.php +0 -0
  214. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/php-app/info.php +0 -0
  215. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/docker/php-app/test-path-info.php +0 -0
  216. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/fixtures/header-echo/Dockerfile +0 -0
  217. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/fixtures/header-echo/README.md +0 -0
  218. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/fixtures/header-echo/server.py +0 -0
  219. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/generate-keys.sh +0 -0
  220. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/.gitignore +0 -0
  221. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/README.md +0 -0
  222. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/jwt-validator-secret-example.yml +0 -0
  223. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/setup-cluster.sh +0 -0
  224. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/kubernetes/teardown-cluster.sh +0 -0
  225. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/static/README.md +0 -0
  226. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/static/conf/config-basic.yml +0 -0
  227. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/static/conf/config-certbot.yml +0 -0
  228. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/static/conf/config-deny-pages.yml +0 -0
  229. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/static/conf/config-jwt-validator.yml +0 -0
  230. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/static/docker-compose.yml +0 -0
  231. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/swarm/README.md +0 -0
  232. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/swarm/cloudflare.yml +0 -0
  233. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/swarm/easyhaproxy.yml +0 -0
  234. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/swarm/ip-whitelist.yml +0 -0
  235. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/swarm/jwt-validator.yml +0 -0
  236. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/swarm/plugins-combined.yml +0 -0
  237. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/swarm/portainer.yml +0 -0
  238. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/swarm/services.yml +0 -0
  239. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/test_kubernetes.py +0 -0
  240. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/test_proxy_headers.py +0 -0
  241. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/test_static.py +0 -0
  242. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/test_swarm.py +0 -0
  243. {easyhaproxy-6.1.0 → easyhaproxy-6.1.1}/tests_e2e/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: easyhaproxy
3
- Version: 6.1.0
3
+ Version: 6.1.1
4
4
  Summary: HAProxy label based routing with service discovery for Docker, Swarm, and Kubernetes
5
5
  License: MIT License
6
6
 
@@ -54,7 +54,7 @@ EasyHAProxy follows [Semantic Versioning](https://semver.org/):
54
54
  - **MINOR**: New features, plugin additions, backward-compatible changes
55
55
  - **PATCH**: Bug fixes, documentation updates, minor improvements
56
56
 
57
- **Current Version:** `6.1.0` (as of Chart.yaml)
57
+ **Current Version:** `6.1.1` (as of Chart.yaml)
58
58
 
59
59
  ## Automated Release (Recommended)
60
60
 
@@ -329,6 +329,7 @@ helm show chart byjg/easyhaproxy
329
329
 
330
330
  | Version | Release Date | Type | Highlights |
331
331
  |---------|--------------|-------|---------------------------------------------------------------------------------------------------------------------------------------|
332
+ | 6.1.1 | 2026-06-25 | Patch | Add pass_headers support to FastCGI plugin, fix flaky ACME e2e test timeout |
332
333
  | 6.1.0 | 2026-06-24 | Minor | FastCGI protocol support, certbot sidecar plugin, dependency updates |
333
334
  | 6.0.1 | 2026-02-23 | Patch | HAProxy dashboard, real-time monitoring dashboard with live traffic charts, ACME e2e test fixes |
334
335
  | 6.0.0 | 2026-XX-XX | Major | Python module refactoring (one-class-per-file), IngressClassName support (spec.ingressClassName + deprecated annotation fallback), modernized build system (uv/pyproject.toml), improved version management and release tooling, GitHub Actions workflow_dispatch push control |
@@ -1,6 +1,6 @@
1
1
  services:
2
2
  easyhaproxy:
3
- image: byjg/easy-haproxy:6.1.0
3
+ image: byjg/easy-haproxy:6.1.1
4
4
  volumes:
5
5
  - /var/run/docker.sock:/var/run/docker.sock
6
6
  - certs_certbot:/etc/easyhaproxy/certs/certbot
@@ -6,10 +6,10 @@ metadata:
6
6
  name: ingress-easyhaproxy
7
7
  namespace: easyhaproxy
8
8
  labels:
9
- helm.sh/chart: easyhaproxy-2.0.3
9
+ helm.sh/chart: easyhaproxy-2.0.4
10
10
  app.kubernetes.io/name: easyhaproxy
11
11
  app.kubernetes.io/instance: ingress
12
- app.kubernetes.io/version: "6.1.0"
12
+ app.kubernetes.io/version: "6.1.1"
13
13
  app.kubernetes.io/managed-by: Helm
14
14
  ---
15
15
  # Source: easyhaproxy/templates/clusterrole.yaml
@@ -19,10 +19,10 @@ metadata:
19
19
  name: ingress-easyhaproxy
20
20
  namespace: easyhaproxy
21
21
  labels:
22
- helm.sh/chart: easyhaproxy-2.0.3
22
+ helm.sh/chart: easyhaproxy-2.0.4
23
23
  app.kubernetes.io/name: easyhaproxy
24
24
  app.kubernetes.io/instance: ingress
25
- app.kubernetes.io/version: "6.1.0"
25
+ app.kubernetes.io/version: "6.1.1"
26
26
  app.kubernetes.io/managed-by: Helm
27
27
  rules:
28
28
  - apiGroups:
@@ -83,10 +83,10 @@ metadata:
83
83
  name: ingress-easyhaproxy
84
84
  namespace: easyhaproxy
85
85
  labels:
86
- helm.sh/chart: easyhaproxy-2.0.3
86
+ helm.sh/chart: easyhaproxy-2.0.4
87
87
  app.kubernetes.io/name: easyhaproxy
88
88
  app.kubernetes.io/instance: ingress
89
- app.kubernetes.io/version: "6.1.0"
89
+ app.kubernetes.io/version: "6.1.1"
90
90
  app.kubernetes.io/managed-by: Helm
91
91
  roleRef:
92
92
  apiGroup: rbac.authorization.k8s.io
@@ -105,10 +105,10 @@ metadata:
105
105
  name: ingress-easyhaproxy
106
106
  namespace: easyhaproxy
107
107
  labels:
108
- helm.sh/chart: easyhaproxy-2.0.3
108
+ helm.sh/chart: easyhaproxy-2.0.4
109
109
  app.kubernetes.io/name: easyhaproxy
110
110
  app.kubernetes.io/instance: ingress
111
- app.kubernetes.io/version: "6.1.0"
111
+ app.kubernetes.io/version: "6.1.1"
112
112
  app.kubernetes.io/managed-by: Helm
113
113
  annotations:
114
114
  {}
@@ -140,10 +140,10 @@ metadata:
140
140
  name: ingress-easyhaproxy
141
141
  namespace: easyhaproxy
142
142
  labels:
143
- helm.sh/chart: easyhaproxy-2.0.3
143
+ helm.sh/chart: easyhaproxy-2.0.4
144
144
  app.kubernetes.io/name: easyhaproxy
145
145
  app.kubernetes.io/instance: ingress
146
- app.kubernetes.io/version: "6.1.0"
146
+ app.kubernetes.io/version: "6.1.1"
147
147
  app.kubernetes.io/managed-by: Helm
148
148
  spec:
149
149
  replicas: 1
@@ -164,7 +164,7 @@ spec:
164
164
  - name: easyhaproxy
165
165
  securityContext:
166
166
  {}
167
- image: "byjg/easy-haproxy:6.1.0"
167
+ image: "byjg/easy-haproxy:6.1.1"
168
168
  imagePullPolicy: Always
169
169
  ports:
170
170
  - name: http
@@ -217,10 +217,10 @@ kind: IngressClass
217
217
  metadata:
218
218
  name: easyhaproxy
219
219
  labels:
220
- helm.sh/chart: easyhaproxy-2.0.3
220
+ helm.sh/chart: easyhaproxy-2.0.4
221
221
  app.kubernetes.io/name: easyhaproxy
222
222
  app.kubernetes.io/instance: ingress
223
- app.kubernetes.io/version: "6.1.0"
223
+ app.kubernetes.io/version: "6.1.1"
224
224
  app.kubernetes.io/managed-by: Helm
225
225
  spec:
226
226
  controller: byjg.com/easyhaproxy
@@ -6,10 +6,10 @@ metadata:
6
6
  name: ingress-easyhaproxy
7
7
  namespace: easyhaproxy
8
8
  labels:
9
- helm.sh/chart: easyhaproxy-2.0.3
9
+ helm.sh/chart: easyhaproxy-2.0.4
10
10
  app.kubernetes.io/name: easyhaproxy
11
11
  app.kubernetes.io/instance: ingress
12
- app.kubernetes.io/version: "6.1.0"
12
+ app.kubernetes.io/version: "6.1.1"
13
13
  app.kubernetes.io/managed-by: Helm
14
14
  ---
15
15
  # Source: easyhaproxy/templates/clusterrole.yaml
@@ -19,10 +19,10 @@ metadata:
19
19
  name: ingress-easyhaproxy
20
20
  namespace: easyhaproxy
21
21
  labels:
22
- helm.sh/chart: easyhaproxy-2.0.3
22
+ helm.sh/chart: easyhaproxy-2.0.4
23
23
  app.kubernetes.io/name: easyhaproxy
24
24
  app.kubernetes.io/instance: ingress
25
- app.kubernetes.io/version: "6.1.0"
25
+ app.kubernetes.io/version: "6.1.1"
26
26
  app.kubernetes.io/managed-by: Helm
27
27
  rules:
28
28
  - apiGroups:
@@ -83,10 +83,10 @@ metadata:
83
83
  name: ingress-easyhaproxy
84
84
  namespace: easyhaproxy
85
85
  labels:
86
- helm.sh/chart: easyhaproxy-2.0.3
86
+ helm.sh/chart: easyhaproxy-2.0.4
87
87
  app.kubernetes.io/name: easyhaproxy
88
88
  app.kubernetes.io/instance: ingress
89
- app.kubernetes.io/version: "6.1.0"
89
+ app.kubernetes.io/version: "6.1.1"
90
90
  app.kubernetes.io/managed-by: Helm
91
91
  roleRef:
92
92
  apiGroup: rbac.authorization.k8s.io
@@ -104,10 +104,10 @@ metadata:
104
104
  name: ingress-easyhaproxy
105
105
  namespace: easyhaproxy
106
106
  labels:
107
- helm.sh/chart: easyhaproxy-2.0.3
107
+ helm.sh/chart: easyhaproxy-2.0.4
108
108
  app.kubernetes.io/name: easyhaproxy
109
109
  app.kubernetes.io/instance: ingress
110
- app.kubernetes.io/version: "6.1.0"
110
+ app.kubernetes.io/version: "6.1.1"
111
111
  app.kubernetes.io/managed-by: Helm
112
112
  spec:
113
113
  selector:
@@ -136,7 +136,7 @@ spec:
136
136
  - name: easyhaproxy
137
137
  securityContext:
138
138
  {}
139
- image: "byjg/easy-haproxy:6.1.0"
139
+ image: "byjg/easy-haproxy:6.1.1"
140
140
  imagePullPolicy: Always
141
141
  ports:
142
142
  - name: http
@@ -189,10 +189,10 @@ kind: IngressClass
189
189
  metadata:
190
190
  name: easyhaproxy
191
191
  labels:
192
- helm.sh/chart: easyhaproxy-2.0.3
192
+ helm.sh/chart: easyhaproxy-2.0.4
193
193
  app.kubernetes.io/name: easyhaproxy
194
194
  app.kubernetes.io/instance: ingress
195
- app.kubernetes.io/version: "6.1.0"
195
+ app.kubernetes.io/version: "6.1.1"
196
196
  app.kubernetes.io/managed-by: Helm
197
197
  spec:
198
198
  controller: byjg.com/easyhaproxy
@@ -6,10 +6,10 @@ metadata:
6
6
  name: ingress-easyhaproxy
7
7
  namespace: easyhaproxy
8
8
  labels:
9
- helm.sh/chart: easyhaproxy-2.0.3
9
+ helm.sh/chart: easyhaproxy-2.0.4
10
10
  app.kubernetes.io/name: easyhaproxy
11
11
  app.kubernetes.io/instance: ingress
12
- app.kubernetes.io/version: "6.1.0"
12
+ app.kubernetes.io/version: "6.1.1"
13
13
  app.kubernetes.io/managed-by: Helm
14
14
  ---
15
15
  # Source: easyhaproxy/templates/clusterrole.yaml
@@ -19,10 +19,10 @@ metadata:
19
19
  name: ingress-easyhaproxy
20
20
  namespace: easyhaproxy
21
21
  labels:
22
- helm.sh/chart: easyhaproxy-2.0.3
22
+ helm.sh/chart: easyhaproxy-2.0.4
23
23
  app.kubernetes.io/name: easyhaproxy
24
24
  app.kubernetes.io/instance: ingress
25
- app.kubernetes.io/version: "6.1.0"
25
+ app.kubernetes.io/version: "6.1.1"
26
26
  app.kubernetes.io/managed-by: Helm
27
27
  rules:
28
28
  - apiGroups:
@@ -83,10 +83,10 @@ metadata:
83
83
  name: ingress-easyhaproxy
84
84
  namespace: easyhaproxy
85
85
  labels:
86
- helm.sh/chart: easyhaproxy-2.0.3
86
+ helm.sh/chart: easyhaproxy-2.0.4
87
87
  app.kubernetes.io/name: easyhaproxy
88
88
  app.kubernetes.io/instance: ingress
89
- app.kubernetes.io/version: "6.1.0"
89
+ app.kubernetes.io/version: "6.1.1"
90
90
  app.kubernetes.io/managed-by: Helm
91
91
  roleRef:
92
92
  apiGroup: rbac.authorization.k8s.io
@@ -105,10 +105,10 @@ metadata:
105
105
  name: ingress-easyhaproxy
106
106
  namespace: easyhaproxy
107
107
  labels:
108
- helm.sh/chart: easyhaproxy-2.0.3
108
+ helm.sh/chart: easyhaproxy-2.0.4
109
109
  app.kubernetes.io/name: easyhaproxy
110
110
  app.kubernetes.io/instance: ingress
111
- app.kubernetes.io/version: "6.1.0"
111
+ app.kubernetes.io/version: "6.1.1"
112
112
  app.kubernetes.io/managed-by: Helm
113
113
  annotations:
114
114
  {}
@@ -140,10 +140,10 @@ metadata:
140
140
  name: ingress-easyhaproxy
141
141
  namespace: easyhaproxy
142
142
  labels:
143
- helm.sh/chart: easyhaproxy-2.0.3
143
+ helm.sh/chart: easyhaproxy-2.0.4
144
144
  app.kubernetes.io/name: easyhaproxy
145
145
  app.kubernetes.io/instance: ingress
146
- app.kubernetes.io/version: "6.1.0"
146
+ app.kubernetes.io/version: "6.1.1"
147
147
  app.kubernetes.io/managed-by: Helm
148
148
  spec:
149
149
  replicas: 1
@@ -164,7 +164,7 @@ spec:
164
164
  - name: easyhaproxy
165
165
  securityContext:
166
166
  {}
167
- image: "byjg/easy-haproxy:6.1.0"
167
+ image: "byjg/easy-haproxy:6.1.1"
168
168
  imagePullPolicy: Always
169
169
  ports:
170
170
  - name: http
@@ -217,10 +217,10 @@ kind: IngressClass
217
217
  metadata:
218
218
  name: easyhaproxy
219
219
  labels:
220
- helm.sh/chart: easyhaproxy-2.0.3
220
+ helm.sh/chart: easyhaproxy-2.0.4
221
221
  app.kubernetes.io/name: easyhaproxy
222
222
  app.kubernetes.io/instance: ingress
223
- app.kubernetes.io/version: "6.1.0"
223
+ app.kubernetes.io/version: "6.1.1"
224
224
  app.kubernetes.io/managed-by: Helm
225
225
  spec:
226
226
  controller: byjg.com/easyhaproxy
@@ -41,7 +41,7 @@ Exposes HAProxy on NodePort `31080` (HTTP), `31443` (HTTPS), and `31936` (stats)
41
41
 
42
42
  ```bash
43
43
  kubectl apply -f \
44
- https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.1.0/deploy/kubernetes/easyhaproxy-nodeport.yml
44
+ https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.1.1/deploy/kubernetes/easyhaproxy-nodeport.yml
45
45
  ```
46
46
 
47
47
  ### ClusterIP (behind a LoadBalancer)
@@ -50,7 +50,7 @@ Cluster-internal only. Pair with an external cloud LoadBalancer or `kubectl port
50
50
 
51
51
  ```bash
52
52
  kubectl apply -f \
53
- https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.1.0/deploy/kubernetes/easyhaproxy-clusterip.yml
53
+ https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.1.1/deploy/kubernetes/easyhaproxy-clusterip.yml
54
54
  ```
55
55
 
56
56
  ### DaemonSet (special cases — requires node label)
@@ -64,7 +64,7 @@ The node label must be reapplied after any node replacement. Failing to do so wi
64
64
  kubectl label nodes node-01 "easyhaproxy/node=master"
65
65
 
66
66
  kubectl apply -f \
67
- https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.1.0/deploy/kubernetes/easyhaproxy-daemonset.yml
67
+ https://raw.githubusercontent.com/byjg/docker-easy-haproxy/6.1.1/deploy/kubernetes/easyhaproxy-daemonset.yml
68
68
  ```
69
69
 
70
70
  If you need to configure environment variables (log levels, stats password, etc.), see the [environment variable reference](../reference/environment-variables.md).
@@ -28,7 +28,7 @@ docker network create -d overlay --attachable easyhaproxy
28
28
  ```yaml
29
29
  services:
30
30
  haproxy:
31
- image: byjg/easy-haproxy:6.1.0
31
+ image: byjg/easy-haproxy:6.1.1
32
32
  volumes:
33
33
  - /var/run/docker.sock:/var/run/docker.sock
34
34
  deploy:
@@ -157,7 +157,7 @@ Here's a complete `docker-compose.yml` showing proper ACME configuration:
157
157
  ```yaml
158
158
  services:
159
159
  easyhaproxy:
160
- image: byjg/easy-haproxy:6.1.0
160
+ image: byjg/easy-haproxy:6.1.1
161
161
  volumes:
162
162
  - /var/run/docker.sock:/var/run/docker.sock
163
163
  # REQUIRED: Persist Certbot certificates (ACME)
@@ -83,7 +83,7 @@ docker cp single.pem easyhaproxy:/etc/easyhaproxy/certs/haproxy/example.com.pem
83
83
  ```yaml
84
84
  services:
85
85
  easyhaproxy:
86
- image: byjg/easy-haproxy:6.1.0
86
+ image: byjg/easy-haproxy:6.1.1
87
87
  volumes:
88
88
  - /var/run/docker.sock:/var/run/docker.sock
89
89
  - certs_haproxy:/etc/easyhaproxy/certs/haproxy
@@ -18,14 +18,57 @@ Automatically generates HAProxy `fcgi-app` configuration that defines required C
18
18
 
19
19
  ## Configuration Options
20
20
 
21
- | Option | Description | Default |
22
- |-------------------|-----------------------------------------|------------------------------------|
23
- | `enabled` | Enable/disable plugin | `true` |
24
- | `document_root` | Document root path | `/var/www/html` |
25
- | `script_filename` | Custom pattern for SCRIPT_FILENAME | `%[path]` (uses HAProxy's default) |
26
- | `index_file` | Default index file | `index.php` |
27
- | `path_info` | Enable PATH_INFO support | `true` |
28
- | `custom_params` | Dictionary of custom FastCGI parameters | (optional) |
21
+ | Option | Description | Default |
22
+ |-------------------|--------------------------------------------|--------------------------------------|
23
+ | `enabled` | Enable/disable plugin | `true` |
24
+ | `document_root` | Document root path | `/var/www/html` |
25
+ | `script_filename` | Custom pattern for SCRIPT_FILENAME | `%[path]` (uses HAProxy's default) |
26
+ | `index_file` | Default index file | `index.php` |
27
+ | `path_info` | PATH_INFO preset or custom regex | `php` |
28
+ | `log_stderr` | Forward FastCGI stderr to HAProxy logs | `false` |
29
+ | `keep_conn` | Reuse FastCGI connections between requests | `true` |
30
+ | `custom_params` | Dictionary of custom FastCGI parameters | (optional) |
31
+ | `pass_headers` | HTTP headers to forward to the FastCGI app | (optional) |
32
+
33
+ ### `path_info` — PATH_INFO Presets
34
+
35
+ The `path_info` option accepts a preset name or a custom regex. Built-in presets:
36
+
37
+ | Preset | Language | Regex |
38
+ |----------|----------------|---------------------------------|
39
+ | `php` | PHP (default) | `^(/.+\.php)(/.*)?$` |
40
+ | `python` | Python FastCGI | `^(/.+\.py)(/.*)?$` |
41
+ | `perl` | Perl/CGI | `^(/.+\.(pl\|cgi))(/.*)?$` |
42
+ | `ruby` | Ruby FastCGI | `^(/.+\.rb)(/.*)?$` |
43
+ | `any` | Generic | `^(.+?)(/.*)?$` |
44
+
45
+ Pass `false` to disable PATH_INFO entirely, or any other string to use it as a custom regex directly.
46
+
47
+ Setting `path_info: true` maps to `php` for backward compatibility.
48
+
49
+ ### `pass_headers` — Forwarding HTTP Headers
50
+
51
+ :::important
52
+ HAProxy strips `Authorization`, `Proxy-Authorization`, and all hop-by-hop headers before forwarding requests to the FastCGI backend. Applications that rely on these headers (e.g. APIs using Bearer tokens, Basic auth, or JWT) will fail silently without this option.
53
+ :::
54
+
55
+ `pass_headers` accepts a comma-separated string or a list of strings/dicts:
56
+
57
+ ```yaml
58
+ # Simple — single header
59
+ pass_headers: "Authorization"
60
+
61
+ # Multiple — comma-separated
62
+ pass_headers: "Authorization, Proxy-Authorization"
63
+
64
+ # With ACL condition — list of dicts
65
+ pass_headers:
66
+ - Authorization
67
+ - name: X-Custom-Header
68
+ condition: "if { ssl_fc }"
69
+ ```
70
+
71
+ > **Note:** `Content-Type` and `Content-Length` cannot be passed here — they are automatically converted to the CGI parameters `CONTENT_TYPE` and `CONTENT_LENGTH`.
29
72
 
30
73
  ## Configuration Examples
31
74
 
@@ -78,6 +121,7 @@ metadata:
78
121
  easyhaproxy.plugin.fastcgi.document_root: "/var/www/html"
79
122
  easyhaproxy.plugin.fastcgi.index_file: "index.php"
80
123
  easyhaproxy.plugin.fastcgi.script_filename: "/var/www/html/index.php"
124
+ easyhaproxy.plugin.fastcgi.pass_headers: "Authorization, Proxy-Authorization"
81
125
  spec:
82
126
  ingressClassName: easyhaproxy
83
127
  rules:
@@ -113,13 +157,13 @@ easymapping:
113
157
 
114
158
  ### Environment Variables
115
159
 
116
- | Environment Variable | Config Key | Type | Default | Description |
117
- |----------------------------------------------|-------------------|----------|------------------------|---------------------------------------|
118
- | `EASYHAPROXY_PLUGIN_FASTCGI_ENABLED` | `enabled` | boolean | `true` | Enable/disable plugin for all domains |
119
- | `EASYHAPROXY_PLUGIN_FASTCGI_DOCUMENT_ROOT` | `document_root` | string | `/var/www/html` | Document root path |
120
- | `EASYHAPROXY_PLUGIN_FASTCGI_SCRIPT_FILENAME` | `script_filename` | string | `%[path]` | Custom pattern for SCRIPT_FILENAME |
121
- | `EASYHAPROXY_PLUGIN_FASTCGI_INDEX_FILE` | `index_file` | string | `index.php` | Default index file |
122
- | `EASYHAPROXY_PLUGIN_FASTCGI_PATH_INFO` | `path_info` | boolean | `true` | Enable PATH_INFO support |
160
+ | Environment Variable | Config Key | Type | Default | Description |
161
+ |----------------------------------------------|-------------------|----------|-------------------------|---------------------------------------|
162
+ | `EASYHAPROXY_PLUGIN_FASTCGI_ENABLED` | `enabled` | boolean | `true` | Enable/disable plugin for all domains |
163
+ | `EASYHAPROXY_PLUGIN_FASTCGI_DOCUMENT_ROOT` | `document_root` | string | `/var/www/html` | Document root path |
164
+ | `EASYHAPROXY_PLUGIN_FASTCGI_SCRIPT_FILENAME` | `script_filename` | string | `%[path]` | Custom pattern for SCRIPT_FILENAME |
165
+ | `EASYHAPROXY_PLUGIN_FASTCGI_INDEX_FILE` | `index_file` | string | `index.php` | Default index file |
166
+ | `EASYHAPROXY_PLUGIN_FASTCGI_PATH_INFO` | `path_info` | boolean | `true` | Enable PATH_INFO support |
123
167
 
124
168
  ## Generated HAProxy Configuration
125
169
 
@@ -128,7 +172,10 @@ easymapping:
128
172
  fcgi-app fcgi_phpapp_local
129
173
  docroot /var/www/html
130
174
  index index.php
175
+ option keep-conn
131
176
  path-info ^(/.+\.php)(/.*)?$
177
+ pass-header Authorization
178
+ pass-header Proxy-Authorization
132
179
 
133
180
  # Backend configuration (added to the backend section)
134
181
  backend srv_phpapp_local_80
@@ -15,12 +15,12 @@ type: application
15
15
  # This is the chart version. This version number should be incremented each time you make changes
16
16
  # to the chart and its templates, including the app version.
17
17
  # Versions are expected to follow Semantic Versioning (https://semver.org/)
18
- version: 2.0.3
18
+ version: 2.0.4
19
19
 
20
20
  # This is the version number of the application being deployed. This version number should be
21
21
  # incremented each time you make changes to the application. Versions are not expected to
22
22
  # follow Semantic Versioning. They should reflect the version the application is using.
23
23
  # It is recommended to use it with quotes.
24
- appVersion: "6.1.0"
24
+ appVersion: "6.1.1"
25
25
 
26
26
  icon: https://opensource.byjg.com/img/easy_haproxy_logo.png
@@ -99,3 +99,6 @@ spec:
99
99
  {{- end }}
100
100
  - name: EASYHAPROXY_STATUS_UPDATE_INTERVAL
101
101
  value: {{ .Values.ingressStatus.updateInterval | quote }}
102
+ {{- with .Values.extraEnv }}
103
+ {{- toYaml . | nindent 12 }}
104
+ {{- end }}
@@ -96,5 +96,17 @@ easyhaproxy:
96
96
  # When service.create is true (Deployment with ClusterIP/NodePort), this is ignored
97
97
  masterNode:
98
98
  label: easyhaproxy/node
99
- values:
99
+ values:
100
100
  - master
101
+
102
+ # Extra environment variables to inject into the container
103
+ # Supports all Kubernetes env var forms: value, valueFrom (secretKeyRef, configMapKeyRef, fieldRef)
104
+ # extraEnv:
105
+ # - name: MY_VAR
106
+ # value: "my-value"
107
+ # - name: SECRET_VAR
108
+ # valueFrom:
109
+ # secretKeyRef:
110
+ # name: my-secret
111
+ # key: my-key
112
+ extraEnv: []
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "easyhaproxy"
7
- version = "6.1.0"
7
+ version = "6.1.1"
8
8
  description = "HAProxy label based routing with service discovery for Docker, Swarm, and Kubernetes"
9
9
  readme = "README.md"
10
10
  license = {file = "LICENSE"}
@@ -15,6 +15,8 @@ Configuration:
15
15
  - index_file: Default index file (default: index.php)
16
16
  - path_info: Enable PATH_INFO support (default: true)
17
17
  - custom_params: Dictionary of custom FastCGI parameters (optional)
18
+ - pass_headers: Headers to forward to the FastCGI app (optional).
19
+ Comma-separated string or list of strings/dicts with optional condition.
18
20
 
19
21
  Example YAML config:
20
22
  plugins:
@@ -34,6 +36,7 @@ Example Kubernetes Annotation:
34
36
  easyhaproxy.plugins: "fastcgi"
35
37
  easyhaproxy.plugin.fastcgi.document_root: /var/www/myapp
36
38
  easyhaproxy.plugin.fastcgi.index_file: index.php
39
+ easyhaproxy.plugin.fastcgi.pass_headers: "Authorization, Proxy-Authorization"
37
40
  """
38
41
 
39
42
  import os
@@ -48,13 +51,25 @@ from plugins import PluginContext, PluginInterface, PluginResult, PluginType
48
51
  class FastcgiPlugin(PluginInterface):
49
52
  """Plugin to configure FastCGI parameters for PHP-FPM"""
50
53
 
54
+ # Built-in path-info regex presets
55
+ PATH_INFO_PRESETS = {
56
+ "php": r"^(/.+\.php)(/.*)?$",
57
+ "python": r"^(/.+\.py)(/.*)?$",
58
+ "perl": r"^(/.+\.(?:pl|cgi))(/.*)?$",
59
+ "ruby": r"^(/.+\.rb)(/.*)?$",
60
+ "any": r"^(.+?)(/.*)?$",
61
+ }
62
+
51
63
  def __init__(self):
52
64
  self.enabled = True
53
65
  self.document_root = "/var/www/html"
54
66
  self.script_filename = "%[path]"
55
67
  self.index_file = "index.php"
56
- self.path_info = True
68
+ self.path_info = "php" # False | preset name | custom regex string
69
+ self.log_stderr = False
70
+ self.keep_conn = True
57
71
  self.custom_params = {}
72
+ self.pass_headers = [] # list of {"name": str, "condition": str|None}
58
73
 
59
74
  @property
60
75
  def name(self) -> str:
@@ -76,6 +91,29 @@ class FastcgiPlugin(PluginInterface):
76
91
  - index_file: Default index file
77
92
  - path_info: Enable PATH_INFO support
78
93
  - custom_params: Dictionary of custom FastCGI parameters
94
+ - path_info: Enable PATH_INFO splitting. Accepts:
95
+ - False / "false" / "no" / "0": disabled
96
+ - "php" (default): ^(/.+[.]php)(/.*)?$
97
+ - "python": ^(/.+[.]py)(/.*)?$
98
+ - "perl": ^(/.+[.](pl|cgi))(/.*)?$
99
+ - "ruby": ^(/.+[.]rb)(/.*)?$
100
+ - "any": ^(.+?)(/.*)?$
101
+ - any other string: used as-is as the regex
102
+ - log_stderr: Forward FastCGI app's stderr to HAProxy logs (default: false)
103
+ - keep_conn: Reuse FastCGI connections between requests (default: true)
104
+ - pass_headers: Headers to forward to the FastCGI application.
105
+ HAProxy omits Authorization, Proxy-Authorization, and hop-by-hop headers
106
+ by default — this directive is required to pass them through.
107
+ Note: Content-Type and Content-Length are never passable here; they are
108
+ already converted to CGI parameters (CONTENT_TYPE, CONTENT_LENGTH).
109
+
110
+ Accepts a comma-separated string or a list of strings/dicts:
111
+ Simple: "Authorization"
112
+ Multiple: "Authorization, Proxy-Authorization"
113
+ With ACL: [{"name": "Authorization", "condition": "if { ssl_fc }"}]
114
+
115
+ HAProxy syntax: pass-header <name> [ { if | unless } <condition> ]
116
+ Ref: https://docs.haproxy.org/dev/configuration.html
79
117
  """
80
118
  if "enabled" in config:
81
119
  self.enabled = str(config["enabled"]).lower() in ["true", "1", "yes"]
@@ -90,11 +128,40 @@ class FastcgiPlugin(PluginInterface):
90
128
  self.index_file = config["index_file"]
91
129
 
92
130
  if "path_info" in config:
93
- self.path_info = str(config["path_info"]).lower() in ["true", "1", "yes"]
131
+ val = str(config["path_info"]).lower()
132
+ if val in ["false", "0", "no"]:
133
+ self.path_info = False
134
+ elif val in ["true", "1", "yes"]:
135
+ self.path_info = "php" # backward-compatible: true → php preset
136
+ else:
137
+ self.path_info = str(config["path_info"]) # preset name or custom regex
138
+
139
+ if "log_stderr" in config:
140
+ self.log_stderr = str(config["log_stderr"]).lower() in ["true", "1", "yes"]
141
+
142
+ if "keep_conn" in config:
143
+ self.keep_conn = str(config["keep_conn"]).lower() in ["true", "1", "yes"]
94
144
 
95
145
  if "custom_params" in config:
96
146
  self.custom_params = config["custom_params"]
97
147
 
148
+ if "pass_headers" in config:
149
+ val = config["pass_headers"]
150
+ if isinstance(val, str):
151
+ self.pass_headers = [{"name": h.strip(), "condition": None}
152
+ for h in val.split(",") if h.strip()]
153
+ elif isinstance(val, list):
154
+ result = []
155
+ for item in val:
156
+ if isinstance(item, str):
157
+ result.append({"name": item.strip(), "condition": None})
158
+ elif isinstance(item, dict):
159
+ result.append({
160
+ "name": item["name"],
161
+ "condition": item.get("condition")
162
+ })
163
+ self.pass_headers = result
164
+
98
165
  def process(self, context: PluginContext) -> PluginResult:
99
166
  """
100
167
  Process the plugin and generate FastCGI configuration
@@ -121,9 +188,16 @@ class FastcgiPlugin(PluginInterface):
121
188
  fcgi_app_lines.append(f" docroot {self.document_root}")
122
189
  fcgi_app_lines.append(f" index {self.index_file}")
123
190
 
191
+ if self.log_stderr:
192
+ fcgi_app_lines.append(" log-stderr")
193
+
194
+ if self.keep_conn:
195
+ fcgi_app_lines.append(" option keep-conn")
196
+
124
197
  # PATH_INFO support
125
198
  if self.path_info:
126
- fcgi_app_lines.append(" path-info ^(/.+\\.php)(/.*)?$")
199
+ regex = self.PATH_INFO_PRESETS.get(self.path_info, self.path_info)
200
+ fcgi_app_lines.append(f" path-info {regex}")
127
201
 
128
202
  # Set SCRIPT_FILENAME if customized
129
203
  if self.script_filename and self.script_filename != "%[path]":
@@ -134,6 +208,13 @@ class FastcgiPlugin(PluginInterface):
134
208
  for param_name, param_value in self.custom_params.items():
135
209
  fcgi_app_lines.append(f" set-param {param_name.upper()} {param_value}")
136
210
 
211
+ # Pass headers
212
+ for header in self.pass_headers:
213
+ line = f" pass-header {header['name']}"
214
+ if header.get("condition"):
215
+ line += f" {header['condition']}"
216
+ fcgi_app_lines.append(line)
217
+
137
218
  fcgi_app_definition = "\n".join(fcgi_app_lines)
138
219
 
139
220
  # Build metadata
@@ -143,7 +224,10 @@ class FastcgiPlugin(PluginInterface):
143
224
  "document_root": self.document_root,
144
225
  "index_file": self.index_file,
145
226
  "path_info": self.path_info,
146
- "custom_params_count": len(self.custom_params)
227
+ "log_stderr": self.log_stderr,
228
+ "keep_conn": self.keep_conn,
229
+ "custom_params_count": len(self.custom_params),
230
+ "pass_headers_count": len(self.pass_headers)
147
231
  }
148
232
 
149
233
  return PluginResult(