nginx 和 apache 在同一物理服务器上-如何配置?

nginx 和 apache 在同一物理服务器上-如何配置?

我需要在一个物理服务器上运行 apache 和 nginx。最好两者都监听 443,但在不同的域上。据我所知,这只有在两个 IP 的情况下才有可能。从旧文档中,我找到了一个适用于 ubuntu 10.04 的工作示例,并希望让它在 ubunut 16.04 上运行。

在此设置中,有 2 个 IP:

enp0s8    Link encap:Ethernet  HWaddr 08:00:27:4f:d8:fb  
          inet addr:192.143.56.200  Bcast:192.143.56.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe4f:d8fb/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:323 errors:0 dropped:0 overruns:0 frame:0
          TX packets:241 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:32078 (32.0 KB)  TX bytes:128319 (128.3 KB)

enp0s8:1  Link encap:Ethernet  HWaddr 08:00:27:4f:d8:fb  
          inet addr:192.143.56.201  Bcast:192.143.56.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

使用 iptables 进行端口转发:

sudo iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
REDIRECT   tcp  --  anywhere             192.168.56.201       tcp dpt:https redir ports 8000

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
REDIRECT   tcp  --  anywhere             192.168.56.201       tcp dpt:https redir ports 8000

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

nginx 配置:

    listen 8000 ssl http2 default_server;
    listen [::]:8000 ssl http2 default_server;

理论上这应该可行。不幸的是,它不行。当 apache 停止并且 nginx 正在运行时,我无法访问 url 中带有 :8000 的文件。离开端口后,我确实收到 ERR_CONNECTION_REFUSED 一旦我启动 apache,它将接管连接并提供错误。

提前感谢您对此提供的任何帮助!

答案1

您需要指定 nginx 应该监听的接口的 IP。

如果添加: listen 8000 ssl http2 default_server; listen [::]:8000 ssl http2 default_server;

它将在 8000 端口、所有 ipv4 接口 IP(第一行)和所有 ipv6 接口 IP(第二行)上监听。

因此,要使 nginx 仅监听 IP 地址 192.143.56.201 的端口(比如 443),你需要执行以下命令: listen 192.143.56.201:8000

请注意,我不确定 nginx 是否能够仅监听接口别名(您的设置仅显示一个带有额外别名的接口)。

您可以测试它,或者直接考虑添加第二个独立接口(第二个网卡)。使用 VLAN(不同于网络别名)也应该有效,但您需要一个支持 802.1Q 的交换机(这样它就可以在软件包上标记/取消标记 vlan)

相关内容