apache配置文件

        安装apache后,需要对配置文件进行自定义的设置,首先进入到Apache的安装目录,有4个常用文件夹:

  1. bin:二进制文件存储文件夹,用于控制Apache服务,添加环境后,可直接使用命令

    • ab:压力测试工具
    • apachectl:控制apache启动,是一个脚本,实际调用httpd命令
    • apxs:扩展模块工具
    • htpasswd:建立认证文件,设置账号密码
    • httpd:apache控制命令
    • rotatelogs:日志轮询命令
  2. conf:用于存储Apache服务的配置文件

    • httpd.conf:主配置文件
    • extra:辅助配置文件目录
  3. htdocs:默认站点存储目录,其中默认存在的index.html就是默认访问的页面
  4. logs:默认日志文件存储目录

主配置文件

        在安装apache的时候复制了一份主配置文件,编辑httpd.conf

  1. 配置服务器的根目录路径:指示目录下能找到服务器相关文件ServerRoot "根目录"
  2. 侦听端口:Listen,可以删除,在辅助文件中配置
  3. LoadModule…….so:代表安装的模块,根据需要开启
  4. User daemon,Group daemon:运行的用户和组

    • 此处建议修改运行用户和组为apache,否则之后的站点可能出现权限问题无法更新:
    • 创建系统用户组apache:groupadd -r apache
    • 创建系统用户:useradd -r -g apache -s /sbin/nologin -d /apache -M apache
    • 更改目录所有者:chown -R apache:apache /usr/local/apache
    • 修改权限:chmod 777 -R /usr/local/apache
  5. 网站管理员邮箱:ServerAdmin,可以删除,在辅助文件中配置
  6. 权限控制:Directory,可以删除,在辅助文件中配置
  7. 站点存放目录:DocumentRoot,可以删除,在辅助文件中配置
  8. 访问站点主界面:DirectoryIndex标签,默认index.html

辅助配置文件

httpd-vhosts.conf

        此配置文件用于虚拟主机的设置。在主配置文件中,删除"Include conf/extra/httpd-vhosts.conf"前面的#,启用vhosts配置文件。当配置多个虚拟主机时,会对每一个虚拟主机进行判断是否符合ip、端口、ServerName或ServerAlias,并作出对应相应。

  1. 常见的虚拟主机模式:

    • 基于 IP 的虚拟主机:例如同时支持ipv4和ipv6的情况,或者多网卡的情况下,web服务器监听多个ip的网口,来选择应答的虚拟主机
    • 基于域名的虚拟主机:例如多个域名解析到同一个web服务器的情况下,根据访问域名的不同,来选择应答的虚拟主机
    • 基于端口的虚拟主机:例如支持ssl的情况下,根据web服务器监听端口的不同,来选择应答的虚拟主机
  2. 常见配置:

    • 配置侦听端口:添加listen *:80侦听服务器上所有可用的网络接口80端口的请求
    • 配置http2:添加Protocols h2 h2c http/1.1,同时主配置文件开启mod_http2模块
    • 配置目录访问权限:

      <Directory "目录路径">
          Options FollowSymLinks
          # 跟随符号链接,即遇到软链接`ln -s`则跟随到源文件,使用`Options SymLinksIfOwnerMatch`表示当符号链接与源文件所有者相同时才跟随
          
          AllowOverride none 
          # 是否应用.htaccess文件,如果需要文章固定链接,则要`AllowOverride all`打开
          
          Require all denied
          # 访问控制:
              # - 允许所有访问请求:Require all granted
              # - 拒绝所有访问请求:Require all denied
              # - 只允许特定域名主机访问:Require host +域名
              # - 允许或拒绝ip访问:Require ip/not ip +单个IP地址或IP段
      </Directory>
    • 配置虚拟主机:

      <VirtualHost ipv4:80或[ipv6]:80或*:80>
          ServerName ip或域名
          # 基于域名的虚拟主机就可以修改 ServerName 配置的域名策略
          
          DocumentRoot "站点路径"
          
          ErrorLog "logs/error_log"
          # 记录服务器运行时的错误和诊断信息
          
          CustomLog "logs/access_log" common
          # 记录客户端请求的详细信息,日志格式为common,在主配置文件中定义
      </VirtualHost>
    • 配置禁止ip访问网站:

      <VirtualHost ipv4:80或[ipv6]:80或*:80>
          ServerName 域名
          ServerAlias 对应ip地址
          
          <Location />
              Require all denied
          </Location>
          # 或禁止访问ip时对根目录的访问
          
          RedirectPermanent / https://域名/
          # 或301重定向 DocumentRoot /根目录到域名,主配置文件需开启rewrite模块
          
          Redirect / https://域名/
          # 或302重定向 DocumentRoot /根目录到域名,主配置文件需开启rewrite模块
      
      </VirtualHost>

httpd-mpm.conf

        此配置文件用于并发控制,默认使用event模式。在主配置文件中,删除"Include conf/extra/httpd-mpm.conf"前面的#,启用mpm配置文件

  1. 常见的多进程模块:

    • prefork模式:一个主进程创建多个子进程,一个子线程创建一个子线程
    • worker模式:一个主进程创建多个子进程,一个子线程创建多个子线程
    • event模式:在worker模式的基础上,引入事件处理机制
  2. 具体参数:

    • ServerLimit:主服务能创建的最大子进程数量
    • StartServers:主服务启动时创建的子进程数量
    • MinSpareThreads和MaxSpareThreads:允许的最少和最多空闲子线程数量,不在此区间将产生或销毁
    • ThreadsPerChild:独立子进程能创建的最大线程数量,为64的倍数
    • MaxRequestWorkers:服务同时处理的最大请求数量,应小于ServerLimit * ThreadsPerChild
    • MaxConnectionsPerChild:子进程整个生命周期能处理的请求数量

http-ssl.conf

        此配置文件用于https,启用安全访问。在主配置文件中,删除"#Include conf/extra/httpd-ssl.conf"前面的#,启用ssl配置文件,同时开启mod_ssl.so模块

  1. 配置域名解析:选择Cloudflare管理域名和网站,配置dns添加a记录,解析域名到主机ip。如果vps在中国大陆,则不建议配置,域名未备案会被封。
  2. 安装证书:在Cloudflare中进行证书的申请,复制相关内容并保存到vps,一个保存为fullchain.pem,作为SSLCertificateFile的路径;一个保存为privkey.pem,作为SSLCertificateKeyFile的路径
  3. 配置ssl文件:

    • 配置侦听端口:添加listen ipv4:443listen [ipv6]:443
    • 配置http2:添加Protocols h2 h2c http/1.1,同时主配置文件开启mod_http2模块
    • 配置SSL/TLS:

      • 配置加密算法种类:SSLCipherSuite HIGH:MEDIUM:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384SSLProxyCipherSuite HIGH:MEDIUM:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
      • 配置加密算法使用顺序:按管理员指定的加密算法顺序使用算法SSLHonorCipherOrder off
      • 配置凭据:允许服务器将加密会话数据保存在客户端SSLSessionTickets on
      • 配置支持的 SSL/TLS 协议版本:禁用所有旧的 SSL/TLS 协议版本,只允许使用 TLSv1.2 和 TLSv1.3 这两个协议版本进行安全通信SSLProtocol -all +TLSv1.2 +TLSv1.3SSLProxyProtocol -all +TLSv1.2 +TLSv1.3
      • 配置SSL缓存:SSLSessionCache一句,需要在主配置文件中开启mod_socache_shmcb模块
    • 配置密钥和证书位置:添加上述密钥和证书的位置SSLCertificateFile "fullchain.pem"SSLCertificateKeyFile "privkey.pem"
  4. 开启https重定向,可以在Cloudflare中开启自动重写