nginx proxy_pass работает только с полными именами файлов

У меня есть nginx, который должен проксировать путь domain.de/pihole/* к док-контейнер, в котором работает pihole. Если я использую IP-адрес docker dontainer (172.20.0.2), index.php загружается, 172.20.0.2/admin и 172.20.0.2/admin/index.php также работают. Если я использую domain.de/pihole или domain.de/pihole/admin, я получаю 404. Если я использую domain.de/pihole/admin/index.php, все работает. Это мой / 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;

        }
}

Есть идеи, что мне нужно изменить (я скопировал большую часть материала "proxy_set_header" из serverfault)?

0
задан 22 July 2019 в 12:01
2 ответа

решено с помощью этого блока местоположения

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/;
}

Я использовал немного попыток и ошибок с косой чертой и тот факт, что pihole нуждается в / admin в URL-адресе (чего я раньше не знал)

0
ответ дан 23 November 2019 в 22:44

Удалите завершающий / в строке proxy_pass . Причина описана в документации для proxy_pass

Цитата:

Если proxy_pass указан без URI, URI запроса передается в сервер в той же форме, что и отправленный клиентом, когда оригинал запрос обработан или передан полный нормализованный URI запроса при обработке измененного URI:

 location / some / path / {
  proxy_pass http://127.0.0.1;
 }
 
0
ответ дан 23 November 2019 в 22:44

Теги

Похожие вопросы