2015-06-28 27 views
11

mam serwer 3rd-Party ui działa w pojemniku Döcker, narażonych na porcie 8080.serwer proxy odwrotnego nginx do zestawu stron z dodatkową ścieżką w adresie URL opartym na stronie http referer?

Wydaje się spodziewać, aby załadować zasobów bezwzględną ścieżkę: http://localhost:8080/index.html, http://localhost:8080/js/some_jsfiles itp

chcę stworzyć reverse proxy do niego więc wygląda na to, że pochodzi z innej ścieżce:

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

pierwszy próbowałem

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

Strona index.html ładuje się, ale przeglądarka nadal próbuje załadować wybraną treść bez dodatkowej ścieżki, więc otrzymuję 404 we wszystkich javascriptach itp. Przywoływanych z pliku index.html.

Potem próbował użyć Referer zrobić to przepisać lokalizację/{

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

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

to nie działa, albo. Czy jest jakiś sposób na zrobienie tego?

+0

Czy wygenerowany plik index.html zawiera bezwzględne adresy URL do pliku js/css? – Marki555

Odpowiedz

1

miałem podobne problemy podczas konfigurowania nginx reverse proxy dla Storm-UI

Po wykopaniu na jakiś czas, mam to działa.

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

Nie jestem pewien, czy w pełni rozumiem. Czy HTML (na przykład index.html) z serwera UI (działającego na localhost: 8080) zawiera bezwzględne adresy URL? Jeśli tak, masz dwie opcje:

  1. Przepisanie kodu HTML na serwerze proxy. To znaczy. zmień adresy URL zgodnie z Twoimi potrzebami.
  2. Wyobrażam sobie, że muszą istnieć pewne ustawienia, aby skonfigurować serwer UI (serwer początkowy), tak aby nie używał tych bezwzględnych adresów URL do localhost: 8080.

Nie mogę odpowiedzieć na # 2 bez szczegółowych informacji na temat tego, co działa na zapleczu.

+0

Interfejs użytkownika to interfejs użytkownika do burzy Apache, uruchomiony w oknie dokowanym. Wkopałem się w ich kod źródłowy i rzeczywiście wygląda jak zasoby przywoływane z ich index.html/all/have/absolute/paths. Całkiem nieźle. Domyślam się, że moją jedyną opcją jest pobranie wtyczki html do pobierania dla nginx. –

+1

Powinieneś/przekonać społeczność Apache Storm, aby naprawili swój kod. Niemożliwe modyfikowanie "podstawy" adresów URL jest naprawdę nie do zniesienia. Najlepiej byłoby, gdyby korzystały z względnych adresów URL. W rzeczywistości brak możliwości modyfikacji podstawowych adresów URL utrudnia lub wręcz uniemożliwia umieszczenie niektórych z tych zasobów za usługodawcą w stylu CDN. –

+1

Ponadto, nawet jeśli są one bezwzględne (ale bez http: //), możesz być w stanie dodać odpowiednie reguły location/proxy_pass do nginx. –