linux 服务器只能看到一个ha,Linux在同一个服务器上运行Apache、Nginx和HAProxy

运行工作结构原理:

Nginx监听127.0.0.1:80和127.0.0.1:443

Apache监听127.0.0.2:80和127.0.0.2:443

HAProxy侦听公用IP地址的端口80和443。 它将HTTP请求从端口80重定向到端口443。当请求到达端口443时,它将通过分析HTTPS请求中的SNI标头在Nginx和Apache后端之间进行选择。

14951d2de5f7f673f596c7d49582e0ee.png

实际上,Cloudflare(CDN提供商)还使用SNI标头来确定如何将HTTPS请求路由到原始服务器。

一、停用Nginx和Apache

要在Debian、Ubuntu和centos上停用Nginx,请运行:

sudo systemctl stop nginx

停用Debian/Ubuntu上的Apache:

sudo systemctl stop apache2

停用CentOS上的Apache:

sudo systemctl stop httpd

二、在Nginx中更改监听端口

我们需要让Nginx监听127.0.0.1:80。 在/etc/nginx/conf.d/或/etc/nginx/sites-enabled/中打开您的Nginx配置文件,并找到以下命令行。

listen 80;

更改为:

listen 127.0.0.1:80;

如果在Nginx服务器上启用了https,则还要查找

listen 443 ssl;

更改为:

listen 127.0.0.1:443 ssl;

Nginx主配置文件/etc/nginx/nginx.conf可能包括侦听端口80或443的默认虚拟主机,因此您可能也需要编辑此文件。

重新启动Nginx以使更改生效。

sudo systemctl restart nginx

三、在Apache中更改监听端口

我们需要让Apache在127.0.0.2:80上监听。

Debian / Ubuntu

在Debian和Ubuntu上,编辑/etc/apache2/ports.conf文件。

sudo nano /etc/apache2/ports.conf

更改:

Listen 80

Listen 443

为:

Listen 127.0.0.2:80

Listen 127.0.0.2:443

保存并关闭文件。 同时转到/etc/apache2/sites-enabled /目录,编辑虚拟主机文件。 更改:

为:

如果有SSL虚拟主机,则也要更改

重启Apache

sudo systemctl restart apache2

CentOS

CentOS上编辑/etc/httpd/conf/httpd.conf

sudo nano /etc/httpd/conf/httpd.conf

找到

Listen 80

更改为

Listen 127.0.0.2:80

保存并关闭然后转向/etc/httpd/conf.d/ 更改:

SSL更改

在/etc/httpd/conf.d/ssl.conf里找到

Listen 443 https

更改为:

Listen 127.0.0.2:443 https

保存、关闭并重启服务器:

sudo systemctl restart httpd

四、配置HAProxy

安装HAProxy

Debian/Ubuntu

sudo apt install haproxy

CentOS

sudo dnf install haproxy

编辑HAProxy配置文件

sudo nano /etc/haproxy/haproxy.cfg

在文件末尾添加以下代码段,这将使HAPorxy侦听公用IP地址的端口80,并将HTTP请求从端口80重定向到端口443。将12.34.56.78替换为服务器的公用IP地址。

frontend http

bind 12.34.56.78:80

mode http

redirect scheme https code 301

SSL

frontend https

bind 12.34.56.78:443

mode tcp

tcp-request inspect-delay 5s

tcp-request content accept if { req_ssl_hello_type 1 }

然后定义Nginx和Apache后端。

backend nginx

mode tcp

option ssl-hello-chk

server nginx 127.0.0.1:443 check

backend apache

mode tcp

option ssl-hello-chk

server apache 127.0.0.2:443 check

您可以恢复默认定义为:

default_backend nginx

我们将在HTTPS请求中使用SNI标头重定向到正确的后端。 例如,如果Nginx服务于domain1.com,而Apache服务于domain2.com,则添加以下两行。

use_backend nginx if { req_ssl_sni -i domain1.com }

use_backend apache if { req_ssl_sni -i domain2.com }

如果客户端未在TLS客户端Hello中指定服务器名称,则HAproxy将使用默认后端(nginx)。

保存并关闭文件。 然后重新启动HAproxy。

sudo systemctl restart haproxy

现在,Apache、Nginx和HAProxy可以在同一服务器上运行。

如何将客户的IP地址转发到后端

默认情况下,Apache和Nginx只能看到HAProxy的IP地址。 要获取客户端的真实IP地址,请确保已在HAProxy的后端定义中添加了“ send-proxy-v2”选项,如下所示。

server nginx 127.0.0.1:443 send-proxy-v2 check

server apache 127.0.0.2:443 send-proxy-v2 check

我们还需要在Nginx和Apache中添加一些配置。

Nginx

如下所示,在Nginx监听指令中添加proxy_protocol。

listen 127.0.0.2:443 ssl http2 proxy_protocol;

然后在Nginx http {}块中添加以下两个指令。

set_real_ip_from 127.0.0.1;

real_ip_header proxy_protocol;

保存关闭然后重启Nginx.

sudo systemctl reload nginx

Apache

abd78597b3c9ae2e31fc4d0ed0f16de4.png

如果您在Debian / Ubuntu上使用Apache,则需要启用远程模块。 (默认情况下,此模块已在CentOS上启用。)

sudo a2enmod remoteip

然后在Apache虚拟主机配置文件中添加以下3行。

RemoteIPProxyProtocol On

RemoteIPHeader X-Forwarded-For

RemoteIPTrustedProxy 127.0.0.1

有如:

ServerName www.example.com

RemoteIPProxyProtocol On

RemoteIPHeader X-Forwarded-For

RemoteIPTrustedProxy 127.0.0.1

保存并关闭文件。 然后我们还需要更改组合日志格式。 编辑Apache主配置文件。

sudo nano /etc/apache2/apache2.conf

或者

sudo nano /etc/httpd/conf/httpd.conf

找到以下信息:

LogFormat "%h %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"" combined

更换为:

LogFormat "%a %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"" combined

保存并关闭文件。 然后重新启动Apache,以使更改生效。

sudo systemctl restart apache2

或者

sudo systemctl restart httpd

请注意,RemoteIPProxyProtocolOn指令仅在Apache 2.4.31及更高版本中可用。 要检查您的Apache版本,请运行

sudo apache2 -v

或者

sudo httpd -v

Ubuntu 18.04随Apache 2.4.29一起提供。 如果您的Apache版本不符合此要求,则应删除HAProxy后端定义中的send-proxy-v2。 CentOS 8附带了Apache 2.4.37。

最后,重新启动HAProxy。

sudo systemctl restart haproxy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值