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服务即可

Apache安装与属性配置的更多相关文章

  1. apache安装及相应配置

    给公司装过环境,自己也装过自己的服务器环境.但是每次都是现谷歌,毕竟每个人遇到的问题都不一样,还是记录下,以防忘记 一.安装 Centos7默认已经安装httpd服务,只是没有启动.如果你需要全新安装 ...

  2. 阿里云服务器Centos上Apache安装SSL证书配置Https

    首先我们先去阿里云申请一个免费的SSL证书(https://common-buy.aliyun.com/?spm=5176.7968328.1266638..5e971232BzMSp5&co ...

  3. Apache安装和文件配置

    Apache和Tomcat的区别是:静态文件和动态页面,C++和Java的区别. 对比.

  4. SpringBoot01 InteliJ IDEA安装、Maven配置、创建SpringBoot项目、属性配置、多环境配置

    1 InteliJ IDEA 安装 下载地址:点击前往 注意:需要下载专业版本的,注册码在网上随便搜一个就行啦 2 MAVEN工具的安装 2.1 获取安装包 下载地址:点击前往 2.2 安装过程 到官 ...

  5. WEB服务器----Apache 安装配置

    1.官网下载需要的安装包(包括主安装包和依赖包的下载)可以直接使用Linux的wget进行下载: httpd安装包下载地址:http://mirrors.hust.edu.cn/apache//htt ...

  6. SpringBoot01 InteliJ IDEA安装、Maven配置、创建SpringBoot项目、yml属性配置、多环境配置、自定义properties配置

    1 IntelliJ IDEA 安装 下载地址:点击前往 注意:需要下载专业版本的,注册码在网上随便搜一个就行啦 2 MAVEN工具的安装 2.1 获取安装包 下载地址:点击前往 2.2 安装过程 到 ...

  7. LAMP_02_WIN下Apache安装配置

    1.下载http://httpd.apache.org/download 2.配置 下载完解压后有readme,首先进行阅读其中的VC运行库必须安装,否则会出现各种奇葩问题用命令行安装服务 发现报错, ...

  8. apache安装mod_deflate配置支持gzip

    apache 配置支持gzip apache使用gzip压缩能够大幅提高网站访问速度并节省网络流量,在网页响应头信息中可以判断是否支持压缩. HTTP/1.1 200 OK Date: Wed, 14 ...

  9. Apache安装配置步骤

    注释:这里以Linux 红帽商业版为例~~~~~~~纯手打啊 Apache安装配置步骤 准备:关闭其他虚拟设备 #/etc/init.d/libvirtd stop #/etc/init.d/xend ...

随机推荐

  1. 链表栈的C语言实现

    #ifndef _CONST_H_#define _CONST_H_ #include <stdio.h>#include <stdlib.h> typedef enum { ...

  2. 【转】CSS:table-cell详解

    table-cell这个家伙在国外的网站中偶有露头,天朝由于IE6.7这两个货泛滥成灾,难有发挥,那么,这个家伙到底能干些什么呢?先让我们来研究下table,那些年曾经使用的table布局为何如此辉煌 ...

  3. Servlet开发详解

    一.Servlet简介 Servlet是sun公司提供的一门用于动态web资源的技术 sun公司在其API中提供了一个Servlet接口,用户若想开发一个动态web资源,需要完成两个步骤: 编写一个J ...

  4. Bean熟悉替换,只替换部分属性,其他属性值不改变

    Bean熟悉替换,只替换部分属性,其他属性值不改变 需要加入:asm.jar  cglib-2.1.jar,用来map和bean之间的转换(比spring和反射的效率好,因为加入了缓存) packag ...

  5. UVA Open Credit System Uva 11078

    题目大意:给长度N的A1.....An 求(Ai-Aj)MAX 枚举n^2 其实动态维护最大值就好了 #include<iostream> #include<cstdio> u ...

  6. 关于content-type","application/x-www-form-urlencoded;charset=utf-8"的说明

    在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型. 下边是说明: application/x-www-form-urlen ...

  7. SQLite 事务

    SQLite数据库是支持事务的,事务的特性可以保证让一系列的操作要么全部完成要么一个都不会完成. 一.调用SQLDatabase的beginTransaction()开起一个事务,当事务处理完成,调用 ...

  8. PHP绘图

    创建图像的一般流程1.设定标头,告诉浏览器你要生成的绘图类型.2.创建一个图像区域,以后的操作都将基于此图像区域.3.在空白图像区域绘制填充背景.4.在背景上绘制图形轮廓输入文本.5.输出最终图形.6 ...

  9. iOS开发 跳转系统设置

    NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; [[UIApplication sharedApplica ...

  10. 《精通C#》第十三章 对象的生命周期

    在C#中,程序员无法直接在C#中删除一个托管对象,因为C#不提供这个功能,那么类的实例就需要通过CLR调用垃圾回收机制进行清除,回收内存..NET垃圾回收器会压缩空的内存块来实现优化,为了辅助这一功能 ...