Điểm:2

Ủy quyền ứng dụng "cổng" trên url tương đối ("thư mục con") của cùng một máy chủ trong Apache 2.4?

lá cờ ci

Tôi đã từng thấy Cách xử lý chính xác các url tương đối bằng proxy ngược - tuy nhiên tôi gặp khó khăn lớn khi hiểu điều này (và áp dụng nó vào vấn đề của mình), hy vọng ai đó có thể giúp đỡ.

Giả sử tôi có Ubuntu 20.04 làm hệ điều hành máy chủ trên máy chủ của mình, ví dụ.com.

Sau đó, tôi cài đặt https://github.com/hartwork/jawanndenn trên máy chủ và chạy nó - ứng dụng này theo mặc định chạy trên cổng 8080; và tôi có thể xác nhận rằng nó chạy trên chính máy chủ bằng cách chạy:

quên -O- http://127.0.0.1:8080

Càng xa càng tốt. Bây giờ, điều tôi muốn là: thay vì truy cập https://example.com:8080 để truy cập ứng dụng này, tôi muốn truy cập https://example.com/jaw - nơi tôi thường gọi /hàm một "thư mục con", nhưng nó có thể chính xác hơn là một URL tương đối. Nói cách khác, nếu tôi hiểu thuật ngữ này một cách chính xác, https://example.com/jaw sẽ đảo ngược proxy để https://example.com:8080.

Vì vậy, tôi đã thử làm điều này, trong vòng <VirtualHost *:443> định nghĩa trong tôi .conf tập tin:

  <Vị trí /hàm>
    Tùy chọn -Multiviews -Chỉ mục
    Viết LạiEngine Trên
    ProxyPass http://127.0.0.1:8080
    ProxyPassReverse http://127.0.0.1:8080
    SetOutputFilter proxy-html
    ProxyHTMLURLMap http://127.0.0.1:8080
  </Vị trí>
  RewriteRule ^/jaw$ /jaw/ [R]

Điều này hoạt động - theo nghĩa là trang bắt đầu của ứng dụng được tải; nhưng không thể tải cả đống tài nguyên (.css, .js); mở bảng điều khiển trong trình duyệt của tôi, tôi có thể thấy một loạt các yêu cầu 404 cho:

https://example.com/static/3rdparty/jquery-3.5.1/jquery-3.5.1.min.js
https://example.com/static/3rdparty/roboto-20/css/roboto.css
...

Vì vậy, tôi đoán là, có một số tệp .js hoặc tương tự, chỉ muốn tải /tĩnh/... -> và nếu được gọi từ địa chỉ "cổng", chúng sẽ ánh xạ tới http://127.0.0.1:8080/static/... và tất cả sẽ ổn thôi; nhưng bây giờ, vì chúng tôi được ủy quyền:

  • yêu cầu trình duyệt https://example.com/jaw
  • Apache nhận được điều đó, chuyển tiếp nó tới https://example.com:8080, nơi ứng dụng lắng nghe
  • Ứng dụng gửi lại các tệp (.js) có liên kết ở dạng /tĩnh/...
  • Khi chúng quay trở lại trình duyệt, chúng được hiểu là https://example.com/static/... - trước khi được sử dụng làm yêu cầu cho máy chủ, sau đó không thể tìm thấy chúng

Tôi cũng đã cố gắng loại bỏ toàn bộ <Location> đoạn trích ở trên và chỉ sử dụng đoạn mã này trong <VirtualHost *:443> nút:

  ProxyPass /jaw/ http://127.0.0.1:6789/
  ProxyPassReverse /jaw/ http://127.0.0.1:6789/

Chính xác điều tương tự xảy ra như trước đây - trang đầu tiên được tải, tất cả các tài nguyên khác dường như chuyển sang /tĩnh/... và tất cả đều là 404.

Cuối cùng, tôi cũng đã loại bỏ các câu trên và sử dụng điều này:

  ProxyPass /jaw/ http://127.0.0.1:8080
  ProxyHTMLURLMap http://127.0.0.1:8080 /jaw
  <Vị trí /hàm/>
    ProxyPassReverse /
    ProxyPassReverse http://127.0.0.1:8080
    ProxyHTMLBật Bật
    ProxyHTMLURLMap / /jaw/
  </Vị trí>

Điều này có hành vi giống hệt nhau - tải trang đầu tiên, tài nguyên không thành công - ngoại trừ tài nguyên hiện được liệt kê trong bảng điều khiển trình duyệt dưới dạng:

https://example.com/jaw/static/3rdparty/jquery-3.5.1/jquery-3.5.1.min.js
https://example.com/jaw/static/3rdparty/roboto-20/css/roboto.css
...

... và chúng không thành công với Lỗi 502 Proxy. Vì vậy, một số viết lại đã xảy ra, nhưng vẫn có điều gì đó không ổn.

Vì vậy, câu hỏi của tôi là - làm thế nào tôi có thể nói với Apache, với proxy mọi thứ từ ứng dụng trên 127.0.0.1:8080, đến thứ gì đó xuất hiện dưới dạng "thư mục con" (URL tương đối? tại đây /hàm)?


Chỉnh sửa: hóa ra, Lỗi 502 Proxy là do:

AH00898: Lỗi tra cứu DNS cho: 127.0.0.1:6789static được trả về bởi /poll/static/js/html.js

... rõ ràng là thiếu một dấu gạch chéo; vì vậy nó đã kết thúc rằng điều này:

  ProxyPass /jaw/ http://127.0.0.1:8080/
  ProxyHTMLURLMap http://127.0.0.1:8080/ /jaw/
  <Vị trí /hàm/>
    ProxyPassReverse /
    ProxyPassReverse http://127.0.0.1:8080/
    ProxyHTMLBật Bật
    ProxyHTMLURLMap / /jaw/
  </Vị trí>

... thực sự hoạt động - phần lớn (phần /tĩnh tài nguyên); nhưng sau đó, có một cuộc gọi đến /dữ liệu điều đó không được xử lý bởi điều này ... Vì vậy, đây vẫn là một câu hỏi mở (đối với tôi) về cách ủy quyền "mọi thứ"

lá cờ in
Định cấu hình máy chủ phụ trợ của bạn với url cơ sở chính xác. Điều đó dễ dàng hơn nhiều so với việc buộc phải viết lại trên proxy.
sdbbs avatar
lá cờ ci
Cảm ơn @GeraldSchneider - điều đó đã giúp tôi nhận ra ứng dụng này có đối số `--url-prefix` và điều đó đã kết thúc với tôi ...
Điểm:3
lá cờ in

Định cấu hình máy chủ phụ trợ của bạn với url cơ sở chính xác. Điều đó dễ dàng hơn nhiều so với việc buộc phải viết lại trên proxy.

Cài đặt phải là JAWANNDENN_URL_PREFIX . Chỉ cần đặt nó thành /hàm và tất cả các URL phải được tạo đúng cách.

Sau đó, ví dụ đầu tiên của bạn sẽ hoạt động, ngay cả khi không có ProxyHTMLURLMap và Bộ lọc đầu ra.

sdbbs avatar
lá cờ ci
Cảm ơn, cuối cùng tôi đã sử dụng `--url-prefix` để chỉ định `JAWANNDENN_URL_PREFIX` thành "`jaw`", và sau đó chỉ cần `ProxyPass/ProxyPassReverse /jaw/ http://127.0.0.1:8080/jaw/` hoạt động tốt cho proxy.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.