运行工作结构原理:
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后端之间进行选择 。
文章插图
实际上,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 80Listen 443
为:Listen 127.0.0.2:80Listen 127.0.0.2:443
保存并关闭文件 。同时转到/etc/apache2/sites-enabled /目录,编辑虚拟主机文件 。更改:<VirtualHost *:80>
为:<VirtualHost 127.0.0.2:80>
如果有SSL虚拟主机,则也要更改<VirtualHost *:443>
为<VirtualHost 127.0.0.2:443>
重启Apachesudo systemctl restart apache2
CentOSCentOS上编辑/etc/httpd/conf/httpd.confsudo nano /etc/httpd/conf/httpd.conf
找到Listen 80
更改为Listen 127.0.0.2:80
保存并关闭然后转向/etc/httpd/conf.d/ 更改:<VirtualHost *:80>
为<VirtualHost 127.0.0.2:80>
SSL更改<VirtualHost *:443>
为<VirtualHost 127.0.0.2:443>
在/etc/httpd/conf.d/ssl.conf里找到Listen 443 https
更改为:Listen 127.0.0.2:443 https
保存、关闭并重启服务器:sudo systemctl restart httpd
四、配置HAProxy安装HAProxyDebian/Ubuntu
sudo apt install haproxy
CentOSsudo dnf install haproxy
编辑HAProxy配置文件sudo nano /etc/haproxy/haproxy.cfg
在文件末尾添加以下代码段,这将使HAPorxy侦听公用IP地址的端口80,并将HTTP请求从端口80重定向到端口443 。将12.34.56.78替换为服务器的公用IP地址 。frontend httpbind 12.34.56.78:80mode httpredirect scheme https code 301
SSLfrontend httpsbind 12.34.56.78:443mode tcptcp-request inspect-delay 5stcp-request content accept if { req_ssl_hello_type 1 }
然后定义Nginx和Apache后端 。backend nginxmode tcpoption ssl-hello-chkserver nginx 127.0.0.1:443 checkbackend apachemode tcpoption ssl-hello-chkserver 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 checkserver apache 127.0.0.2:443 send-proxy-v2 check
我们还需要在Nginx和Apache中添加一些配置 。
推荐阅读
- Linux 安装mysql5.7.29源码安装
- 微信这7种行为直接封号,愿你不在其中!
- 搜索于小程序的重要性,小程序在线直播?
- 流媒体服务器可以应用在那些场景中?
- 为什么在中国做程序员,比起掉头发,更怕掉队?那国外程序员呢?
- 网站推广五“不要”准则
- 考研|几年不上班了,简历上要不要写在一家小公司工作至今?
- 三角牌电饭煲怎么样
- 出门在外总是睡不好 7大招让你旅途愉快
- 如何防治疾病 推荐4款药茶