Làm cách nào để tạo nginx viết lại URI trong nội dung cơ thể HTTP?


13

Đây là phần tiếp theo cho câu hỏi trước đây của tôi về cách làm cho nginx đảo ngược proxy 302 chuyển hướng đến thư mục con URI thay vì root .

Tôi có một máy chủ proxy nginx sử dụng rewriteproxy_passchỉ thị cho các yêu cầu bên ngoài proxy đến một URL giống như https://domain.com/my/web/app/một máy chủ LAN nội bộ tại https://10.0.0.22/. Đây là nỗ lực của tôi để thể hiện bản dịch trong ASCII UML:

                                    .-------------.       .------------------.
                                    | Nginx proxy  |      | Local web server |
                                    | (domain.com) |      | (10.0.0.22)      |
                                    '-------------'       '------------------'
                                               |                 |
                                               |                 |
GET https://domain.com/my/web/app/ ----------->|                 |
                                               |---------------->| GET /
                                               |                 |
                                               |<----------------| 302 redirect /login.php
302 redirect /my/web/app/login.php <-----------|                 |
                                               |                 |
GET https://domain.com/my/web/app/login.php -->|                 |
                                               |---------------->| GET /login.php
                                               |                 |
                                               |<----------------| 200
HTML body content (images, CSS, links) <-------|

Đây là khối vị trí thực tế trong tệp cấu hình nginx của tôi:

location ^~ /my/web/app/
{
    proxy_buffering   off;
    rewrite           /my/web/app/(.*) /$1 break;
    proxy_pass        https://10.0.0.22/;
    proxy_redirect    default;
}

Nó hoạt động rất tốt cho dịch URI giữa các đường dẫn URI bên trong và bên ngoài cho các yêu cầu và phản hồi HTTP, nhưng bất kỳ URI nào trong nội dung HTML (hình ảnh cơ thể, CSS, tập lệnh) đều không được dịch.

Ví dụ: hình ảnh có đường dẫn tương đối được nhúng trong phản hồi HTML, với các URI như /images/logo.png, được gửi lại cho máy khách web và được hiểu là https://domain.com/images/logo.pngthay vì https://domain.com/my/web/app/images/logo.png.

Tôi có thể hiểu tại sao điều này xảy ra, nhưng sẽ thật tuyệt vời nếu có một cách để tự động nội dung proxy cũng như các yêu cầu. Có cách nào để nginx chuyển đổi các URI được nhúng trong nội dung HTML không? Có thể tự động phân tích cú pháp và cập nhật nội dung HTML khi nó đi qua máy chủ proxy không?


2
Bạn đã tìm thấy một giải pháp? Nếu có, bạn có thể gửi nó như là một câu trả lời?
Huygens

Câu trả lời:


5

Giải pháp duy nhất cho vấn đề này mà tôi đã tìm thấy cho đến nay là httpSubModule (xem thêm trang github ).

Mô-đun này không phải là một phần của các nguồn Nginx chính thức, vì vậy bạn có thể sẽ cần phải tự xây dựng Nginx để sử dụng mô-đun này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.