gpt4 book ai didi

apache - 是否可以在 ProxyPass 中使用 "%{HTTP_HOST}"?

转载 作者:行者123 更新时间:2023-12-02 00:10:33 25 4
gpt4 key购买 nike

我正在尝试使用 apache2 和 mod_proxy 实现一个透明代理,目前它不执行任何操作。只是将流量转发到正确的“主机”。

我不希望它依赖于主机 - 但它是动态的,因此它适用于所有主机。我试着这样做:

RewriteEngine on
RewriteLogLevel 5
RewriteLog "/var/log/apache2/rewrite.log"
RewriteRule ^(.*)$ $1
ProxyPass / http://$1

我还尝试了其他几种方法(均无效)。有什么方法可以从 header 访问“主机”并在 ProxyPass 指令中使用它?

在 nginx 中,我会使用 $host、$remote_addr 等。在 apache 上有什么方法可以替换它?

我需要的是能够在 ProxyPass 命令中访问 %{HTTP_HOST}、%{REQUEST_URI} 和 %{SERVER_PORT}。

最佳答案

要将 Apache ProxyPass 指令与动态主机名一起使用,您还需要使用 ModRewrite。

目标

对虚拟主机的所有请求都将 ProxyPass 和 ProxyPassReverse(也称为“Apache 网关”)发送到 %{HTTP_HOST}

这样做有意义的唯一原因是如果您在 apache 服务器上有特定主机名的 localhost 条目

例子

本地主机文件

10.0.0.2 foo.bar.com    
10.0.0.3 bar.bar.com

工作原理

  1. 客户端向 foo.bar.com 发出请求(dnslookup 是一个公共(public) IP...您的 APACHE 服务器)
  2. 您的 apache 服务器有一个 localhost 条目 10.0.0.2 for foo.bar.com(您网络上的其他服务器)
  3. 请求通过 ModRewrite 并附加/path1,然后交给 ProxyPass 和 ProxyPassReverse
  4. ProxyPass 和 ProxyPassReverse 将调用转交给 ip 10.0.0.2 的 foo.bar.com

客户端请求 foo.bar.com ---反向代理到----> foo.bar.com/path1(在其他内部服务器上)

Apache 配置

    <VirtualHost *:443>
Servername *

# Must not contain /path1 in path (will add /path1)
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/path1/.*
RewriteRule ^/(.*) https://%{HTTP_HOST}/path1$1 [NC,R=302,L]

# Must contain /path1 in path (will send request to the proxy)
RewriteEngine On
RewriteOptions Inherit
RewriteCond %{REQUEST_URI} ^/path1/.*
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [NC,P]

SSLEngine on
SSLProxyEngine On
ProxyRequests Off

ProxyPass / https://$1/
ProxyPassReverse / https://$1/

ProxyPreserveHost On

###################
# SSL Constraints #
###################

SSLProtocol -ALL +SSLv3 +TLSv1

# Choose cipher suites
SSLHonorCipherOrder On
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:!LOW:!SSLv2:!EXPORT

# SameOrigin The page can only be displayed in a frame on the same origin as the page itself
Header set X-Frame-Options SAMEORIGIN

SSLCertificateFile /etc/apache2/example.crt
SSLCertificateKeyFile /etc/apache2/example.key
SSLCertificateChainFile /etc/apache2/gd_bundle.crt
SetOutputFilter INFLATE;proxy-html;DEFLATE
</VirtualHost>

关于apache - 是否可以在 ProxyPass 中使用 "%{HTTP_HOST}"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15678945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com