chore(deploy): nginx härten, deploy.sh mit Sperre, Zeitlimit und ohne Webhook-Geheimnis
nginx: server_tokens off, HSTS, exaktes /v1 liefert 404 (Regex-Block statt ^~ /v1/). deploy.sh: AIRCARD_WEBHOOK_TOKEN nicht an npm, Sperrverzeichnis gegen parallele Läufe (verwaiste Sperren werden übernommen), timeout 900 für npm ci und Build. Neuer Test deploy/deploy.test.js gegen das echte Skript. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
436ea4f4a5
commit
144181f2c9
5 files changed
+302
-8
No files matched your search
@@ -7,6 +7,7 @@
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
server_tokens off;
|
||||
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
@@ -15,6 +16,8 @@ server {
|
||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
add_header X-Content-Type-Options "nosniff" always;
|
||||
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
|
||||
# TLS endet bei Traefik; der Header läuft durch und gilt für den Browser (kein includeSubDomains).
|
||||
add_header Strict-Transport-Security "max-age=31536000" always;
|
||||
|
||||
gzip on;
|
||||
gzip_vary on;
|
||||
@@ -39,8 +42,10 @@ server {
|
||||
}
|
||||
|
||||
# Die Appwrite-API liegt nur über Traefik (Header X-Appwrite-Project) auf /v1.
|
||||
# Ohne diesen Header darf nginx hier nie die App (index.html) ausliefern.
|
||||
location ^~ /v1/ {
|
||||
# Ohne diesen Header darf nginx hier nie die App (index.html) ausliefern, auch nicht für genau /v1.
|
||||
# Regex-Block: steht vor den anderen Regex-Blöcken (die erste passende Regel gewinnt, /v1/x.png
|
||||
# soll also 404 liefern); /assets/ bleibt durch das ^~ oben unberührt.
|
||||
location ~ ^/v1(/|$) {
|
||||
return 404;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user