Repository navigation
Troubleshooting
First confirm which instance you are using:
curl -f https://mirror.example.com/versionFor Docker, use docker compose logs --tail=100 mirrorproxy caddy; for systemd, use
journalctl -u mirrorproxy -n 100 --no-pager. Redact passwords, tokens, and cookies before sharing logs.
In v1.4.3, sign in at https://your-host/admin. Docker and binary deployments share the same HTTP session limitation.
A login response can be 200 while the browser rejects the Secure session cookie and __Host- CSRF cookie.
Following requests return 401 and the UI misleadingly reports a password error. The initial password's strength is not the cause.
Resetting passwords or deleting the database does not fix it. Localhost exceptions do not prove remote HTTP works.
Fixed in v1.4.4: HTTP password login works with a persistent security banner and HTTPS guidance. HTTP and HTTPS use separate session cookies; sign in again after switching to HTTPS. HTTP passwords and sessions can still be intercepted or modified, so HTTPS is recommended. See Issue #10 and reverse proxy examples.
If HTTPS also fails, use browser developer tools to check login status, rejected cookies, and later /admin/api/ requests.
Verify that the proxy preserves Host, supplies the correct scheme, and is the actual address listed in trusted_proxies.
This error when saving settings, adding an OIDC provider or registering a passkey means that request security validation rejected the change. It does not establish that the password or OIDC secret is wrong. The console provides recovery instructions and proactively warns when the browser uses HTTPS but the server sees HTTP.
Authenticated connection diagnostics show the actual immediate peer IP, whether it is trusted, and whether an HTTPS forwarding header was ignored. Diagnostics never automatically establish trust. With Lucky, Nginx or Docker, the peer may be a bridge gateway (for example 192.168.64.1) even when the proxy targets the host's 127.0.0.1. Do not copy the example address without checking your deployment.
- Verify that the reported peer belongs to your reverse proxy. Manually add it in Advanced → Runtime configuration → Trusted reverse proxies, retaining existing entries. Never trust
0.0.0.0/0or networks you do not control. - Preserve
Hostand supply correctX-Forwarded-HostandX-Forwarded-Protovalues. Match the public URL to the external browser URL. Forwarded headers from untrusted peers are ignored; an HTTPS public URL alone does not change connection recognition. - If the affected page cannot save, sign in through a direct management connection on the server. For remote access, use an SSH tunnel, for example
ssh -L 13000:127.0.0.1:3000 user@server, then visithttp://localhost:13000/admin. Substitute the real backend port, SSH user and server; use the separate management listener's port if enabled. Do not expose a public HTTP management port for troubleshooting. - Editing TOML and restarting may not override runtime settings already saved in SQLite. Change the active runtime settings through the direct management console; do not delete the database.
- Return to the normal HTTPS URL and sign in again after fixing the configuration. Clear old site cookies if needed. HTTP and HTTPS use distinct cookies; a page refresh alone does not switch sessions. Update the trusted peer if recreating a Docker network changes its gateway IP.
If HTTPS recognition is healthy, check stale cookies, the session, and host/port rewriting by the reverse proxy. Do not disable CSRF validation, copy stale cookies, or automatically trust forwarding headers.
MIRRORPROXY_ADMIN_PASSWORD is used only when the database has no administrators; a non-empty value is used verbatim.
Recreating a container does not overwrite an existing password. An empty or missing value generates a random password shown only in the first startup log.
If you forgot it, run locally on the server. Save the newly generated random password securely:
# Docker
docker compose exec mirrorproxy mirrorproxy-server admin reset-password
# Binary service
sudo -u mirrorproxy /opt/mirrorproxy/mirrorproxy-server --config /opt/mirrorproxy/config.toml admin reset-passwordThe command resets the original administrator and revokes that account's sessions. Password changes in the console still have strength requirements. Five failures lock the account for 15 minutes; ordinary restarts do not clear the lock. Avoid repeated attempts.
| Symptom | Check first |
|---|---|
| Certificate issuance fails | Correct A/AAAA records, public reachability of ports 80/443, and port conflicts |
| Browser distrusts the certificate | Matching hostname, complete chain, and client trust for an enterprise CA |
| 502 Bad Gateway | Backend /healthz from the host; a container proxy must not use its own 127.0.0.1
|
| Console CSRF error | Host, scheme, trusted proxy, and the browser's actual HTTPS address |
| Docker Hub works but GHCR bypasses the proxy | Docker mirrors cover Docker Hub only; rewrite other image hosts |
| Image returns 401/403 | A 401 can be a normal auth challenge; check public access, login, and license requirements |
| 404 or manifest unknown | Upstream package, repository, tag, and enabled adapters; do not guess URLs |
| GeoIP shows Unknown | Private IP, missing XDB result, or incorrect trusted-proxy configuration |
Some runtime settings are seeded into SQLite on first use and then managed in the console;
a restart does not overwrite every stored value from TOML. Listener settings come from service startup configuration;
ACME environment variables and other specific overrides have their own precedence.
Check the actual --config path, container environment, and saved console values. See Advanced deployment.
Keep the data and diagnose first. Do not delete SQLite, run
docker compose down -v, or disable TLS/SSRF/CSRF checks to bypass a failure.
开始使用 · Start here
- 首页 · Home
- Docker + HTTPS 快速开始 · Quick start
- 二进制与已有入口部署 · Deployment
- 常见反向代理配置 · Reverse proxies
- 常见问题 · Troubleshooting
日常使用 · Everyday use
- 客户端改源 · Client
- Agent Skill 与 MCP · Agent integration
- Linux 系统与版本支持 · Linux system sources
- 其他客户端安装方式 · Client installation
- 支持的软件源 · Sources
- 容器镜像总览 · Container images
- 后台管理 · Administration
进阶配置 · Advanced
开发与维护 · Development