zoukankan      html  css  js  c++  java
  • web服务器之Apache语法与使用

    httpd 常见配置

    指定服务器名

    [root@centos8 ~]# httpd -t
    AH00558: httpd: Could not reliably determine the server's fully qualified domain
    name, using centos8.localdomain. Set the 'ServerName' directive globally to
    suppress this message
    Syntax OK
    [root@centos8 ~]# vim /etc/httpd/conf/httpd.conf
    #ServerName www.example.com:80
    ServerName www.longxuan.vip
    [root@centos8 ~]# httpd -t
    Syntax OK
    

    包含其它配置文件

    指令:

    Include file-path|directory-path|wildcard
    IncludeOptional file-path|directory-path|wildcard
    

    说明:
    Include和IncludeOptional功能相同,都可以包括其它配置文件
    但是当无匹配文件时,include会报错,IncludeOptional会忽略错误

    范例:

    #Wildcards may be included in the directory or file portion of the path. This
    example will fail if there is no subdirectory in conf/vhosts that contains at
    least one *.conf file:
    Include conf/vhosts/*/*.conf
    #Alternatively, the following command will just be ignored in case of missing
    files or directories:
    IncludeOptional conf/vhosts/*/*.conf
    

    监听的IP和Port

    Listen [IP:]PORT
    

    说明:
    (1) 省略IP表示为本机所有IP
    (2) Listen指令至少一个,可重复出现多次

    范例:

    Listen 172.31.1.100:8080
    Lsten 80
    

    隐藏服务器版本信息

    ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full
    

    范例:

    ServerTokens Prod[uctOnly] :Server: Apache
    ServerTokens Major: Server: Apache/2
    ServerTokens Minor: Server: Apache/2.0
    ServerTokens Min[imal]: Server: Apache/2.0.41
    ServerTokens OS: Server: Apache/2.0.41 (Unix)
    ServerTokens Full (or not specified): Server: Apache/2.0.41 (Unix) PHP/4.2.2
    MyMod/1.2 此为默认值
    

    建议使用:ServerTokens Prod

    禁止错误网页版本泄露

    ServerSignature On | Off | EMail
    

    默认值Off,如果ServerTokens 使用默认值,并且ServerSignature选项为on,当客户请求的网页并不存在时,服务器将产生错误文档,错误文档的最后一行将包含服务器名字、Apache版本等信息,如果不对外显示这些信息,就可将这个参数设置为Off, 如果设置为Email,将显示ServerAdmin 的Email提示

    ServerSignature on
    
    ServerAdmin root@xxx.com
    ServerSignature email
    

    持久连接

    Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认开启持久连接

    断开条件:

    时间限制:以秒为单位, 默认5s,httpd-2.4 支持毫秒级
    请求数量: 请求数达到指定值,也会断开
    

    副作用:对并发访问量大的服务器,持久连接会使有些请求得不到响应

    折衷:使用较短的持久连接时间

    持久连接相关指令:

    KeepAlive On|Off
    KeepAliveTimeout 15 #连接持续15s,可以以ms为单位,默认值为5s
    MaxKeepAliveRequests 500 #持久连接最大接收的请求数,默认值100
    

    测试方法:

    telnet WEB_SERVER_IP PORT
    GET /URL HTTP/1.1
    Host: WEB_SERVER_IP
    

    Dynamic Shared Object,加载动态模块配置,不需重启即生效

    动态模块所在路径: /usr/lib64/httpd/modules/

    主配置 /etc/httpd/conf/httpd.conf 文件中指定加载模块配置文件

    ServerRoot "/etc/httpd"
    Include conf.modules.d/*.conf
    

    配置指定实现模块加载格式:

    LoadModule <mod_name> <mod_path>
    

    模块文件路径可使用相对路径:相对于ServerRoot(默认/etc/httpd)

    范例:查看模块加载的配置文件

    [root@centos8 ~]# ls /etc/httpd/conf.modules.d/
    00-base.conf 00-lua.conf 00-optional.conf 00-systemd.conf 10-h2.conf
    README
    00-dav.conf 00-mpm.conf 00-proxy.conf 01-cgi.conf 10-proxy_h2.conf
    [root@centos8 ~]#cat /etc/httpd/conf.modules.d/00-base.conf
    #
    # This file loads most of the modules included with the Apache HTTP
    # Server itself.
    #
    LoadModule access_compat_module modules/mod_access_compat.so
    LoadModule actions_module modules/mod_actions.so
    LoadModule alias_module modules/mod_alias.so
    LoadModule allowmethods_module modules/mod_allowmethods.so
    LoadModule auth_basic_module modules/mod_auth_basic.so
    ...省略...
    

    查看静态编译的模块:httpd -l

    查看静态编译及动态装载的模块:httpd -M

    范例:

    # 列出静态编译模块
    [root@centos8 ~]# httpd -l
    Compiled in modules:
    core.c
    mod_so.c
    http_core.c
    
    # 列出静态和动态编译的模块
    [root@centos8 ~]# httpd -M
    AH00558: httpd: Could not reliably determine the server's fully qualified domain
    name, using centos8.localdomain. Set the 'ServerName' directive globally to
    suppress this message
    Loaded Modules:
    core_module (static)
    so_module (static)
    http_module (static)
    access_compat_module (shared)
    actions_module (shared)
    alias_module (shared)
    allowmethods_module (shared)
    auth_basic_module (shared)
    ...省略...
    

    MPM (Multi-Processing Module) 多路处理模块

    httpd 支持三种MPM工作模式:prefork, worker, event

    切换使用的MPM:

    #启用要启用的MPM相关的LoadModule指令即可,其它未启用的两项需要在行首加#注释
    [root@centos8 ~]# vim /etc/httpd/conf.modules.d/00-mpm.conf
    #LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
    #LoadModule mpm_worker_module modules/mod_mpm_worker.so
    LoadModule mpm_event_module modules/mod_mpm_event.so
    

    注意:不要同时启用多个MPM模块,否则会出现以下错误

    AH00534: httpd: Configuration error: More than one MPM loaded.
    

    范例:查看CentOS 8 和 CentOS 7 默认的MPM工作模式

    # 查看CentOS 8 默认的MPM工作模式
    [root@centos8 ~]# httpd -M |grep mpm
    AH00558: httpd: Could not reliably determine the server's fully qualified domain
    name, using centos8.localdomain. Set the 'ServerName' directive globally to
    suppress this message
    mpm_event_module (shared)
    
    # 查看CentOS 7 默认的MPM工作模式
    [root@centos7 ~]# httpd -M |grep mpm
    AH00558: httpd: Could not reliably determine the server's fully qualified domain
    name, using centos7.localdomain. Set the 'ServerName' directive globally to
    suppress this message
    mpm_prefork_module (shared)
    

    范例:修改CentOS 8使用 prefork 模型

    [root@centos8 ~]# vim /etc/httpd/conf.modules.d/00-mpm.conf
    [root@centos8 ~]# grep Load /etc/httpd/conf.modules.d/00-mpm.conf
    # one of the following LoadModule lines. See the httpd.conf(5) man
    LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
    #LoadModule mpm_worker_module modules/mod_mpm_worker.so
    #LoadModule mpm_event_module modules/mod_mpm_event.so
    [root@centos8 ~]# httpd -M | grep mpm
    AH00558: httpd: Could not reliably determine the server's fully qualified domain
    name, using centos8.localdomain. Set the 'ServerName' directive globally to
    suppress this message
    mpm_prefork_module (shared)
    

    prefork 模式相关的配置

    StartServers 100
    MinSpareServers 50
    MaxSpareServers 80
    ServerLimit 2560 #最多进程数,最大值 20000
    MaxRequestWorkers 2560 #最大的并发连接数,默认256
    MaxConnectionsPerChild 4000 #子进程最多能处理的请求数量。在处理MaxRequestsPerChild 个
    请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放(为0时永远不释放)
    MaxRequestsPerChild 4000 #从 httpd.2.3.9开始被MaxConnectionsPerChild代替
    

    worker和event 模式相关的配置

    ServerLimit 16 #最多worker进程数 Upper limit on configurable number of
    processes
    StartServers 10 #Number of child server processes created at startup
    MaxRequestWorkers 150 #Maximum number of connections that will be processed
    simultaneously
    MinSpareThreads 25
    MaxSpareThreads 75
    ThreadsPerChild 25 #Number of threads created by each child process
    

    定义Main server的文档页面路径

    DocumentRoot "/path”
    <directory /path>
    Require all granted
    </directory>
    

    说明:
    DocumentRoot指向的路径为URL路径的起始位置
    /path 必须显式授权后才可以访问

    范例:

    DocumentRoot "/data/html"
    <directory /data/html>
    Require all granted
    </directory>
    # URL和磁盘路径的映射关系
    http://HOST:PORT/test/index.html --> /data/html/test/index.html
    

    定义站点默认主页面文件

    DirectoryIndex index.php index.html
    

    定义路径别名

    格式:

    Alias /URL/ "/PATH/"
    

    范例:

    DocumentRoot "/www/htdocs"
    #http://www.longxuan.vip/download/bash.rpm ==>/www/htdocs/download/bash.rpm
    Alias /download/ "/rpms/pub/"
    #http://www.longxuan.vip/download/bash.rpm ==>/rpms/pub/bash.rpm
    #http://www.longxuan.vip/images/logo.png ==>/www/htdocs/images/logo.png
    

    范例:

    [root@centos8 ~]# cat /etc/httpd/conf.d/test.conf
    alias /news /data/html/newsdir/
    <directory /data/html/newsdir>
    require all granted
    </directory>
    

    可实现访问控制的资源

    可以针对文件系统和URI的资源进行访问控制

    文件系统路径:

    #基于目录
    <Directory "/path">
    ...
    </Directory>
    
    #基于文件
    <Files "/path/file”>
    ...
    </Files>
    
    #基于文件通配符
    <Files "/path/*file*”>
    ...
    </Files>
    
    #基于扩展正则表达式
    <FilesMatch "regex”>
    ...
    </FilesMatch>
    

    范例:

    <FilesMatch ".+.(gif|jpe?g|png)$">
    # ...
    </FilesMatch>
    <Files ".ht*"> #通配符
      Require all denied
    </Files>
    

    URL路径:

    <Location "URL">
    ...
    </Location>
    <LocationMatch "regex">
    ...
    </LocationMatch>
    

    范例:

    #/private1, /private1/,/private1/file.txt 匹配
    #/private1other 不匹配
    <Location "/private1">
    # ...
    </Location>
    #/private2/,/private2/file.txt 匹配
    #/private2,/private2other 不匹配
    <Location "/private2/">
    # ...
    </Location>
    

    范例:

    <Location /status>
    <LocationMatch "/(extra|special)/data">
    

    针对目录和URL实现访问控制

    (1) Options指令:
    后跟1个或多个以空白字符分隔的选项列表, 在选项前的+,- 表示增加或删除指定选项

    常见选项:

    Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户
    FollowSymLinks:允许访问符号链接文件所指向的源文件
    None:全部禁用
    All: 全部允许
    

    范例:

    <Directory /web/docs>
      Options -Indexes -FollowSymLinks
    </Directory>
    <Directory /web/docs/spec>
      Options -FollowSymLinks
    </Directory>
    

    范例: 编译安装的httpd实现下载功能

    [root@centos8 ~]# vim /apps/httpd/conf.d/test.conf
    <directory /data/html/software>
      options Indexes FollowSymLinks
    </directory>
    

    范例:实现下载页面

    [root@centos8 ~]# cd /etc/httpd/conf.d/
    [root@centos8 conf.d]# mv welcome.conf{,.bak}
    [root@centos8 ~]# echo /data/data.html > /data/data.html
    [root@centos8 ~]# ln -s /data /var/www/html/datalink
    [root@centos8 ~]# mkdir /var/www/html/dir1/
    [root@centos8 ~]# echo /var/www/html/dir1/dir1.html >
    /var/www/html/dir1/dir1.html
    [root@centos8 ~]# echo Test Page > /var/www/html/test.html
    [root@centos8 ~]# systemctl restart httpd
    

    打开浏览器,访问 http://httpd主机IP/ 即可看到

    [root@centos8 ~]# vim /etc/httpd/conf/httpd.conf
    #Options Indexes FollowSymLinks
    Options Indexes #将上面行加注释,修改为此行
    [root@centos8 ~]# systemctl restart httpd
    

    打开浏览器,访问http://httpd主机IP/ 无法看软链接目录datalink

    (2) AllowOverride指令
    与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由AccessFileName 指令指
    定,AccessFileName .htaccess 为默认值)文件中,覆盖之前的配置指令,只对语句有效

    常见用法:

    AllowOverride All: .htaccess中所有指令都有效
    AllowOverride None: .htaccess 文件无效,此为httpd 2.3.9以后版的默认值
    AllowOverride AuthConfig .htaccess 文件中,除了AuthConfig 其它指令都无法生效
    

    范例:

    [root@centos8 ~]# vim /etc/httpd/conf/httpd.conf
    #Options Indexes FollowSymLinks
    Options Indexes
    #AllowOverride None
    AllowOverride options=FollowSymLinks,indexes #注释上一行,修改为此行
    [root@centos8 ~]# vim /var/www/html/dir1/.htaccess
    Options FollowSymLinks indexes #加此行
    [root@centos8 ~]# ln -s /app /var/www/html/dir1/applink
    [root@centos8 ~]# systemctl restart httpd
    

    打开浏览器,访问http://httpd主机IP/dir1,可以看到applink的软链接

    打开浏览器,访问http://httpd主机IP/ 无法看软链接目录datalink

    范例:.htaccess文件默认被禁止访问

    [root@centos7 test2]# grep -Ev '^ *#|^$' /apps/httpd24/conf/httpd.conf |grep -A 2
    'ht*'
    <Files ".ht*">
       Require all denied
    </Files>
    
  • 相关阅读:
    Casperjs循环执行(重复执行不退出)
    casperjs批量执行多个url
    CasperJS API介绍
    phantomjs waitFor
    phantomjs 长图截屏
    Linux Shell函数
    全废话SQL Server统计信息(2)——统计信息基础
    JavaScript推断undefined的技巧
    Activity Test1
    Android触摸事件(五)-CropBitmapActivity关于裁剪工具的使用
  • 原文地址:https://www.cnblogs.com/xuanlv-0413/p/14838737.html
Copyright © 2011-2022 走看看