我遇到过需要将一个域(domain1.com)代理传递到托管在共享 IP 地址(192.168.168.168)上的另一个域(domain2.com)的情况,但 domain2.com 的 DNS 指向的不是共享 IP 地址,因此 domain2.com 不能用作代理传递,只能用作共享 IP 地址。
由于共享 IP 地址具有多个主机名,是否有可以与 proxypass 一起使用的域或主机名配置选项来强制在另一端进行虚拟主机查找?例如,使用此 apache conf 文件将 domain1.com 代理到 192.168.168.168。
#Apache Reverse Proxy
SSLProxyEngine on
<Location />
ProxyPass http://192.168.168.168/
ProxyPassReverse http://192.168.168.168/
</Location>
是否可以进行任何更改来告诉在该 IP 上查找哪个域?
答案1
共享 IP 地址 (192.168.168.168) 上的网络服务器依赖具有已知主机/域名的 Host 标头来显示正确的内容。
您通常可以通过在指令中实际使用该主机/域名来轻松实现这一点ProxyPass
:
<Location />
ProxyPass http://domain2.com/
ProxyPassReverse http://domain2.com/
</Location>
由于您声明 domain2.com 的实际 DNS 条目不正确,您可以通过在 Web 服务器中添加具有 192.168.168.168 IP 地址的 domain2.com 来覆盖该条目hosts 文件
# /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
# added for Apache reverse proxy
192.168.168.168 domain2.com
另一种方法是明确配置 Apache 以设置正确的 Host 标头,并使用RequestHeader
指令,大致如下:
<Location />
RequestHeader set Host "domain2.com"
ProxyPass http://192.168.168.168/
ProxyPassReverse http://domain2.com/
</Location>