Apache ProxyPassRewrite không viết lại các nội dung phản hồi nhận được từ http://test.example.com , chỉ các tiêu đề (như chuyển hướng đến trang 404, v.v.).
Một số lựa chọn thay thế:
Một ) Viết lại ứng dụng nội bộ để sử dụng các đường dẫn tương đối thay vì tuyệt đối. tức là ../css/style.css
thay vì/css/style.css
Hai ) Triển khai ứng dụng nội bộ trong cùng một thư mục con /folder
thay vì trong thư mục gốc của test.example.com.
Ba ) Một và hai thường không thể xảy ra ... Nếu bạn may mắn, ứng dụng nội bộ chỉ sử dụng hai hoặc ba thư mục con và những thư mục này không được sử dụng trên trang web chính của bạn , chỉ cần viết một loạt các dòng ProxyPass:
# Expose Internal App to the internet.
ProxyPass /externalpath/ http://test.example.com/
ProxyPassReverse /externalpath/ http://test.example.com/
# Internal app uses a bunch of absolute paths.
ProxyPass /css/ http://test.example.com/css/
ProxyPassReverse /css/ http://test.example.com/css/
ProxyPass /icons/ http://test.example.com/icons/
ProxyPassReverse /icons/ http://test.example.com/icons/
Bốn ) Tạo một tên miền phụ riêng cho ứng dụng nội bộ và chỉ cần đảo ngược mọi thứ proxy:
<VirtualHost *:80>
ServerName app.example.com/
# Expose Internal App to the internet.
ProxyPass / http://test.internal.example.com/
ProxyPassReverse / http://test.internal.example.com/
</VirtualHost>
Năm ) Đôi khi các nhà phát triển hoàn toàn không biết gì và các ứng dụng của họ không chỉ tạo ra URL tuyệt đối mà thậm chí còn bao gồm cả phần tên máy chủ trong URL của họ và mã HTML kết quả trông như thế này : <img src=http://test.example.com/icons/logo.png>
.
A ) Bạn có thể sử dụng giải pháp kết hợp của DNS và kịch bản phân chia chân trời 4. Cả người dùng nội bộ và bên ngoài đều sử dụng test.example.com, nhưng DNS nội bộ của bạn trỏ trực tiếp đến địa chỉ IP của máy chủ test.example.com. Đối với người dùng bên ngoài, bản ghi công khai cho test.example.com trỏ đến địa chỉ IP của máy chủ web công cộng của bạn www.example.com và sau đó bạn có thể sử dụng giải pháp 4.
B ) Bạn thực sự có thể nhận được apache để không chỉ yêu cầu proxy đến test.example.com, mà còn viết lại nội dung phản hồi trước khi nó được truyền tới người dùng của bạn. (Thông thường một proxy chỉ viết lại tiêu đề / phản hồi HTTP). mod_substolarship trong apache 2.2. Tôi đã không kiểm tra nếu nó kết hợp tốt với mod_proxy, nhưng có thể các công việc sau:
<Location /folder/>
ProxyPass http://test.example.com/
ProxyPassReverse http://test.example.com/
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|test.example.com/|www.example.com/folder/|i"
</Location>