summaryrefslogtreecommitdiffstats
path: root/nginx.conf
blob: 715ac9a1a6718db87df5381e5a290b5fe393798c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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;
}