• Linux下 Apache 采用通配符*进行多站点配置


    前言

    VirtualHost 匹配规则

    VirtualHost 匹配规则参考:虚拟主机匹配的深入讨论
    VirtualHost 匹配规则较为复杂,在配置多站点时,尽量对VirtualHost 的IP采用同一写法。

    采用通配符*进行多站点配置

    VirtualHost 的IP采用通配符*

    首先,要有个默认站点

    默认站点用来接收非预期的站点请求。
    /etc/httpd/conf.d创建01_default.conf(确保01_default.conf排在其它配置文件前面)文件。在01_default.conf文件中配置默认站点。

    01_default.conf内容如下:

    <VirtualHost _default_:80>
        DocumentRoot "/var/www/default/html"
        ServerName localhost
    VirtualHost>
    
    <VirtualHost _default_:443>
        DocumentRoot "/var/www/default/html"
        ServerName localhost
    
        SSLEngine on
        SSLProtocol all -SSLv2 -SSLv3
        SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
        SSLCertificateFile /etc/pki/tls/certs/localhost.crt
        SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
    VirtualHost>
    
    <VirtualHost _default_:*>
        DocumentRoot "/var/www/empty/html"
        ServerName localhost
    
        <LocationMatch ".*">
            ErrorDocument 403 "<H1>403H1>"
            ErrorDocument 404 "<H1>404H1>"
    
            RewriteEngine On
            RewriteRule ".*" "-" [R=404]
        LocationMatch>
    
    VirtualHost>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 安装mod_ssl时,自动生成了默认的localhost证书 /etc/pki/tls/certs/localhost.crt/etc/pki/tls/private/localhost.key 。可替换。
    • 通配IP时,尽量使用_default_代替通配符*
    • 如果找不到匹配ServerName的VirtualHost,则从匹配端口号的虚拟主机中选择第一个出现的VirtualHost。

    站点1

    /etc/httpd/conf.d创建mydomain1.conf

    mydomain1.conf内容如下:

    <VirtualHost *:80>
        DocumentRoot "/var/www/mydomain1/html"
        ServerName mydomain1
    
    VirtualHost>
    
    <VirtualHost *:443>
        DocumentRoot "/var/www/mydomain1/html"
        ServerName mydomain1
    
        SSLEngine on
        SSLCertificateFile /etc/httpd/cert.d/mydomain1.crt
        SSLCertificateKeyFile /etc/httpd/cert.d/mydomain1.key
    VirtualHost>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    站点2

    /etc/httpd/conf.d创建mydomain2.conf

    mydomain2.conf内容如下:

    <VirtualHost *:80>
        DocumentRoot "/var/www/mydomain2/html"
        ServerName mydomain2
    
    VirtualHost>
    
    <VirtualHost *:443>
        DocumentRoot "/var/www/mydomain2/html"
        ServerName mydomain2
    
        SSLEngine on
        SSLCertificateFile /etc/httpd/cert.d/mydomain2.crt
        SSLCertificateKeyFile /etc/httpd/cert.d/mydomain2.key
    VirtualHost>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    注意事项

    _default_*

    • 通配符*作为IP时,匹配任何IP地址。
    • 字符串_default_是通配符*的别名(_default_*的意义相同)。
    • 在虚拟主机声明中使用*的优先级将高于_default_(暂未发现此规则在哪里生效)。

    ServerName 和 ServerAlias

    • ServerName 和 ServerAlias 没有什么不同
    • (匹配 ServerName 的 VirtualHost、匹配 ServerAlias 的 VirtualHost)按VirtualHost出现的顺序进行处理

    参考

    https://httpd.apache.org/
    https://httpd.apache.org/docs/2.4/
    https://httpd.apache.org/docs/2.4/vhosts/examples.html

  • 相关阅读:
    Pytorch速成教程
    Linux上如何部署SpringBoot项目——手把手教会你
    2023版 STM32实战2 按键驱动(电路与代码都讲解)
    JAVA 中集合取交集
    Ap01- 自适应 AutoSAR概述和简介
    大神教你~Nginx网络服务
    面试题:JS如何最快的执行垃圾回收机制
    java毕业设计研究生实验室综合管理系统Mybatis+系统+数据库+调试部署
    超分辨率技术
    关于对Java中volatile关键字的理解与简述
  • 原文地址:https://blog.csdn.net/sayyy/article/details/126699683