Đâ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 rewrite
và proxy_pass
chỉ 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.png
thay 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?