您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

Linux在同一个服务器上运行Apache、Nginx和HAProxy

时间:2020-03-08 10:34:09  来源:  作者:

运行工作结构原理:

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后端之间进行选择。

Linux在同一个服务器上运行Apache、Nginx和HAProxy

 

实际上,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 /目录,编辑虚拟主机文件。 更改:

<VirtualHost *:80>

为:

<VirtualHost 127.0.0.2:80>

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

<VirtualHost *:443>

<VirtualHost 127.0.0.2:443>

重启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/ 更改:

<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

安装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

Linux在同一个服务器上运行Apache、Nginx和HAProxy

 

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

sudo a2enmod remoteip

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

RemoteIPProxyProtocol On
RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 127.0.0.1

有如:

<VirtualHost 127.0.0.2:443>
    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


Tags:Linux 服务器   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
在做网络服务的时候tcp并发服务端程序的编写必不可少。tcp并发通常有几种固定的设计模式套路,他们各有优点,也各有应用之处。下面就简单的讨论下这几种模式的差异:单进程,单线程...【详细内容】
2020-06-02  Tags: Linux 服务器  点击:(49)  评论:(0)  加入收藏
安全是IT行业一个老生常谈的话题了,从之前的“棱镜门”事件中折射出了很多安全问题,处理好信息安全问题已变得刻不容缓。因此做为运维人员,就必须了解一些安全运维准则,同时,要保...【详细内容】
2020-05-06  Tags: Linux 服务器  点击:(55)  评论:(0)  加入收藏
最近收到一个工作要求,让我完成一个每天一次的Linux服务器巡检工作(服务器的版本为红帽6.4),不可以使用监控软件来操作。在这里,把我的巡检过程和巡检脚本放送给大家做一参考...【详细内容】
2020-04-29  Tags: Linux 服务器  点击:(144)  评论:(0)  加入收藏
运行工作结构原理:Nginx监听127.0.0.1:80和127.0.0.1:443Apache监听127.0.0.2:80和127.0.0.2:443HAProxy侦听公用IP地址的端口80和443。 它将HTTP请求从端口80重定向到端口44...【详细内容】
2020-03-08  Tags: Linux 服务器  点击:(91)  评论:(0)  加入收藏
如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个 专业的 Linux 系统管理员。有些 Linux 发行版会提供 GUI 程序来进行系统...【详细内容】
2019-11-04  Tags: Linux 服务器  点击:(102)  评论:(0)  加入收藏
这个命令可以快速查看机器的负载情况。在Linux系统中,这些数据表示等待CPU资源的进程和阻塞在不可中断IO进程(进程状态为D)的数量。这些数据可以让我们对系统资源使用有一个宏观的了解。...【详细内容】
2019-07-30  Tags: Linux 服务器  点击:(285)  评论:(0)  加入收藏
▌简易百科推荐
阿里云镜像源地址及安装网站地址https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b111kK44P更新源之前把之前的国外的镜像先备份一下 切换到yumcd...【详细内容】
2021-12-27  干程序那些事    Tags:CentOS7镜像   点击:(1)  评论:(0)  加入收藏
前言在实现TCP长连接功能中,客户端断线重连是一个很常见的问题,当我们使用netty实现断线重连时,是否考虑过如下几个问题: 如何监听到客户端和服务端连接断开 ? 如何实现断线后重...【详细内容】
2021-12-24  程序猿阿嘴  CSDN  Tags:Netty   点击:(12)  评论:(0)  加入收藏
一. 配置yum源在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repovim /etc/yum.repos.d/google-chrome.repo按i进入编辑模式写入如下内容:[google-chrome]name=googl...【详细内容】
2021-12-23  有云转晴    Tags:chrome   点击:(7)  评论:(0)  加入收藏
一. HTTP gzip压缩,概述 request header中声明Accept-Encoding : gzip,告知服务器客户端接受gzip的数据 response body,同时加入以下header:Content-Encoding: gzip:表明bo...【详细内容】
2021-12-22  java乐园    Tags:gzip压缩   点击:(9)  评论:(0)  加入收藏
yum -y install gcc automake autoconf libtool makeadduser testpasswd testmkdir /tmp/exploitln -s /usr/bin/ping /tmp/exploit/targetexec 3< /tmp/exploit/targetls -...【详细内容】
2021-12-22  SofM    Tags:Centos7   点击:(7)  评论:(0)  加入收藏
Windows操作系统和Linux操作系统有何区别?Windows操作系统:需支付版权费用,(华为云已购买正版版权,在华为云购买云服务器的用户安装系统时无需额外付费),界面化的操作系统对用户使...【详细内容】
2021-12-21  卷毛琴姨    Tags:云服务器   点击:(6)  评论:(0)  加入收藏
参考资料:Hive3.1.2安装指南_厦大数据库实验室博客Hive学习(一) 安装 环境:CentOS 7 + Hadoop3.2 + Hive3.1 - 一个人、一座城 - 博客园1.安装hive1.1下载地址hive镜像路径 ht...【详细内容】
2021-12-20  zebra-08    Tags:Hive   点击:(9)  评论:(0)  加入收藏
以下是服务器安全加固的步骤,本文以腾讯云的CentOS7.7版本为例来介绍,如果你使用的是秘钥登录服务器1-5步骤可以跳过。1、设置复杂密码服务器设置大写、小写、特殊字符、数字...【详细内容】
2021-12-20  网安人    Tags:服务器   点击:(7)  评论:(0)  加入收藏
项目中,遇到了一个问题,就是PDF等文档不能够在线预览,预览时会报错。错误描述浏览器的console中,显示如下错误:nginx代理服务报Mixed Content: The page at ******** was loaded...【详细内容】
2021-12-17  mdong    Tags:Nginx   点击:(7)  评论:(0)  加入收藏
转自: https://kermsite.com/p/wt-ssh/由于格式问题,部分链接、表格可能会失效,若失效请访问原文密码登录 以及 通过密钥实现免密码登录Dec 15, 2021阅读时长: 6 分钟简介Windo...【详细内容】
2021-12-17  LaLiLi    Tags:SSH连接   点击:(16)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条