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 без дополнительной информации о том, что работает на сервере.