204 lines
5.7 KiB
Plaintext
204 lines
5.7 KiB
Plaintext
# /etc/nginx/sites-available/nik4nao.home.arpa
|
||
|
||
# WebSocket upgrade helper (for Jellyfin)
|
||
map $http_upgrade $connection_upgrade {
|
||
default upgrade;
|
||
'' close;
|
||
}
|
||
|
||
server {
|
||
listen 80;
|
||
server_name nik4nao.home.arpa;
|
||
|
||
access_log off;
|
||
error_log /var/log/nginx/nik4naohomearpa_error.log warn;
|
||
|
||
# ---- Dashy at / (root) ----
|
||
location = / {
|
||
proxy_pass http://127.0.0.1:8084;
|
||
include snippets/proxy-common.conf;
|
||
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Forwarded-Proto $scheme;
|
||
}
|
||
location = /pihole {
|
||
return 302 /admin/;
|
||
}
|
||
|
||
# ---- favicon (avoid noisy 404 in browser) ----
|
||
# Put a favicon.ico in /var/www/html if you want a real icon.
|
||
location = /favicon.ico {
|
||
root /var/www/html;
|
||
access_log off;
|
||
try_files /favicon.ico =404;
|
||
}
|
||
|
||
location /pihole/ {
|
||
return 301 /admin/;
|
||
}
|
||
|
||
# ---- Jellyfin at /jellyfin/ ----
|
||
location = /jellyfin {
|
||
return 302 /jellyfin/;
|
||
}
|
||
|
||
location /jellyfin/ {
|
||
proxy_pass http://jellyfin_upstream/; # uses upstream (or use the raw URL)
|
||
include snippets/proxy-common.conf;
|
||
|
||
# Jellyfin behind subpath specifics
|
||
proxy_set_header Upgrade $http_upgrade;
|
||
proxy_set_header Connection $connection_upgrade;
|
||
proxy_set_header X-Forwarded-Host $host;
|
||
proxy_set_header X-Forwarded-Prefix /jellyfin;
|
||
}
|
||
|
||
# ---- Jellyfin at /anime/ ----
|
||
location = /anime {
|
||
return 302 /anime/;
|
||
}
|
||
|
||
location /anime/ {
|
||
proxy_pass http://djellyfin_upstream/; # uses upstream (or use the raw URL)
|
||
proxy_next_upstream error timeout invalid_header http_502 http_503 http_504;
|
||
include snippets/proxy-common.conf;
|
||
|
||
# Jellyfin behind subpath specifics
|
||
proxy_set_header Upgrade $http_upgrade;
|
||
proxy_set_header Connection $connection_upgrade;
|
||
proxy_set_header X-Forwarded-Host $host;
|
||
proxy_set_header X-Forwarded-Prefix /anime;
|
||
}
|
||
|
||
# ---- Pi-hole v6 fix: map /admin/api/* -> /api/* ----
|
||
location = /admin/api {
|
||
return 301 /api/;
|
||
}
|
||
|
||
location ^~ /admin/api/ {
|
||
proxy_pass http://pihole_upstream/api/;
|
||
include snippets/proxy-common.conf;
|
||
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Forwarded-Host $host;
|
||
proxy_set_header X-Forwarded-Proto $scheme;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||
|
||
proxy_redirect off;
|
||
}
|
||
|
||
# ---- Pi-hole admin at /admin/ ----
|
||
# Pi-hole’s UI lives under /admin/, so keep the trailing slash in proxy_pass.
|
||
location /admin/ {
|
||
proxy_pass http://pihole_upstream/admin/;
|
||
include snippets/proxy-common.conf;
|
||
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Forwarded-Host $host;
|
||
proxy_set_header X-Forwarded-Proto $scheme;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||
|
||
proxy_redirect off;
|
||
}
|
||
|
||
# Pi-hole API (some UI calls hit /api/)
|
||
location /api/ {
|
||
proxy_pass http://pihole_upstream/api/;
|
||
include snippets/proxy-common.conf;
|
||
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Forwarded-Host $host;
|
||
proxy_set_header X-Forwarded-Proto $scheme;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||
|
||
proxy_redirect off;
|
||
}
|
||
|
||
# redirect /watch-party -> /watch-party/
|
||
location = /watch-party {
|
||
return 302 /watch-party/;
|
||
}
|
||
|
||
# proxy ONLY /watch-party/*, keeping the prefix
|
||
location ^~ /watch-party/ {
|
||
proxy_pass http://watchparty_upstream; # ← no trailing slash (preserve /watch-party)
|
||
include snippets/proxy-common.conf;
|
||
|
||
proxy_set_header X-Forwarded-Host $host;
|
||
proxy_set_header X-Forwarded-Prefix /watch-party;
|
||
|
||
# For Vite HMR / websockets
|
||
proxy_set_header Upgrade $http_upgrade;
|
||
proxy_set_header Connection $connection_upgrade;
|
||
}
|
||
|
||
# ---- qBittorrent at /qbt/ ----
|
||
location = /qbt {
|
||
return 302 /qbt/;
|
||
}
|
||
|
||
location ^~ /qbt/ {
|
||
proxy_pass http://qbt_upstream/;
|
||
|
||
include snippets/proxy-common.conf;
|
||
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Forwarded-Host $host;
|
||
proxy_set_header X-Forwarded-Proto $scheme;
|
||
proxy_set_header X-Forwarded-Prefix /qbt;
|
||
|
||
proxy_cookie_path / /qbt/;
|
||
|
||
proxy_redirect / /qbt/;
|
||
}
|
||
|
||
# ---- JDownloader2 at /jd2/ ----
|
||
location = /jd2 {
|
||
return 302 /jd2/;
|
||
}
|
||
|
||
location /jd2/ {
|
||
proxy_pass http://127.0.0.1:5800/;
|
||
include snippets/proxy-common.conf;
|
||
|
||
proxy_set_header X-Forwarded-Host $host;
|
||
proxy_set_header X-Forwarded-Host $host;
|
||
proxy_set_header X-Forwarded-Proto $scheme;
|
||
proxy_set_header X-Forwarded-Prefix /jd2;
|
||
}
|
||
|
||
# ---- JDownloader-Bridge at /jd-bridge/ ----
|
||
location = /jd-bridge {
|
||
return 302 /jd-bridge/;
|
||
}
|
||
|
||
location /jd-bridge/ {
|
||
proxy_pass http://127.0.0.1:8088/;
|
||
include snippets/proxy-common.conf;
|
||
|
||
proxy_set_header X-Forwarded-Host $host;
|
||
proxy_set_header X-Forwarded-Prefix /jd-bridge;
|
||
}
|
||
|
||
# ---- Dashy convenience redirects (Dashy is served at /) ----
|
||
location = /dashy {
|
||
return 302 /;
|
||
}
|
||
location ^~ /dashy/ {
|
||
return 302 /;
|
||
}
|
||
|
||
# ---- Default: serve Dashy for everything else ----
|
||
# All more specific locations above (/admin/, /api/, /jellyfin/, etc.) will still win.
|
||
location / {
|
||
proxy_pass http://127.0.0.1:8084;
|
||
include snippets/proxy-common.conf;
|
||
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Forwarded-Proto $scheme;
|
||
}
|
||
}
|