Nginx обратный прокси-сервер к набору страниц с дополнительным путём в URL-адресе на основе HTTP-ссылки?

У меня есть сторонний ui-сервер, работающий в контейнере докеров, выставленный на порт 8080.

Кажется, ожидают загрузки ресурсов с абсолютным путем: http://localhost:8080/index.html, http://localhost:8080/js/some_jsfiles и др.

Я хочу создать обратный прокси-сервер, чтобы он выглядел иначе:

https://myserver.com/stormui/index.html, https://myserver.com/stormui/js/...

сначала я попробовал

location /stormui/  {
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         #rewrite ^/stormui/(.*) /$1  break;
         proxy_pass http://127.0.0.1:8080/;
}

Загружается страница index.html, но браузер по-прежнему пытается загрузить ссылочный контент без дополнительного пути, поэтому я получаю 404 на всех javascripts и т.д., ссылающихся на index.html.

Затем я попытался использовать референт, чтобы сделать переписывание   location/{

    if ($http_referer ~ "^/stormui/.*") {
        rewrite ^/(.*) /stormui/$1  break;
    }

    root   /usr/share/nginx/html;
    index  index.html index.htm;
    ...
}

Это тоже не сработало. Есть ли способ сделать это?

Ответ 1

У меня были подобные проблемы при настройке обратного прокси nginx для Storm-UI

После копания в какой-то момент, я получил его работу.

server {
    listen  80;

    server_name  example.com;

    location ^~ /css/ {
        rewrite /(.*) /storm-ui/$1;
    }

    location ^~ /js/ {
        rewrite /(.*) /storm-ui/$1;
    }

    location ^~ /templates/ {
            rewrite /(.*) /storm-ui/$1;
    }

    location ^~ /api/ {
            rewrite /(.*) /storm-ui/$1;
    }

    location ~ ^/topology(.*) {
            rewrite /(.*) /storm-ui/$1;
    }

    location  /storm-ui/ {
        proxy_redirect  /  /storm-ui/;
        #proxy_pass  http://<STORM_MASTER_IP/HOSTNAME>:<PORT>/;
        proxy_pass  http://10.14.23.10:8080/;
    }       
}

Ответ 2

Я не уверен, что полностью понимаю. Имеет ли HTML (например, index.html) с сервера пользовательского интерфейса (работает на localhost: 8080) абсолютные URL-адреса? Если это так, у вас есть два варианта:

  • Перепишите HTML-код на прокси-сервере. То есть измените URL-адреса в соответствии с вашими потребностями.
  • Я бы предположил, что для настройки вашего UI-сервера (исходного сервера) должны быть какие-то настройки, чтобы он не использовал эти абсолютные URL-адреса для localhost: 8080.

Я не могу ответить # 2 без дополнительной информации о том, что работает на сервере.