我正在尝试强制 Apache2 Web 服务器监听属于 HAProxy ( 192.168.50.30
) 的单个外部 IP,因此用户必须通过 HAProxy 才能使用 Apache2 Web 服务器。目前(不幸的是)用户可以通过http://192.168.50.10
和访问 Apache2 Web 服务器http://192.168.50.30
(仅应允许此操作)。
- HAProxy IP:
192.168.50.30
- Apache2 IP:
192.168.50.10
大多数帖子说改为Listen *:80
inListen IP-ADDRESS:80
就/etc/apache2/ports.conf
可以解决问题,但是当我尝试重新启动 apache2 时出现以下错误。
(99)Cannot assign requested address: AH00072: make_sock: could not bind to address 192.168.50.30:80
no listening sockets available, shutting down
我的当前设置
/etc/apache2/ports.conf
Listen 192.168.50.30:80
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
DocumentRoot /var/www/html
</VirtualHost>
/etc/apache2/apache2.conf
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
/etc/hosts
127.0.0.1 webserver1 webserver1
127.0.0.1 localhost
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
$ ifconfig -a
eth0 Link encap:Ethernet HWaddr 08:00:27:b5:33:dd
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:feb5:33dd/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:63695 errors:0 dropped:0 overruns:0 frame:0
TX packets:13588 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:75453727 (75.4 MB) TX bytes:983784 (983.7 KB)
eth1 Link encap:Ethernet HWaddr 08:00:27:9a:05:45
inet addr:192.168.50.10 Bcast:192.168.50.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe9a:545/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8721 errors:0 dropped:0 overruns:0 frame:0
TX packets:8392 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:656568 (656.5 KB) TX bytes:872702 (872.7 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
答案1
我会用访问控制为此。首先确保您的 Listen 语句仅列出 1 个 IP 地址(但这可能并不重要)。然后配置访问控制以仅允许从 HA 代理地址进行访问
Order deny,allow
Deny from all
Allow from 192.168.50.30
或者类似的东西只允许从 haproxy 地址访问。
答案2
您只能绑定到 ifconfig 中显示的 IP(即本地 IP)。听起来您更像是想限制 Apache 仅在 HAProxy 连接到它时才做出响应。
您可以使用 Apache 主机上的 IPTables 执行此操作:
iptables -A INPUT -s 192.168.1.30 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j REJECT
这表示允许 192.168.1.30 连接到端口 80,并拒绝所有其他连接。
事先执行“iptables -L”查看是否有任何其他规则,这可能会改变添加这些规则的具体方式。
另一种选择是使用 Apache 访问控制来做同样的事情:https://httpd.apache.org/docs/2.4/howto/access.html#host
<RequireAll>
Require all granted
Require ip 192.168.1.30
</RequireAll>
答案3
您可以按照如下方式更改“/etc/apache2/sites-available/000-default.conf”配置文件。
<VirtualHost *:80> to <VirtualHost 192.168.50.30:80>
它将解决您的问题。