您的位置:首页 > 运维架构 > Apache

Apache安装与属性配置

2015-04-04 21:55 204 查看
[b]Apache[/b]

事先创建进程

按需维持适当的进程

模块块设计,核心比较小,各种功能都模块添加(包括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

[b]Apache相关文件路径:[/b]

/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 动态页面

[b]httpd指令:[/b]

directive value

指令不区分字符大小写

value则根据需要有可能要区分

[b]MPM: Multi
Path Modules
[/b]

mpm_winnt (针对windowsNT的)

prefork (一个请求用一个进程响应,稳定性好、但并发场景下消耗资源较多)

worker (一个请求用一个线程响应, (启动多个进程,每个进程生成多个线程))

event (一个进程处理多个请求,基于事件来实现)

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

[b]Apache主配置文件中的常见指令配置[/b]

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网段的主机)

[b]elinks:纯文本的浏览器[/b]

elinks http://172.16.100.1
-dump 把网页内容显示出来后立即退出,不再进入交互模式

-source 显示网页的源代码

PV: Page View 每天的页面访问量

UV: User View 每天的独立IP访问量

[b]Apache虚拟主机[/b]

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>

[b]https的会话建立过程[/b]

客户端向对方支持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服务即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: