2015-06-28 12 views
11

Tôi có một máy chủ của bên thứ 3 ui chạy trong một container Docker, tiếp xúc trên cổng 8080.proxy ngược nginx cho một tập hợp các trang có đường dẫn bổ sung trong URL dựa trên http referer?

Dường như với mong đợi để tải các tài nguyên với một đường dẫn tuyệt đối: http://localhost:8080/index.html, http://localhost:8080/js/some_jsfiles , vv

Tôi muốn tạo ra một reverse proxy để nó để nó trông giống như nó đến từ một con đường khác nhau:

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

đầu tiên tôi đã cố gắng

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

Trang index.html tải, nhưng trình duyệt vẫn cố tải nội dung được giới thiệu mà không có đường dẫn bổ sung, vì vậy tôi nhận được 404 trên tất cả các javascripts, vv được tham chiếu từ index.html.

Sau đó, tôi cố gắng sử dụng referer để làm viết lại địa điểm/{

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

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

Đó không hiệu quả, một trong hai. Có cách nào để làm việc này không?

+0

index.html được tạo có chứa URL tuyệt đối cho js/css không? – Marki555

Trả lời

1

Tôi đã có vấn đề tương tự khi thiết lập nginx reverse proxy cho Bão-UI

Sau khi đào bới đôi khi, tôi đã nhận nó làm việc.

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

Tôi không chắc mình hoàn toàn hiểu. HTML (ví dụ: index.html) từ máy chủ UI (chạy trên máy chủ cục bộ: 8080) có chứa các URL tuyệt đối không? Nếu có, bạn có hai tùy chọn:

  1. Viết lại HTML trong máy chủ proxy. I E. thay đổi các URL theo nhu cầu của bạn.
  2. Tôi tưởng tượng phải có một số cài đặt để định cấu hình máy chủ UI (máy chủ gốc) của bạn sao cho không sử dụng các URL tuyệt đối này cho máy chủ cục bộ: 8080.

Tôi không thể trả lời # 2 mà không có thêm chi tiết về những gì đang chạy trên chương trình phụ trợ.

+0

Giao diện người dùng là giao diện người dùng cho cơn bão Apache, chạy trong docker. Tôi đào sâu vào mã nguồn của họ và thực sự nó trông giống như tài nguyên được tham chiếu từ index.html/all/have/absolute/paths. Khá crumby. Tôi đoán tùy chọn duy nhất của tôi là để có được html rewrite pluging cho nginx. –

+1

Bạn nên làm việc/thuyết phục cộng đồng Apache Storm sửa mã của họ. Không cho phép sửa đổi "cơ sở" của các URL thực sự là thực sự. Lý tưởng nhất, họ sẽ sử dụng các URL tương đối khi có thể. Trên thực tế, việc không sửa đổi được các URL cơ sở sẽ gây khó khăn, nếu không phải là không thể, hãy đặt một số tài nguyên sau một nhà cung cấp dịch vụ kiểu CDN. –

+1

Ngoài ra, ngay cả khi chúng tuyệt đối (nhưng không có http: //), bạn có thể thêm các quy tắc vị trí/proxy_pass thích hợp vào nginx. –

Các vấn đề liên quan