Ich habe einen nginx, der den Pfad domain.de/pihole/* an einen Docker-Container weiterleiten soll, auf dem pihole läuft. Wenn ich die IP des Docker-Containers (172.20.0.2) verwende, wird die index.php geladen, 172.20.0.2/admin und 172.20.0.2/admin/index.php funktionieren auch. Wenn ich domain.de/pihole oder domain.de/pihole/admin verwende, bekomme ich eine 404. Wenn ich domain.de/pihole/admin/index.php verwende, funktioniert alles. Dies ist meine /etc/nginx/sites-available/default:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
#proxy_pass http://172.20.0.2:25565;
}
location /pihole/ {
proxy_pass http://172.20.0.2:80/;
proxy_http_version 1.1;
proxy_set_header Host $host:$server_port;
proxy_set_header Referer $http_referer;
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 https;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Nginx-Proxy true;
proxy_set_header X-Client-Verify $ssl_client_verify;
proxy_set_header X-Client-DN $ssl_client_s_dn;
proxy_set_header X-SSL-Issuer $ssl_client_i_dn;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
}
}
Irgendwelche Ideen, was ich ändern muss (ich habe das meiste „proxy_set_header“-Zeug von Serverfault kopiert)?
Antwort1
Bitte entfernen Sie das Trailing /
in der proxy_pass
Zeile. Der Grund dafür ist in der Dokumentation für Proxy-Passwort
Zitat:
Wenn proxy_pass ohne URI angegeben wird, wird die Anforderungs-URI in derselben Form an den Server übergeben, in der sie von einem Client gesendet wurde, als die ursprüngliche Anforderung verarbeitet wurde, oder die vollständige normalisierte Anforderungs-URI wird bei der Verarbeitung der geänderten URI übergeben:
location /some/path/ { proxy_pass http://127.0.0.1; }
Antwort2
mit diesem Standortblock gelöst
location /pihole/ {
proxy_http_version 1.1;
proxy_set_header Referer $http_referer;
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 https;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Nginx-Proxy true;
proxy_set_header X-Client-Verify $ssl_client_verify;
proxy_set_header X-Client-DN $ssl_client_s_dn;
proxy_set_header X-SSL-Issuer $ssl_client_i_dn;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://172.20.0.2/admin/;
}
Ich habe ein bisschen mit Schrägstrichen herumprobiert und die Tatsache berücksichtigt, dass Pihole /admin
die URL benötigt (was ich vorher nicht wusste).