• Apache安装与属性配置


    Apache
    事先创建进程
    按需维持适当的进程
    模块块设计,核心比较小,各种功能都模块添加(包括php)
    支持运行配置,支持单独编译模块
    支持多种方式的虚拟主机配置
            Socket IP:Port
            虚拟主机:
            基于IP的虚拟主机
            基于端口的虚拟主机
            基于域名的虚拟主机(实际中最常见的方式)

    那么虚拟机主机是如何根据域名来区别不同的访问内容的呢?
    在URL和HTTP的请求报文中,报文首部中有一个Host字段,通过此字段来区别不同的访问内容
    URL: protocol://HOST:PORT/path/to/source
    HTTP请求报文语法
    请求报文语法:

    <method> <request-URL> <version>
    资源获取方法 请求的资源是什么 对应请求资源协议的版本号
    <headers>
    http协议首部

    <entity-body>
    报文主体

    例:
    GET /download/linux.tar.bz2 HTTP/1.0
    Host: www.qq.com


    支持https协议 (mod_ssl)
    支持用户认证
    支持基于IP或主机名的ACL
    支持每目录的访问控制
    支持URL重写,/image/a.jpeg, /bbs/images/abc.jpeg

    Apache相关文件路径:
    /usr/sbin/httpd(默认MPM: prefork)
    httpd: root, root (master process)
    httpd: apche, apache (worker process)
    /etc/rc.d/init.d/httpd
    Port: (80/tcp), (ssl: 443/tcp)
    /etc/httpd: 工作根目录,相当于程序安装目录
    /etc/httpd/conf: 配置文件目录
    主配置文件:httpd.conf
    /etc/httpd/conf.d/*.conf 子配置文件,也是主配置文件的一部分
    /etc/httpd/modules: 模块目录
    /etc/httpd/logs --> /var/log/httpd: 日志目录
    日志文件有两类:访问日志access_log,错误日志:err_log
    /var/www/
    html 静态页面
    cgi-bin 动态页面 

    httpd指令:
    directive value
    指令不区分字符大小写
    value则根据需要有可能要区分


    MPM: Multi Path Modules
    mpm_winnt (针对windowsNT的)
    prefork (一个请求用一个进程响应,稳定性好、但并发场景下消耗资源较多)
    worker (一个请求用一个线程响应, (启动多个进程,每个进程生成多个线程))
    event (一个进程处理多个请求,基于事件来实现)


    URL路径跟本地文件系统路径不是一码事儿, URL是相对于DocumentRoot的路径而言的。

     

    Apache主配置文件中的常见指令配置

    Options
    None: 不支持任何选项
    Indexes: 允许索引目录
    FollowSynLinks: 允许访问符号链接指向的原文件
    SymLinksifOwnerMatch:如果属主匹配的话,允许访问符号链接指向的原文件
    Includes: 允许执行服务端包含(SSI)
    ExecCGI: 允许运行CGI脚本
    MultiViews:多功能视图,能够根据客户端来源的语言和文字来判定该显示什么页面
    All: 支持所有选项

    AllowOverride:忽略Order关于访问控制的配置而采用另外的方式

    AllowOverride AuthConfig
    AuthType Basic 认证类型
    AuthName "Restricted Files" 名字
    AuthUserFile /usr/local/apache/passwd/passwords 认证用户时使用的文件
    Require user marion 允许哪个/哪些用户可以登录


    AllowOverride AuthConfig
    AuthType Basic
    AuthName "By Invitation Only"
    # Optional line:
    AuthBasicProvider file
    AuthUserFile /usr/local/apache/passwd/passwords
    AuthGroupFile /usr/local/apache/passwd/groups 认证组时使用的文件
    Require group GroupName 允许哪个/哪些组可以登录


    Require valid-user 在用户文件中的用户都可以访问

    <Directory /www/docs/private>
    AuthName "Private"
    AuthType Basic
    AuthBasicProvider dbm
    AuthDBMUserFile /www/passwords/passwd.dbm
    Require valid-user
    </Directory>

    创建认证用户文件时使用htpasswd命令:
    htpasswd -c -m /etc/httpd/conf/htpasswd hadoop
    文件路径 用户
    -c 第一次创建此文件时才可以使用此参数,否则将会把原来的文件覆盖掉
    -m 表示用户的密码进行md5加密
    -D 删除某个用户
    组文件直接编辑,语法为:
    GroupName: rbowen dpitts sungo rshersey
    组名:用户名1 用户名2



    Order:用于定义基于主机的访问控制功能的,IP,网络地址或主机定义访问控制机制
    Order allow,deny
    allow from **
    deny from **
    注:Order之后allow和deny的先后顺序不同是有区别的,在后面的表示在没有明确规定是否能够访问时采用的默认动作

    关于Apache中的Order denyallow的具体用法请参照:转-Apache的Order Allow,Deny 详解

    地址的表示方式:
    IP
    network/netmask
    HOSTNAME: www.a.com
    DOMAINNAME: a.com
    Partial IP: 172.16(等价于172.16.0.0/16)


    例:
    Order deny,allow
    Deny from 192.168.0.0/24 (仅拒绝192.168.0.0/24网段的主机)

    elinks:纯文本的浏览器
    elinks http://172.16.100.1
    -dump 把网页内容显示出来后立即退出,不再进入交互模式
    -source 显示网页的源代码


    PV: Page View  每天的页面访问量
    UV: User View  每天的独立IP访问量

    Apache虚拟主机
    Apache:
    中心主机
    虚拟主机
            基于IP的虚拟主机
            IP1:80
            IP2:80
            基于端口的虚拟主机
            IP:80
            IP:8080
            基于域名的虚拟主机
            IP:80
            主机名不同
            www.magedu.com
            www.a.org
            www2.a.org
            www.b.net

    注:在Apache 2.2中要启用虚拟主机需要通过NameVirtualHost指令来实现


    Apache虚拟主机的定义基本语法:
    <VirtualHost HOST>
    ServerName 虚拟主机名称
    ServerAlias 虚拟主机别名
    DocumentRoot /www/a.org/ 虚拟主机根目录,本地文件系统路径
    <Directory "/www/a.org"> 定义一个Directory容器,对某个目录进行访问控制设置
    Option 是否允许索引
    AllowOverride
    </Directory>
    Alias 设置路径别名
    ErrorLog 定义错误日志文件
    CustomLog 定义访问日志文件

    <Location "/images"> 针对的是DocumentRoot中的某个目录的访问控制设置
    SetHandler server-status
    Order Deny,Allow
    Deny from all
    Allow from .foo.com
    </Location>
    ScriptAlias 脚本别名,允许执行CGI脚本的目录
    </VirtualHost>

    要启用虚拟主机,必须先取消中心主机(注释中心主机的DocumentRoot即可)
    虚拟主机的定义:
    <VirtualHost HOST>

    </VirtualHost>

    基于IPHOST的写法:
    HOST
    IP1:80
    IP2:80

    例:
    <VirtualHost 192.168.133.128:80>
    ServerName www.a.com
    DocumentRoot "/var/www/a.com"
    </VirtualHost>
    <VirtualHost 192.168.133.129:80>
    ServerName www.b.com
    DocumentRoot "/var/www/b.com"
    </VirtualHost>

    基于端口时HOST的写法:
    HOST
    IP:80
    IP:8080

    例:
    Listen 80
    Listen 8080
    <VirtualHost 192.168.133.128:80>
    ServerName www.a.com
    DocumentRoot "/var/www/a.com"
    </VirtualHost>
    <VirtualHost 192.168.133.128:8080>
    ServerName www.c.com
    DocumentRoot "/var/www/c.com"
    </VirtualHost>

    基于域名时HOST的写法:
    *:80
    ServerName不同
    例:
    NameVirtualHost 192.168.133.129:80
    <VirtualHost 192.168.133.129:80>
    ServerName www.b.com
    DocumentRoot "/var/www/b.com"
    </VirtualHost>
    <VirtualHost 192.168.133.129:80>
    ServerName www.d.com
    DocumentRoot "/var/www/d.com"
    </VirtualHost>

    https的会话建立过程
    客户端向对方支持https的服务端发起请求,首先Client端发起TCP/IP的三次握手,客户端和服务端进行加密算法的协商,协商之后服务端将自己的公钥信息(证书)发送给客户端,客户端验证证书没有发现问题之后就会生成一个对称秘钥,将对称秘钥发送给服务端,之后服务端就会将客户端请求的内容通过客户端发来的密码加密之后发送给客户端

    配置:
    1、保证Apache加载了mod_ssl模块
    # yum install mod_ssl -y
    重启Apache即可

    2、创建自签证书
    # cd /etc/pki/CA/
    # (umask 077;openssl genrsa -out private/cakey.pem 2048)
    秘钥不允许其他人来访问 生成rsa格式的私钥 私钥存储路径 指定是多少位的秘钥 
    # vim /etc/pki/tls/openssl.cnf
    [ req_distinguished_name ]
    countryName_default = CN

    stateOrProvinceName_default = Shannxi

    localityName_default = xi'an

    0.organizationName_default = xaut

    organizationalUnitName_default = xaut
    # cd /etc/pki/CA
    # openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655
    # touch index.txt
    # echo 01 > serial
    # cd /etc/httpd/
    # mkdir ssl
    # cd ssl/
    # (umask 077;openssl genrsa 1024 > httpd.key) 
    # openssl req -new -key httpd.key -out httpd.csr
    # openssl ca -in httpd.csr -out httpd.crt -days 3650
    3、配置Apache

    # vim /etc/httpd/conf.d/ssl.conf
    <VirtualHost 192.168.133.128:443>
    DocumentRoot "/var/www/a.com"
    ServerName www.a.com

    ErrorLog logs/ssl_error_log
    TransferLog logs/ssl_access_log 对于ssl不再使用CustomLog,而是使用TransferLog
    LogLevel warn

    SSLEngine on 是否开启ssl功能
    SSLProtocol all -SSLv2 能够支持哪些ssl协议
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW 使用哪些加密套件

    SSLCertificateFile /etc/httpd/ssl/httpd.crt 指定证书文件

    SSLCertificateKeyFile /etc/httpd/ssl/httpd.key 指定私钥文件
    重启Apache服务即可

  • 相关阅读:
    ffplay.c函数结构简单分析(绘图)
    SNMP安全配置的两种方法(也可同一时候兼顾配置两种方法)
    LINKs: Xamarin.Forms + Prism
    Linux目录详解
    搜狗输入法 for Linux v2.2.0.0108
    centos 查看IP
    CentOS安装系统时硬盘分区建议
    CentOS 7 各个版本的区别
    VMware安装Centos7超详细过程(图文)
    Centos7从零开始】Centos 下硬盘分区的最佳方案
  • 原文地址:https://www.cnblogs.com/xautlmx/p/4393000.html
Copyright © 2020-2023  润新知