Я пытаюсь настроить nginx для прокси к экземпляру док-станции cadvisor, работающему на хост-порту 8000.

У меня есть следующая конфигурация:

upstream cadvisor {
    server 127.0.0.1:8000;
}
...
...
server {
    ...
    ...
    location /cadvisor {
        rewrite ^([^.]*[^/])$ $1/ permanent;
        rewrite ^/cadvisor$ /cadvisor/ permanent;
        rewrite ^/cadvisor(/.*) $1 break;
        auth_basic "Restricted"; #For Basic Auth
        auth_basic_user_file /etc/nginx/.htpasswd; #For Basic Auth
        proxy_pass http://cadvisor;
        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 https;
        proxy_redirect ~^/(.*)/ /cadvisor/$1;
    }
    ...
    ...
}

Это работает для всех URL-адресов, кроме следующих (которые являются одним из ссылок, создаваемых cadvisor):https://myserver.com/cadvisor/containers//docker/a11c7edcc131d92c6ec3476329e5a54c82d2c31ee3f5592ba3fcb9386cb4f06a

Вероятно, это связано с тем, что двойная косая черта перед «докером» в URL портит путь CSS. Моя проблема была бы решена, если бы я мог перенаправить эти URL-адреса в URL-адрес с одной косой чертой (т.е. https://myserver.com/cadvisor/containers/docker/a11c7edcc131d92c6ec3476329e5a54c82d2c31ee3f5592ba3fcb9386cb4f06a)

Есть ли способ перенаправить URL на одну версию с косой чертой?

1 ответ1

0

Директива rewrite похоже, работает с нормализованной версией URI, которая не видит последовательности double / . Можно исправить двойную / ситуацию, работая на $request_uri переменной вместо:

if ($request_uri ~ ^(.*)//(.*)$) { return 302 $1/$2; }

Смотрите это предостережение относительно директивы if .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .