Compare commits

...

6 Commits

Author SHA1 Message Date
Ivan Gabaldon
d31bc8efaa Merge a99c06801d into 271ba86644 2025-01-03 10:37:01 +01:00
(root@itachi)-[~]
271ba86644 Update: grammatical correctness in README.md (#315)
* Update: grammatical correctness in README.md

* Update:  grammatical accuracy on README.md
2025-01-03 10:33:54 +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
3 changed files with 82 additions and 96 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

@@ -2,7 +2,7 @@
Create a new SearXNG instance in five minutes using Docker Create a new SearXNG instance in five minutes using Docker
## What is included ? ## What is included?
| Name | Description | Docker image | Dockerfile | | Name | Description | Docker image | Dockerfile |
| -- | -- | -- | -- | | -- | -- | -- | -- |
@@ -74,7 +74,7 @@ You can skip this step if you don't use systemd.
The SearXNG image proxy is activated by default. The SearXNG image proxy is activated by default.
The default [Content-Security-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy) allow the browser to access to ```${SEARXNG_HOSTNAME}``` and ```https://*.tile.openstreetmap.org;```. The default [Content-Security-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy) allows the browser to access to ```${SEARXNG_HOSTNAME}``` and ```https://*.tile.openstreetmap.org;```.
If some users want to disable the image proxy, you have to modify [./Caddyfile](https://github.com/searxng/searxng-docker/blob/master/Caddyfile). Replace the ```img-src 'self' data: https://*.tile.openstreetmap.org;``` by ```img-src * data:;```. If some users want to disable the image proxy, you have to modify [./Caddyfile](https://github.com/searxng/searxng-docker/blob/master/Caddyfile). Replace the ```img-src 'self' data: https://*.tile.openstreetmap.org;``` by ```img-src * data:;```.

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: