httpd2.2配置文件详解
Listen
Listen
KeepAlive On|Off #注意,只有在keepAlive的状态为on时,下面的两项才是启用的;
KeepAliveTimeout
MaxKeepAliveRequests
测试:使用telnet工具
yum install -y telnet #安装telnet
(keepalive off)
[root@httpd ~]# telnet 192.168.1.16
Trying 192.168.1.16...
Connected to 192.168.1.16.
Escape character is '^]'.
GET /test.html HTTP/1.1 #表示使用HTTP1.1的协议
Host: 192.168.1.16 #请求的主机是192.168.1.;//此处回车两次出现结果 HTTP/1.1 OK
Date: Thu, Apr :: GMT
Server: Apache/2.2. (CentOS)
Last-Modified: Thu, Apr :: GMT
ETag: "8023f-1e-54e1c94668f44"
Accept-Ranges: bytes
Content-Length:
Connection: close
Content-Type: text/html; charset=UTF- <h1>this www.linuxedu.top<h1>
Connection closed by foreign host. #此处是断开的
(keepalive on)
[root@httpd ~]# telnet 192.168.1.16
Trying 192.168.1.16...
Connected to 192.168.1.16.
Escape character is '^]'.
GET /test.html HTTP/1.1
Host: 192.168.1.16 #此处回车两次出现结果 HTTP/1.1 OK
Date: Thu, Apr :: GMT
Server: Apache/2.2. (CentOS)
Last-Modified: Thu, Apr :: GMT
ETag: "8023f-1e-54e1c94668f44"
Accept-Ranges: bytes
Content-Length:
Content-Type: text/html; charset=UTF- <h1>this www.linuxedu.top<h1>
#此处是回车,并没有断开,但是受到MaxKeepAliveRequests以及KeepAliveTimeout的限制最终也会断开
[root@httpd ~]# ps aux | grep httpd
root 0.0 0.2 ? Ss : : /usr/sbin/httpd
apache 0.0 0.1 ? S : : /usr/sbin/httpd
apache 0.0 0.1 ? S : : /usr/sbin/httpd
apache 0.0 0.1 ? S : : /usr/sbin/httpd
默认使用的为/usr/sbin/httpd,其为prefork的MPM模块 ;
[root@httpd ~]# /usr/sbin/httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
[root@httpd ~]# httpd -M
httpd: Could not reliably determine the server's fully qualified domain name, using 0.0.0.0 for ServerName
Loaded Modules:
core_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)
auth_basic_module (shared)
auth_digest_module (shared)
...
[root@httpd ~]# service httpd stop
停止 httpd: [确定]
[root@httpd ~]# vim /etc/sysconfig/httpd
[root@httpd ~]# cat /etc/sysconfig/httpd | grep '^HTTPD'
HTTPD=/usr/sbin/httpd.worker
[root@httpd ~]# service httpd start
正在启动 httpd:httpd.worker: apr_sockaddr_info_get() failed for httpd
httpd.worker: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[确定]
[root@httpd ~]# ps aux | grep httpd
root 0.0 0.2 ? Ss : : /usr/sbin/httpd.worker
apache 0.0 0.2 ? Sl : : /usr/sbin/httpd.worker
root 0.0 0.0 pts/ S+ : : grep --color httpd
思考:为什么编辑/etc/sysconfig/httpd就会生效呢?先来了解一下什么是脚本的配置文件
[root@httpd ~]# cat useradd.sh #!/bin/bash
#
[ -f /tmp/useradd.conf ] && source /tmp/useradd.conf
username=${username:-testuser}
echo $username
[root@httpd ~]# cat /tmp/useradd.conf
username=myuser
<IfModule prefork.c> #条件式参数,表示如果模块是
StartServers
MinSpareServers
MaxSpareServers
ServerLimit
MaxClients
MaxRequestsPerChild
</IfModule>
<IfModule worker.c>
StartServers
MaxClients
MinSpareThreads
MaxSpareThreads
ThreadsPerChild
MaxRequestsPerChild
</IfModule>
注意:这里虽然定义的StartServers是4个,但是每次查看都是3个,我们可以通过以下查看
ps aux | grep httpd
service httpd restart
watch -n. 'ps aux | grep httpd' #每0.5秒监测一下发现会自动销毁一个
#LoadModule <mod_name> <mod_path>
LoadModule auth_basic_module modules/mod_auth_basic.so
lrwxrwxrwx. root root 4月 : modules -> ../../usr/lib64/httpd/modules
5、定义'Main' server的文档页面路径
DocumentRoot "/var/www/html" #注意更改此路径时,一定要确定你的selinux是关闭的
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
<Directory "">
... #表示对该目录下的所有包含子目录生效
</Directory>
<File "">
... #表示对单个文件进行访问控制
</File>
<FileMatch "PATTERN">
... #表示对一类文件进行访问控制(被PATTERN匹配的一类文件)
</FileMatch>
(2)URL路径:
<Location "">
... #表示对""中指定的位置下的所有做访问控制
</Location> <LocationMatch "">
... #表示对匹配到的位置进行访问控制
</LocationMatch>
- Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户;一般只是做为下载站点时才采用;默认是启用的;
- FollowSymLinks:允许跟踪符号链接文件所指向的源文件;就是可以读取访问控制目录下的所有被链接到的文件的内容;有风险
- None:表示不启用,不使用任何选项
- All:包含除了MultiViews的所有选项
- includes :表示包含服务器端由mod_include提供的
- SymLinksifOwnerMatch:服务器将仅跟踪目标文件或目录所拥有的符号链接与链接相同的用户标识
- ExecCGI:表示允许执行mod_CGI提供的脚本
DirectoryIndex index.html index.html.var index.php
- 告诉用户你所访问的资源不存在
- 返回该路径下的所有可用的URL给列出来;相当于暴露了网站的源码,但是又可以用于作为下载站点;
DocumentRoot "/www/htdocs"
http://www.magedu.com/download/bash-4.4.2-3.el6.x86_64.rpm #正常情况下基于URL映射
/www/htdocs/download/bash-4.4.-.el6.x86_64.rpm #正常情况下基于文件系统映射 Alias /download/ "/rpms/pub/"
http://www.magedu.com/download/bash-4.4.2-3.el6.x86_64.rpm
/rpms/pub/bash-4.4.-.el6.x86_64.rpm http://www.magedu.com/images/logo.png
/www/htdocs/images/logo.png
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
<Directory "">
Options None
AllowOverride None
AuthType Basic
AuthName "String“
AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
Require user username1 username2 ... #授权指定用户可以访问,如果需要让所有的人可访,改成Require valid-user
</Directory>
<Directory "">
Options None
AllowOverride None
AuthType Basic
AuthName "String“
AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
Require valid-user #授权指定用户可以访问,如果需要让所有的人可访,改成Require valid-user
</Directory>
mkdir /var/www/html/admin
echo "<h1>admin page</h1>" > index.html
<Directory /var/www/html/admin/>
Options None
AllowOverride None
AuthType Basic
AuthName "Admin Realm"
AuthUserFile "/etc/httpd/conf/.htpasswd"
Require user tom
</Directory>
配置加密文件
cd /etc/httpd/conf/
[root@httpd conf]# htpasswd -c -m ./.htpasswd tom
New password:
Re-type new password:
访问浏览器
<Directory "">
Options None
AllowOverride None
AuthType Basic
AuthName "String“
AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE"
Require group grpname1 grpname2 ...
</Directory>
mkdir /var/www/html/upload;cp /var/www/html/admin/index.html /var/www/html/upload/
echo "<h1>upload page</h1>" > /var/www/html/upload/index.html
<Directory /var/www/html/upload/>
Options None
AllowOverride None
AuthType Basic
AuthName "Admin Realm"
AuthUserFile "/etc/httpd/conf/.htpasswd"
AuthGroupFile "/etc/httpd/conf/.htgroup"
Require group mygroup
</Directory>
[root@httpd conf]# cat ./.htgroup
mygroup: tom Jason
othergroup: obama
<VirtualHost IP:PORT>
ServerName FQDN
DocumentRoot ""
</VirtualHost>
<VirtualHost 172.16.100.6:>
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs"
</VirtualHost> <VirtualHost 172.16.100.7:>
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs"
</VirtualHost> <VirtualHost 172.16.100.8:>
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs"
</VirtualHost>
基于端口的虚拟主机
<VirtualHost 172.16.100.6:>
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs"
</VirtualHost> <VirtualHost 172.16.100.6:>
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs"
</VirtualHost> <VirtualHost 172.16.100.6:>
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs"
</VirtualHost>
基于FQDN的虚拟主机:
NameVirtualHost 172.16.100.6:
<VirtualHost 172.16.100.6:>
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs"
</VirtualHost> <VirtualHost 172.16.100.6:>
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs"
</VirtualHost> <VirtualHost 172.16.100.6:>
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs"
</VirtualHost>
13、status页面
LoadModule status_module modules/mod_status.so
<Location /server-status>
SetHandler server-status
Order allow,deny
Allow from 172.16
</Location>
思考如何实现虚拟主机的https
要实现一个Apache服务器上提供多个SSL虚拟主机,可以:
* 一个ip,为所有SSL虚拟主机配置单独的端口。比如,默认的虚拟主机使用443,其他的使用8080或8081等,且每个SSL虚
拟主机必须独占一个端口;
* 为Apache服务器配置多个IP,每个SSL虚拟主机独占IP。如果只有一张物理网卡,可以配置为网卡配置子接口;
* 使用mod_gnutls模块,创建多个SSL虚拟主机
1. Apache中同一IP多个HTTPS虚拟主机的实现
在 Apache 文档中提到,不能在单个 IP 上同时有多个按名字识别的虚拟主机("named virtual host")。不完全是这样。
HTTPS协议的过程是:服务器首先与客户机之间进行服务器身份验证并协商安全会话,然后,客户端向服务器发送 HTTP 请求。这样一来,在客户端开始发送HTTP请求之前,服务器就已经把证书发给了客户端(客户端根据本地的根证书去验证证书链,等等)。而最重要的是,为了表明身份,这个证书的"Common Name"填写的应该是域名,否则浏览器会给出警告。
既然在这个过程中,客户端就所访问的域名所处的地位是"被告知"的地位,因此,客户端再发出的 Host: 请求头也就显得不那么有意义了。另一方面,如果客户请求的域名与Common Name不符,浏览器也会给出警告。至少,在表面上看是这样。
不过,对于自行签署的证书,以及一些发证机构而言,其实还可以签署一种普适HTTPS证书,这种证书的Common Name一栏是 *.domain.tld 这样的形式,即其主机名部分可以是任意字符串,而只有域名部分是确定的。
当然,这种证书的安全性有一定的负面影响:由于一个证书可以验证整个域下面的所有服务器,一旦其被破解,则所有加密通讯也就同时失密了(当然,可以每台服务器使用自己的单独的证书),不过这个问题并不是太严重,通常还算是尚可接受的范围。另一个潜在的影响是,某些手机上运行的浏览器不能正确处理这种证书,不过这个问题仅限于希望给手机提供服务的网站。
因此,简而言之,符合这样几个条件的前提下,是可以在同一个IP上部署多个HTTPS虚拟主机的:
a) 这些虚拟主机是同属于同一域名的子域名
b) 拥有普适证书
c) 正确地配置Apache。
如果要在一个IP地址上需要部署多个SSL网站,
(1)一种方法:如果要在同一个IP地址的443端口上部署多个网站,必须保证这些网站的域名都能匹配相同的一张SSL证书。这是因为SSL握手协议过程中,是通过IP+Port来进行通信,一个IP的一个端口只能返给客户一张SSL证书(即使有多张证书,也只能返回第一张,因为无法分辨用户会需要返回哪张证书),如果这张证书能够满足这些网站的主机名匹配要求(访问b.test.com时,使用a.test.com段的证书,证书中包含a.test.com,于虚拟主机中的主机名之一匹配),就可以使用。
一般能匹配多个主机名的证书有通配符证书*.domain.com和多域名证书(www.domain.com,ftp.domain.com 等),以下我们提供一个典型同一个IP上的多主机名部署配置,www.domain.com对应的根目录在WWW下,ftp.domain.com对应的根目录在FTP下,www.domain.com与ftp.domain.com使用相同的证书:
NameVirtualHost 11.22.33.44: <VirtualHost 11.22.33.44:>
DocumentRoot "C:/Apache2.2/htdocs/www"
ServerName www.domain.com
SSLEngine on
SSLCertificateFile "C:/Apache2.2/conf/server.cer"
SSLCertificateKeyFile "C:/Apache2.2/conf/server.key"
</VirtualHost> <VirtualHost 11.22.33.44:>
DocumentRoot "C:/Apache2.2/htdocs/ftp"
ServerName ftp.domain.com
SSLEngine on
SSLCertificateFile "C:/Apache2.2/conf/server.cer"
SSLCertificateKeyFile "C:/Apache2.2/conf/server.key"
</VirtualHost> ()另一种办法就是给每个网站分配不同的端口号;
<VirtualHost 11.22.33.44:>
DocumentRoot "C:/Apache2.2/htdocs/www"
ServerName www.domain.com
SSLEngine on
SSLCertificateFile "C:/Apache2.2/conf/server.cer"
SSLCertificateKeyFile "C:/Apache2.2/conf/server.key"
</VirtualHost> <VirtualHost 11.22.33.44:>
DocumentRoot "C:/Apache2.2/htdocs/ftp"
ServerName ftp.domain.com
SSLEngine on
SSLCertificateFile "C:/Apache2.2/conf/server.cer"
SSLCertificateKeyFile "C:/Apache2.2/conf/server.key"
</VirtualHost>
基于域名的虚拟主机只能使用同一个证书,或者说,即使有不同的证书,最终使用的都是排在前面的默认的第一个
2. Apache中一张网卡绑定不同IP实现多个HTTPS虚拟主机
一张网卡绑定多个ip,ifconfig eth0:0......
<VirtualHost 220.181.75.109:>
ServerAdmin lala@corp.net.com
DocumentRoot /home/lala/apache/htdocs/test
ServerName a.test.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /home/lala/apache/conf/ssl.key/server.crt
SSLCertificateKeyFile /home/lala/apache/conf/ssl.key/server.key
#Include /home/lala/apache/conf/ssl.conf
#ErrorLog logs/dummy-a.test.com-error_log
#CustomLog logs/a.test.com-access_log common
</VirtualHost> <VirtualHost 220.181.75.65:>
ServerAdmin lala@corp.net.com
DocumentRoot /home/lala/apache/htdocs/test2
ServerName d.test.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /home/lala/apache/conf/ssl.key/server2.crt
SSLCertificateKeyFile /home/lala/apache/conf/ssl.key/server2.key
#Include /home/lala/apache/conf/ssl.conf
#ErrorLog logs/dummy-a.test.com-error_log
#CustomLog logs/a.test.com-access_log common
</VirtualHost>
httpd2.2配置文件详解的更多相关文章
- httpd配置文件详解及实例
httpd配置文件详解及实例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.http协议的组成 http协议是C/S架构:我们可以把浏览器(如:IE,Firefox,Safar ...
- quartz配置文件详解
quartz配置文件详解(转载) quartz学习总结: 一.关于job: 用Quartz的行话讲,作业是一个执行任务的简单Java类.任务可以是任何Java代码.只需你实现org.qu ...
- WebConfig配置文件详解
今天看到博客园一位朋友整理的一个WebConfig配置文件详解,觉得不错,转载一下: <?xml version="1.0"?> <!--注意: 除了手动编辑此文 ...
- tomcat配置文件详解
Tomcat系列之服务器的安装与配置以及各组件详解 tomcat 配置文件详解
- ubuntu nginx 安装以及配置文件详解
1.到nginx官网下载源码包.最好下载稳定版本,nginx官网http://www.nginx.org/ 2.安装nginx依赖包运行命令: sudo apt-get install libssl- ...
- Spring配置文件详解 – applicationContext.xml文件路径
Spring配置文件详解 – applicationContext.xml文件路径 Java编程 spring的配置文件applicationContext.xml的默 ...
- spring配置文件详解--真的蛮详细
spring配置文件详解--真的蛮详细 转自: http://book.51cto.com/art/201004/193743.htm 此处详细的为我们讲解了spring2.5的实现原理,感觉非常 ...
- net-snmp配置文件详解
net-snmp配置文件详解 net-snmp的配置文件是有一定的层次结构的,配置起来也很方便.网上找了很多资料,大概把这个配置文件的各个信息搞懂了一点.其实在net-snmp的EXAMPLE.con ...
- Rsyslog配置文件详解
Rsyslog配置文件详解https://my.oschina.net/0757/blog/198329 # Save boot messages also to boot.log 启动的相关信息lo ...
随机推荐
- 再起航,我的学习笔记之JavaScript设计模式17(模板方法模式)
模板方法模式 由模板方法模式开始我们正式告别结构型设计模式,开始行为型设计模式的学习分享 行为型设计模式用于不同对象之间职责划分或算法抽象,行为型设计模式不仅仅涉及类和对象,还涉及类或对象之间的交流模 ...
- SpringMVC知识点小结
SpringMVC: 1.SpringMVC和Spring的关系: 软件开发的三层架构: web层[表示层.表现层]---->Service层---->Dao[DataBase Acces ...
- Tensorflow 线性回归预测房价实例
在本节中将通过一个预测房屋价格的实例来讲解利用线性回归预测房屋价格,以及在tensorflow中如何实现 Tensorflow 线性回归预测房价实例 1.1. 准备工作 1.2. 归一化数据 1.3. ...
- Linux系统下C语言如何调用scalapack中的函数
在并行计算中经常需要调用scalapck(并行化的lapack)函数库里面的函数进行编程,这里简单介绍在C语言如何调用scalapck中的矩阵向量乘的函数. 注意:scalapack中的函数是用for ...
- Spring MVC入门讲解
一.Springmvc是什么? Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想, 将web层进行职责解耦,基 ...
- HTML5 贝塞尔绘画 桃心
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 团队作业8——第二次项目冲刺(Beta阶段)Day7——5.26
展开圆桌式会议: 会议内容:1.汇总BETA阶段的成果.2.针对BETA阶段的大家的获得的收获进行了讨论.3.对整个团队项目的过程进行了总结.每个人的工作分配: 队员 今日任务 贡献比 林燕 做最后测 ...
- Java学习7——一些注意的地方
(学习运算符.if和switch分支.for与while与do...while循环.break和continue.递归,内容和C++没差,挑了几个注意点) 运算符 逻辑与(&)和短路与(&am ...
- 201521123100 《Java程序设计》第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...
- 本地不安装oracle,plsql照样用起来
对于配置有限的电脑,不安装oracle需要使用plsql怎么设置才可以使用呢 一.首先下载一个instantclient (Oracle提供的一个较为轻量级的客户包) 据说plsql不支持64位的in ...