summaryrefslogtreecommitdiffstats
path: root/nginx.conf
diff options
context:
space:
mode:
Diffstat (limited to 'nginx.conf')
-rw-r--r--nginx.conf71
1 files changed, 71 insertions, 0 deletions
diff --git a/nginx.conf b/nginx.conf
new file mode 100644
index 0000000..715ac9a
--- /dev/null
+++ b/nginx.conf
@@ -0,0 +1,71 @@
+# nebbet.no nginx configuration
+# Adjust SITE_ROOT to the absolute path of your project directory.
+# Reload after changes: sudo nginx -s reload
+
+server {
+ listen 80;
+ listen [::]:80;
+ server_name nebbet.no www.nebbet.no;
+
+ # Redirect www → apex (optional, remove if not needed)
+ if ($host = www.nebbet.no) {
+ return 301 $scheme://nebbet.no$request_uri;
+ }
+
+ # ── static assets ────────────────────────────────────────────────────────
+ # Served directly from source so you don't have to copy them on every build.
+
+ location /styles/ {
+ alias SITE_ROOT/styles/;
+ expires 1d;
+ add_header Cache-Control "public";
+ }
+
+ location /components/ {
+ alias SITE_ROOT/components/;
+ expires 1d;
+ add_header Cache-Control "public";
+ }
+
+ location /lib/ {
+ alias SITE_ROOT/lib/;
+ expires 1d;
+ add_header Cache-Control "public";
+ }
+
+ # ── admin (password-protected) ───────────────────────────────────────────
+ location /admin/ {
+ auth_basic "Admin";
+ # The .passwords file is htpasswd-compatible (bcrypt).
+ # Manage with: nebbet user add <name>
+ auth_basic_user_file SITE_ROOT/.passwords;
+
+ root SITE_ROOT/public;
+ index index.html;
+ try_files $uri $uri.html $uri/index.html =404;
+ }
+
+ # ── public pages ─────────────────────────────────────────────────────────
+ location / {
+ root SITE_ROOT/public;
+ index index.html;
+
+ # Clean URLs: /about → /about.html
+ try_files $uri $uri.html $uri/index.html =404;
+
+ expires 1h;
+ add_header Cache-Control "public";
+ }
+
+ # ── 404 ──────────────────────────────────────────────────────────────────
+ error_page 404 /404.html;
+ location = /404.html {
+ root SITE_ROOT/public;
+ internal;
+ }
+
+ # ── gzip ─────────────────────────────────────────────────────────────────
+ gzip on;
+ gzip_types text/html text/css application/javascript application/json;
+ gzip_min_length 1024;
+}