强制 Apache2 Web 服务器监听单个外部 IP

强制 Apache2 Web 服务器监听单个外部 IP

我正在尝试强制 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 *:80inListen 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>

它将解决您的问题。

相关内容