Apache httpd 入门实战(2)–简单使用

本文主要介绍 Apache 的实际使用,文中所使用到的软件版本:Centos 7.9.2009、Httpd 2.4.55。

1、反向代理

涉及到 Https 站点时,安装 Apache 时需要启用 ssl,可参考 Apache httpd 入门实战(1)--概念及安装

1.1、被代理站点为 Http 站点

打开 conf/httpd.conf 文件,修改或新增相应的配置项:

Listen 8080
ServerName 10.49.196.33:8080

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

include conf/extra/my-vhosts.conf

新建 conf/extra/my-vhosts.conf 文件:

<VirtualHost *:8080>
    ServerAdmin admin@abc.com
    ServerName abc.com
    ServerAlias abc.com
    ErrorLog "logs/abc.com-error_log"
    CustomLog "logs/abc.com-access_log" common

    ProxyPass /qwe http://10.49.196.1:9090/qwe
    ProxyPassReverse /qwe http://10.49.196.1:9090/qwe
</VirtualHost>

代理地址为 http://10.49.196.33:8080/qwe,被代理的地址为 http://10.49.196.1:9090/qwe。

1.2、被代理站点为 Https 站点

打开 conf/httpd.conf 文件,修改或新增相应的配置项:

Listen 8080
ServerName 10.49.196.33:8080

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule ssl_module modules/mod_ssl.so

include conf/extra/my-vhosts.conf

新建 conf/extra/my-vhosts.conf 文件:

<VirtualHost *:8080>
    ServerAdmin admin@abc.com
    ServerName abc.com
    ServerAlias abc.com
    ErrorLog "logs/abc.com-error_log"
    CustomLog "logs/abc.com-access_log" common
 
    SSLProxyEngine On
    ProxyPass /asd https://10.49.196.1:9091/asd
    ProxyPassReverse /asd https://10.49.196.1:9091/asd
</VirtualHost>

代理地址为 http://10.49.196.33:8080/asd,被代理的地址为 https://10.49.196.1:9091/asd。

1.3、代理站点启用 Https

1.3.1、生成证书

代理站点启用 Https,需要使用 OpenSSL 创建证书。

A、生成根证书

openssl genrsa -out ca.key
openssl req -new -key ca.key -out ca.csr
openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.pem

B、生成服务端证书

openssl genrsa -out server.key
openssl req -new -key server.key -out server.csr
openssl ca -days 3650 -in server.csr -cert ca.pem -keyfile ca.key -out server.pem

C、生成客户端证书

openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr
openssl ca -days 1500 -in client.csr -cert ca.pem -keyfile ca.key -out client.pem
openssl pkcs12 -export -clcerts -in client.pem -inkey client.key -out client.p12

使用 OpenSSL 创建证书的详细说明可参考:OpenSSL 介绍(5)--数字证书;这里生成的证书假设都存放在 /home/mongo/ssl 目录下。

1.3.2、Apache 中配置 Https

打开 conf/httpd.conf 文件,修改或新增相应的配置项:

Listen 8443
ServerName 10.49.196.33:8443

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule ssl_module modules/mod_ssl.so

include conf/extra/my-vhosts.conf

新建 conf/extra/my-vhosts.conf 文件:

<VirtualHost *:8443>
    ServerAdmin admin@abc.com
    ServerName abc.com
    ServerAlias abc.com
    ErrorLog "logs/abc.com-error_log"
    CustomLog "logs/abc.com-access_log" common

    SSLEngine on
    SSLCertificateFile /home/mongo/ssl/server.pem
    SSLCertificateKeyFile /home/mongo/ssl/server.key

    ProxyPass /qwe http://10.49.196.1:9090/qwe
    ProxyPassReverse /qwe http://10.49.196.1:9090/qwe

    SSLProxyEngine On
    ProxyPass /asd https://10.49.196.1:9091/asd
    ProxyPassReverse /asd https://10.49.196.1:9091/asd
</VirtualHost>

代理地址为 https://10.49.196.33:8443/qwe、https://10.49.196.33:8443/asd,被代理的分别地址为 http://10.49.196.1:9090/qwe、https://10.49.196.1:9091/asd。

如果需要验证客户端,则配置如下:

<VirtualHost *:8443>
    ServerAdmin admin@abc.com
    ServerName abc.com
    ServerAlias abc.com
    ErrorLog "logs/abc.com-error_log"
    CustomLog "logs/abc.com-access_log" common

    SSLEngine on
    SSLCertificateFile /home/mongo/ssl/server.pem
    SSLCertificateKeyFile /home/mongo/ssl/server.key
    
    SSLVerifyClient require
    SSLCACertificateFile /home/mongo/ssl/ca.pem

    ProxyPass /qwe http://10.49.196.1:9090/qwe
    ProxyPassReverse /qwe http://10.49.196.1:9090/qwe

    SSLProxyEngine On
    ProxyPass /asd https://10.49.196.1:9091/asd
    ProxyPassReverse /asd https://10.49.196.1:9091/asd
</VirtualHost>

2、负载均衡

打开 conf/httpd.conf 文件,修改或新增相应的配置项:

Listen 8080
ServerName 10.49.196.33:8080

LoadModule watchdog_module modules/mod_watchdog.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so  
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so

include conf/extra/my-vhosts.conf

2.1、不考虑 session

新建 conf/extra/my-vhosts.conf 文件:

<VirtualHost *:8080>
    ServerAdmin admin@abc.com
    ServerName abc.com
    ServerAlias abc.com
    ErrorLog "logs/abc.com-error_log"
    CustomLog "logs/abc.com-access_log" common

    <Proxy balancer://mycluster>
        BalancerMember http://10.49.196.1:9090 loadfactor=2
        BalancerMember http://10.49.196.2:9090 loadfactor=3 timeout=3
        ProxySet lbmethod=byrequests
    </Proxy>
    ProxyPass /xyz balancer://mycluster/xyz
    ProxyPassReverse /xyz balancer://mycluster/xyz
</VirtualHost>

lbmethod:负载均衡算法
lbmethod=byrequests:按请求次数负载均衡
lbmethod=bytraffic:按流量负载均衡
lbmethod=bybusyness:按繁忙程度(挂起的请求数)负载均衡
lbmethod=heartbeat:按心跳数负载均衡

loadfactor:负载因子;timeout:超时时间,单位为秒。

代理地址为 http://10.49.196.33:8080/xyz,被代理的地址为 http://10.49.196.1:9090/xyz、http://10.49.196.2:9090/xyz。

2.2、session 粘滞

对应有 session 的情况,同一客户端需要把请求转发到同一个后端服务。新建 conf/extra/my-vhosts.conf 文件:

<VirtualHost *:8080>
    ServerAdmin admin@abc.com
    ServerName abc.com
    ServerAlias abc.com
    ErrorLog "logs/abc.com-error_log"
    CustomLog "logs/abc.com-access_log" common

    <Proxy balancer://mycluster>
        Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/tsp" env=BALANCER_ROUTE_CHANGED
        BalancerMember http://10.49.196.1:9090 loadfactor=2 route=server1
        BalancerMember http://10.49.196.2:9090 loadfactor=3 route=server2
        ProxySet lbmethod=byrequests
        ProxySet stickysession=ROUTEID
    </Proxy>
    ProxyPass /xyz balancer://mycluster/xyz
    ProxyPassReverse /xyz balancer://mycluster/xyz
</VirtualHost>

Header add Set-Cookie:设置名称为 ROUTEID 的 cookie
ProxySet stickysession=ROUTEID:根据 cookie ROUTEID 的值路由到相应的后端服务

2.3、failover

<Proxy balancer://myset>
    BalancerMember http://www2.example.com:8080
    BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1
    BalancerMember http://spare1.example.com:8080 status=+R
    BalancerMember http://spare2.example.com:8080 status=+R
    BalancerMember http://hstandby.example.com:8080 status=+H
    BalancerMember http://bkup1.example.com:8080 lbset=1
    BalancerMember http://bkup2.example.com:8080 lbset=1
    ProxySet lbmethod=byrequests
</Proxy>

ProxyPass "/images/"  "balancer://myset/"
ProxyPassReverse "/images/"  "balancer://myset/"

A、http://www2.example.com:8080 或 http://www3.example.com:8080 不可用时,才会把流量分配给 http://spare1.example.com:8080 和 http://spare2.example.com:8080。一个备用的节点会替换一个不可用的节点。
B、当 http://www2.example.com:8080、http://www2.example.com:8080、http://www2.example.com:8080、http://www2.example.com:8080 都不可用时,才会把流量分配给热备节点:http://hstandby.example.com:8080。
C、当所有 lbset=0(后端节点的优先级,默认为 0;数值越低的,优先级越高) 的节点(正常节点、备用节点、热备节点)都不可用时,才会把流量分配给备份节点:http://bkup1.example.com:8080 和 http://bkup2.example.com:8080。

2.4、负载均衡管理器

<VirtualHost *:8080>
...
  <Location "/balancer-manager">
      SetHandler balancer-manager
      Require ip 10.49.196.35
  </Location>
...
</VirtualHost>

Require ip:设置可用访问负载均衡器的 ip。

通过负载均衡管理页面(http://10.49.196.33:6060/balancer-manager)可以查看负载均衡的配置和状态,还可以在页面上直接修改配置。

Apache httpd 入门实战(2)--简单使用

 

 

参考:https://httpd.apache.org/docs/2.4/howto/reverse_proxy.html。

 

原文链接:https://www.cnblogs.com/wuyongyin/p/17236841.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Apache httpd 入门实战(2)–简单使用 - Python技术站

(0)
上一篇 2023年4月17日
下一篇 2023年4月17日

相关文章

  • Failed to execute goal org…的解决办法

    针对“Failed to execute goal org…的解决办法”的问题,我为你提供完整的攻略,以下为具体步骤: 问题背景 当使用mvn命令构建Maven项目时,可能会遇到以下错误信息: Failed to execute goal org… 该错误信息一般会提示缺失相关的依赖或者插件,导致项目构建失败。 解决方案 针对该问题,可以按照以下步骤…

    Java 2023年5月20日
    00
  • Java下载文件时文件名乱码问题解决办法

    关于Java下载文件时出现文件名乱码问题的解决办法,我将提供以下完整攻略: 问题描述 当我们使用Java程序进行文件下载时,有时会出现文件名乱码的问题。这是因为在Http响应头中,如果文件名中含有中文等非英文字符,服务器会使用UTF-8对文件名进行编码,而Java程序默认使用ISO-8859-1来解码文件名,因此就会出现乱码问题。 解决办法 1.获取文件名编…

    Java 2023年5月19日
    00
  • 详解Jackson 使用以及性能介绍

    详解Jackson 使用以及性能介绍 Jackson 简介 Jackson 是一个用于在Java对象和 json 数据之间进行转换的框架。它支持众多 json 数据格式,诸如 JSON-LD、SMILE 等。Jackson 是一个流式处理 JSON 的工具,它很容易与其它 JSON 处理工具进行集成,同时在序列化和反序列化性能方面也表现得相当优异。 Jack…

    Java 2023年5月26日
    00
  • Mac下使用charles遇到的问题以及解决办法

    下面是 Mac 下使用 Charles 遇到的问题以及解决办法的攻略: 1. Charles 网络监控工具简介 Charles 是一款用于网络调试和监控的工具,它可以拦截 HTTP 和 HTTPS 的请求和响应,方便开发人员对于应用程序、网站等进行分析和调试。同时,它还提供了网络传输速率、请求次数、响应时间等统计功能,对于网站优化和性能测试也有很大的帮助。 …

    Java 2023年5月23日
    00
  • Java中@DateTimeFormat和@JsonFormat注解介绍

    当在Java中处理时间或日期数据时,我们常需要使用特定的格式将其转换成字符串或反向解析。而在Spring框架中,我们可以使用@DateTimeFormat和@JsonFormat两个注解来精细地控制时间和日期的格式化。下面将详细介绍这两个注解的使用方法和示例。 @DateTimeFormat注解介绍 1. 作用 @DateTimeFormat注解可以用于解析…

    Java 2023年5月20日
    00
  • springboot+spring data jpa实现新增及批量新增方式

    关于“springboot+spring data jpa实现新增及批量新增方式”的完整攻略,具体步骤如下: 步骤一:添加依赖 在pom.xml文件中添加Spring Data JPA的依赖: <dependency> <groupId>org.springframework.data</groupId> <arti…

    Java 2023年6月2日
    00
  • Java MyBatis可视化代码生成工具使用教程

    下面是详细的Java MyBatis可视化代码生成工具使用教程攻略: 1. 下载安装Java MyBatis可视化代码生成工具 Java MyBatis可视化代码生成工具是基于Java语言实现的代码生成工具,可以生成具有MyBatis框架的Java代码。你可以从官网下载该工具并进行安装。 2. 连接数据库 Java MyBatis可视化代码生成工具需要连接数…

    Java 2023年5月20日
    00
  • Java实现byte[]转List的示例代码

    实现byte[]转List可以使用Java内置的List和Arrays两个类来实现,以下是示例代码和详细攻略: 示例代码: import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ByteToListExample { public st…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部