Apache proxy_http chuyển hướng đến ip và đặt tên máy chủ


16

Hy vọng các bạn có thể giúp tôi với một vấn đề proxy mà tôi có.

Những gì tôi đã có

Tôi đã thiết lập một proxy ngược http apache, đến các yêu cầu proxy từ * .proxy.domain đến * .i INTERN.domain. Apache là cách duy nhất để tiếp cận các ứng dụng web nội bộ của tôi từ một mạng bên ngoài.

Thí dụ:

app.proxy.domain -> app.intern.domain
mail.proxy.domain -> mail.intern.domain

Đây là tất cả làm việc tuyệt vời, nhưng tôi có vấn đề sau đây.

Vấn đề
tôi muốn ủy quyền các yêu cầu sau:

app.proxy.domain -> app.internal.domain
app-dev.proxy.domain -> app-dev.internal.domain

Điều này không có vấn đề gì, nhưng thật không may, máy chủ phát triển ứng dụng chạy một bản sao chính xác của ứng dụng web máy chủ ứng dụng và ứng dụng web này chỉ phản hồi với tên máy chủ của nó (app.i INTERN.domain)

Vì vậy, những gì tôi cần làm là proxy sau đây

app.proxy.domain -> app.internal.domain (10.0.1.1)
app-dev.proxy.domain -> app.internal.domain (10.0.1.2)

Tôi có thể làm điều thứ hai, bằng cách thêm "10.0.1.2 app.iternal.domain" trong / etc / hosts, nhưng điều đó cũng có nghĩa là app.proxy.domain sẽ hạ cánh trên máy chủ dev.

Tôi đang tìm kiếm một tùy chọn, để chỉ đặt mục nhập / etc / hosts bên trong tệp cấu hình vhost cho app-dev.proxy.domain, để mọi cấu hình vhost khác sẽ chỉ sử dụng DNS cho app.i INTERN.domain.

Suy nghĩ ...

Có cách nào để nói apache config,

ProxyPass / http://10.0.1.2/

nhưng gửi app.i INTERN.domain làm tên máy chủ?

Chỉnh sửa ứng dụng web của máy chủ dev để nghe app-dev là không có tùy chọn, vì nó được coi là một bản sao chính xác (không phải là quyết định của tôi ...)

Cảm ơn!

Câu trả lời:


34

Có thể bạn có thể sử dụng mod_headers kết hợp với mod_proxy. Tôi đã không kiểm tra nó mặc dù.

Vì vậy, đối với vhost ứng dụng của bạn, bạn có thể có:

RequestHeader set Host "app.internal.domain"

và sau đó bạn sẽ thêm:

ProxyPreserveHost On

2
Cài đặt Proxypreservehost đã thực hiện thủ thuật một cách hoàn hảo. Cảm ơn!
Một số Linux Nerd

3

Cách giải quyết tồi tệ là sử dụng (chứ không phải: lạm dụng) / etc / hosts để trỏ app.iternal.domain vào localhost và sau đó định cấu hình Apache để nghe hai cổng bổ sung, một cổng cho mỗi ứng dụng và nhà phát triển ứng dụng của bạn. Vì vậy, Reverse proxy hai lần:

Listen 80
Listen 127.0.0.1:8001
Listen 127.0.0.1:8001

<VirtualHost *:80>
   ServerName app.proxy.domain
   ProxyPass / http://app.internal.domain:8001
</VirtualHost>
<VirtualHost *:80>
   ServerName app-dev.proxy.domain
   ProxyPass / http://app.internal.domain:8002
</VirtualHost>
<VirtualHost 127.0.0.1:8001>
   ServerName app.internal.domain
   ProxyPreserveHost On
   ProxyPass / http://10.0.1.1/
</VirtualHost>
<VirtualHost 127.0.0.1:8002>
   ServerName app.internal.domain
   ProxyPreserveHost On
   ProxyPass / http://10.0.1.2/
</VirtualHost>

2

Thêm vào cấu hình proxy ngược (foe app-dev.proxy ..):

RequestHeader edit Host ^app-dev.proxy.domain app.proxy.domain

Bạn phải bật mod_headers trước:

a2enmod headers

Máy chủ nội bộ 10.0.1.2 nên có

ServerName app.proxy.domain
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.