nextcloud / nextcloud/documentation
Trusted proxy cannot resolve hostname (docker), only IP or CIDR-ip
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 628
- Forks
- 2.5k
- Avg merge
- 2d 11h
- Merged PRs (30d)
- 135
Description
The problem
A Nextcloud instance running behind an NGINX reverse-proxy (both in Docker) cannot reliably trust the reverse proxy due to the IP-address of the reverse-proxy changing every time the containers are restarted. Normally one would use the container_name as the hostname, but the relevant code in Nextcloud cannot resolve hostnames - only IP addresses or CIDR-ranges. I have pinpointed the source of the problem - but do not know how to proceed/solve it.
Problem example
Relevant Nextcloud config.php part that does not work:
'trusted_proxies' =>
array (
0 => 'nginx_container_name',
),
Relevant Nextcloud config.php part that does work:
'trusted_proxies' =>
array (
0 => '192.168.160.4',
),
(192.168.160.4 is the IP of the nginx-proxy container within Docker, this changes every time one starts the Docker containers)
Problem source
The problem originates from lib/private/AppFramework/Http/Request.php#L607:
protected function matchesTrustedProxy($trustedProxy, $remoteAddress) {
$cidrre = '/^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\/([0-9]{1,2})$/';
if (preg_match($cidrre, $trustedProxy, $match)) {
$net = $match[1];
$shiftbits = min(32, max(0, 32 - intval($match[2])));
$netnum = ip2long($net) >> $shiftbits;
$ipnum = ip2long($remoteAddress) >> $shiftbits;
return $ipnum === $netnum;
}
return $trustedProxy === $remoteAddress;
}
It cannot resolve trusted_proxy host names, only CIDR comparison or literal IP-comparison.
Examples in config where 'container_name' does work
For example in the DB or Redis configuration one can use the host name within docker:
'dbhost' => 'db_container_name',
'redis' =>
array (
'host' => 'redis_container_name',
...
),
The big question
Is it possible to add host name resolving to the lib/private/AppFramework/Http/Request.php code?
This would make Nextcloud in Docker work flawless without requiring 'overwritehost'/'overwriteprotocol'/etc.
Looking forward to anyone's thoughts on this.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with lib/private/AppFramework/Http/Request.php and the matchesTrustedProxy method identified in the issue. Check how trusted_proxies currently handles CIDR ranges and literal IPs, then determine the expected hostname behavior for Docker deployments while preserving existing comparisons. Done means a configured proxy hostname can be trusted reliably after container IP changes.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- docker, php
- Domain
- backend, networking
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100