我想将 foo.com 上 80 和 443 上的所有流量映射到内部服务器:192.168.1.101。我有一个 VirtualHost(Ubuntu 上的 Apache 2.2)设置,如下所示(注意,我必须拆分下面的超链接,因为我是“新用户”):
<VirtualHost *:80>
ServerName foo.com
ServerAlias *.foo.com
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://192.168.1.101/
ProxyPassReverse / http://192.168.1.101/
</VirtualHost>
这对于 http 流量非常有效。但是,我似乎无法对 https 执行相同的操作。我尝试过:
将 VirtualHost *:80 更改为 * - 但这不起作用(我需要 http->http 和 https->https)
为 *:443 创建一个新的 VirtualHost 条目,重定向到 http://192.168.1.101/,但也会失败(浏览器超时)
我在这里和其他地方进行了一些搜索,我能找到的最接近的问题是这,但这并没有完全回答你的问题。
此外,出于好奇,我尝试将所有端口映射到 https(通过将两个 ProxyPass 行从 http 更改为 https(并从 VH 中删除 :80),但这也不起作用。您也会这样做吗?
有什么想法吗?提前致谢。
答案1
这曾经对我有用
<VirtualHost *:443>
ServerName domaine.com
SSLProxyEngine on
<Location />
ProxyPass https://www.something.com/
ProxyPassReverse https://www.something.com/
</Location>
</VirtualHost>
答案2
以下对我有用:
<VirtualHost A.B.C.D:443>
...
ProxyPass / https://192.168.1.101/
ProxyPass / https://192.168.1.101/
</VirtualHost>
(A.B.C.D
显然你的公共 IP 地址在哪里)
答案3
我个人将完全跳过 Apache 并使用 IPTABLES 将 80 和 443 上的所有流量转发到所需的 IP,想象这会带来更高的性能。
(假设您有权访问该机器来编辑防火墙规则)。
$iptables -A PREROUTING -t nat -i $EXTIF -p tcp --dport 80 -j DNAT --to 192.168.1.101:80
$iptables -A FORWARD -p tcp -m state --state NEW -d 192.168.1.101 --dport 80 -j ACCEPT
从我的防火墙中简短地摘录一下,我所做的正是你想做的事情。
答案4
如果您希望将所有请求重定向到安全网络,即通过 https,请添加以下内容:
<VirtualHost *:443>
ServerName ngmlx441
SSLEngine on
KeepAliveEnabled ON
SSLCipherSuite HIGH:MEDIUM
SSLProtocol all
SSLProxyEngine on
SecureProxy ON
SSLProxyEngine on
SSLCertificateFile /etc/httpd/conf.d/servername.crt
SSLCertificateKeyFile /etc/httpd/conf.d/servername.key
SSLCACertificateFile /etc/httpd/conf.d/orgination.crt
</VirtualHost>