Compare commits

...

5 Commits

Author SHA1 Message Date
Ivan Gabaldon
d31bc8efaa Merge a99c06801d into 271ba86644 2025-01-03 10:37:01 +01:00
Ivan Gabaldon
a99c06801d restore encode directive
Caddyserver actually did passthrough the precompressed resources served by uWSGI (Oops)
2024-08-23 22:19:39 +02:00
Ivan Gabaldon
5d066a4c63 features cleanup
Since this header is attached to each outgoing request the overall size is slightly increased by 300 bytes, we don't care if the site is allowed to play media in the background, so with the vast majority of features that have been added (and those that were already present)
2024-08-23 22:12:45 +02:00
Ivan Gabaldon
d8d9e09705 fix missing "public" directive 2024-08-06 13:12:30 +02:00
Ivan Gabaldon
154c421271 rework Caddyfile 2024-08-06 12:50:09 +02:00
2 changed files with 80 additions and 94 deletions

129
Caddyfile
View File

@@ -1,99 +1,86 @@
{ {
admin off admin off
log {
output stderr
format filter {
# Preserves fist 8 bits from IPv4 and 32 bits from IPv6
request>remote_ip ip_mask 8 32
request>client_ip ip_mask 8 32
# Remove identificable information
request>remote_port delete
request>headers delete
request>uri query {
delete url
delete h
delete q
}
}
}
} }
{$SEARXNG_HOSTNAME} { {$SEARXNG_HOSTNAME:http://localhost}
log {
output discard
}
tls {$SEARXNG_TLS} tls {$SEARXNG_TLS:internal}
@api { encode zstd gzip
@api {
path /config path /config
path /healthz path /healthz
path /stats/errors path /stats/errors
path /stats/checker path /stats/checker
} }
@static { @static {
path /static/* path /static/*
} }
@notstatic { @imageproxy {
not path /static/*
}
@imageproxy {
path /image_proxy path /image_proxy
} }
@notimageproxy { header {
not path /image_proxy # Force clients to use HTTPS
} Strict-Transport-Security "max-age=31536000"
header { # Prevent MIME type sniffing from the declared Content-Type
# Enable HTTP Strict Transport Security (HSTS) to force clients to always connect via HTTPS
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# Enable cross-site filter (XSS) and tell browser to block detected attacks
X-XSS-Protection "1; mode=block"
# Prevent some browsers from MIME-sniffing a response away from the declared Content-Type
X-Content-Type-Options "nosniff" X-Content-Type-Options "nosniff"
# Disable some features # Disable some browser features
Permissions-Policy "accelerometer=(),ambient-light-sensor=(),autoplay=(),camera=(),encrypted-media=(),focus-without-user-activation=(),geolocation=(),gyroscope=(),magnetometer=(),microphone=(),midi=(),payment=(),picture-in-picture=(),speaker=(),sync-xhr=(),usb=(),vr=()" Permissions-Policy "accelerometer=(),camera=(),geolocation=(),gyroscope=(),magnetometer=(),microphone=(),payment=(),usb=()"
# Disable some features (legacy) # Set referrer policy
Feature-Policy "accelerometer 'none';ambient-light-sensor 'none'; autoplay 'none';camera 'none';encrypted-media 'none';focus-without-user-activation 'none'; geolocation 'none';gyroscope 'none';magnetometer 'none';microphone 'none';midi 'none';payment 'none';picture-in-picture 'none'; speaker 'none';sync-xhr 'none';usb 'none';vr 'none'"
# Referer
Referrer-Policy "no-referrer" Referrer-Policy "no-referrer"
# X-Robots-Tag # X-Robots-Tag (comment to allow site indexing)
X-Robots-Tag "noindex, noarchive, nofollow" X-Robots-Tag "noindex, noarchive, nofollow"
# Remove Server header # Remove "Server" header
-Server -Server
} }
header @api { header @api {
Access-Control-Allow-Methods "GET, OPTIONS" Access-Control-Allow-Methods "GET, OPTIONS"
Access-Control-Allow-Origin "*" Access-Control-Allow-Origin "*"
} }
# Cache route {
header @static { # Caching
# Cache header Cache-Control "no-cache, no-store"
Cache-Control "public, max-age=31536000" header @static Cache-Control "public, max-age=31536000"
defer
} # CSP (https://content-security-policy.com)
header Content-Security-Policy "upgrade-insecure-requests; default-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline'; form-action 'self' https://github.com/searxng/searxng/issues/new; font-src 'self'; frame-ancestors 'self'; base-uri 'self'; connect-src 'self' https://overpass-api.de; img-src 'self' data: https://*.tile.openstreetmap.org; frame-src https://www.youtube-nocookie.com https://player.vimeo.com https://www.dailymotion.com https://www.deezer.com https://www.mixcloud.com https://w.soundcloud.com https://embed.spotify.com"
header @notstatic { header @imageproxy Content-Security-Policy "default-src 'none'; img-src 'self' data:"
# No Cache }
Cache-Control "no-cache, no-store"
Pragma "no-cache" # SearXNG (uWSGI)
} reverse_proxy localhost:8080 {
header_up X-Forwarded-Port {http.request.port}
# CSP (see http://content-security-policy.com/ ) header_up X-Real-IP {http.request.remote.host}
header @imageproxy {
Content-Security-Policy "default-src 'none'; img-src 'self' data:" # https://github.com/searx/searx-docker/issues/24
} header_up Connection "close"
header @notimageproxy {
Content-Security-Policy "upgrade-insecure-requests; default-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline'; form-action 'self' https://github.com/searxng/searxng/issues/new; font-src 'self'; frame-ancestors 'self'; base-uri 'self'; connect-src 'self' https://overpass-api.de; img-src 'self' data: https://*.tile.openstreetmap.org; frame-src https://www.youtube-nocookie.com https://player.vimeo.com https://www.dailymotion.com https://www.deezer.com https://www.mixcloud.com https://w.soundcloud.com https://embed.spotify.com"
}
# SearXNG
handle {
encode zstd gzip
reverse_proxy localhost:8080 {
header_up X-Forwarded-Port {http.request.port}
header_up X-Forwarded-Proto {http.request.scheme}
header_up X-Real-IP {remote_host}
}
}
} }

View File

@@ -11,8 +11,7 @@ services:
- caddy-data:/data:rw - caddy-data:/data:rw
- caddy-config:/config:rw - caddy-config:/config:rw
environment: environment:
- SEARXNG_HOSTNAME=${SEARXNG_HOSTNAME:-http://localhost:80} - SEARXNG_TLS=${LETSENCRYPT_EMAIL}
- SEARXNG_TLS=${LETSENCRYPT_EMAIL:-internal}
cap_drop: cap_drop:
- ALL - ALL
cap_add: cap_add: