v2 release: Improved NGINX configuration for performance and compatibility

- Enhanced proxy buffering to optimize request handling.
- Improved gzip compression settings.
- Fixed rewrite rules to properly handle static content.
- Added resolver for better DNS resolution.
- Ensured proper trailing slash redirections.
- Updated proxy settings for better MinIO integration.
This commit is contained in:
Waylon S. Walker 2025-02-09 17:40:36 -06:00
parent b3d904805c
commit 8075bab534
6 changed files with 88 additions and 13 deletions

18
CHANGELOG.md Normal file
View file

@ -0,0 +1,18 @@
## 2.0.0
_v2 release: Improved NGINX configuration for performance and compatibility_
2025-02-19
- Enhanced proxy buffering to optimize request handling.
- Improved gzip compression settings.
- Fixed rewrite rules to properly handle static content.
- Added resolver for better DNS resolution.
- Ensured proper trailing slash redirections.
- Updated proxy settings for better MinIO integration.
## 1.0.0
_v1 release: Initial release_
2025-02-09

View file

@ -2,5 +2,5 @@ apiVersion: v2
name: k8s-pages
description: A Helm chart for an NGINX reverse proxy with configurable sites hosted from minio object storage
type: application
version: 0.1.0
version: 2.0.0
appVersion: "1.0"

View file

@ -6,33 +6,40 @@ Generate the content for the NGINX configuration.
server {
listen 80;
server_name {{ .name }}.{{ .host }};
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_types text/plain text/html text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_types text/plain text/html text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
proxy_buffering off;
proxy_intercept_errors on;
proxy_buffer_size 16k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
resolver 1.1.1.1 valid=300s ipv6=off;
proxy_hide_header x-amz-request-id;
proxy_hide_header x-minio-deployment-id;
location ~ ^([^.?]*[^/])$ {
return 301 $1/;
}
location / {
# These rewrites are kept as in your original config.
rewrite ^/$ /{{ $.Values.bucket }}/{{ .name }}/index.html break;
rewrite ^(.*)/$ /$1/index.html break;
rewrite ^/(.+)/$ /{{ $.Values.bucket }}/{{ .name }}/$1/index.html break;
rewrite ^/(.+)$ /{{ $.Values.bucket }}/{{ .name }}/$1 break;
# Use the parameterized backend URL.
proxy_pass {{ .minioURL }}/{{ $.Values.bucket }}/{{ .name }}/;
proxy_pass {{ .minioURL }}/{{ $.Values.bucket }}/{{ .name }};
proxy_set_header Host {{ .minioHost }};
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
@ -41,9 +48,9 @@ server {
proxy_ssl_server_name on;
proxy_ssl_verify off;
error_page 404 {{ .errorPage }};
add_header Cache-Control "public, max-age={{ $.Values.maxAge }}, stale-while-revalidate={{ $.Values.staleWhileRevalidate }}" always;
}
}
}
{{- end }}
{{- end }}

15
justfile Normal file
View file

@ -0,0 +1,15 @@
version := `cat version`
version:
#!/bin/bash
echo {{ version }}
release:
#!/bin/bash
./scripts/get_release_notes.py "{{ version }}" > release_notes.tmp
helm package helm-chart
gh release create "v{{ version }}" \
--title "v{{version}}" \
--notes-file release_notes.tmp \
k8s-pages-{{ version }}.tgz
rm release_notes.tmp

35
scripts/get_release_notes.py Executable file
View file

@ -0,0 +1,35 @@
#!/usr/bin/env -S uv run --quiet --script
# /// script
# requires-python = ">=3.10"
# ///
import sys
def get_release_notes(version):
with open("CHANGELOG.md", "r") as f:
content = f.read()
sections = content.split("\n## ")
# First section won't start with ## since it's split on that
sections = ["## " + s if i > 0 else s for i, s in enumerate(sections)]
for section in sections:
if section.startswith(f"## {version}"):
return section.strip()
return None
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: get_release_notes.py VERSION", file=sys.stderr)
sys.exit(1)
version = sys.argv[1]
notes = get_release_notes(version)
if notes:
print(notes)
else:
print(f"Error: No release notes found for version {version}", file=sys.stderr)
sys.exit(1)

View file

@ -1 +1 @@
1
2.0.0