Files
HomeDash/nginx.conf
HomeDash Bot 73f23927d9 fix(nginx): /admin 不再重定向,改用精确反代直接 200
上一版把 /admin 改成相对 301,但 301 会被浏览器**永久缓存**,用户即使
服务端已修好仍被旧的 http://<域名>:8080/admin/ 带走。现在精确匹配
location = /admin 直接反代(无 Location 头),并加 Cache-Control: no-store,
彻底消除这条跳转。其余前缀改 302(不被永久记住),/extension 直接给安装页。
2026-09-11 17:03:33 +08:00

143 lines
5.5 KiB
Nginx Configuration File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

worker_processes auto;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log warn;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
client_max_body_size 0;
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml;
# 全部服务通过统一 8080 端口对外
server {
listen 8080;
server_name _;
# 容器内部监听 8080,但对外是 443/80(经门户反代)。
# nginx 生成重定向时默认拼绝对地址 $scheme://$host:$server_port,
# 会把内部端口泄漏到公网(曾把 /admin 跳到 http://<域名>:8080/admin/),
# 而且 https 会被降级成 http。关掉绝对重定向,改用相对 Location。
absolute_redirect off;
port_in_redirect off;
# Dashy 静态文件
root /app/dashy;
index index.html;
# ===== SearXNG 反向代理 =====
# SearXNG 路由是 /search(无尾斜杠),/search/ 会 404,故 rewrite 去掉尾斜杠。
location ~ ^/search/?$ {
rewrite ^/search/?$ /search break;
proxy_pass http://127.0.0.1:8888;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# SearXNG 静态资源(主题/前端脚本,页面上以 /static/... 绝对路径引用)
location /static/ {
proxy_pass http://127.0.0.1:8888;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 其他 SearXNG 页面/接口(结果页内的链接会引用这些根路径)
location ~ ^/(autocompleter|preferences|stats|about|donate|opensearch.xml|image_proxy|translations)/? {
proxy_pass http://127.0.0.1:8888;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# History API(内部 3004)
location /api/history/ {
proxy_pass http://127.0.0.1:3004/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Admin WebUI(内部 3005)
#
# 不带尾斜杠的 /admin 必须**直接返回页面**,不能靠重定向:
# 1) 它会落到 `location /` 的 try_files $uri/ 分支,nginx 自动补斜杠时按
# $host:$server_port 拼绝对地址,把内部端口 8080 泄到公网;
# 2) 即便改成相对重定向,301 会被浏览器**永久缓存**,用户改好后仍被旧跳转带走。
# 所以这里精确匹配并直接反代(尾斜杠由 proxy_pass 的 / 吸收)。
location = /admin {
proxy_pass http://127.0.0.1:3005/;
# 管理页不缓存:避免旧的跳转/旧页面被浏览器长期记住
add_header Cache-Control "no-store" always;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /admin/ {
proxy_pass http://127.0.0.1:3005/;
add_header Cache-Control "no-store" always;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# conf.yml 由 nginx 直接提供(从 data volume 读取)
location = /conf.yml {
alias /app/data/conf.yml;
}
# 可选的扩展商店链接:部署方把 extension-store.json 放进 data 卷即可,
# /extension/install.html 会读取它并显示「一键安装」按钮。
location = /extension/store.json {
alias /app/data/extension-store.json;
add_header Cache-Control "no-store";
}
# item-icons 从 data volume 提供
# 用 302(不是 301):这两个目录不需要浏览器永久记住跳转。
location = /item-icons {
return 302 /item-icons/;
}
location /item-icons/ {
alias /app/data/item-icons/;
}
# 自定义壁纸(后台「外观」上传,目录也在 data 卷)
location = /wallpapers {
return 302 /wallpapers/;
}
location /wallpapers/ {
alias /app/data/wallpapers/;
add_header Cache-Control "public, max-age=31536000, immutable";
}
# 浏览器扩展安装目录:/extension 和 /extension/ 都直接给安装页,不靠重定向
location = /extension {
rewrite ^ /extension/install.html last;
}
location = /extension/ {
rewrite ^ /extension/install.html last;
}
# Dashy SPA 路由兜底
location / {
try_files $uri $uri/ /index.html;
}
}
}