http的服务的配置文件各参数意思

 


1、持久连接 
KeepAlive {On|Off}                   是否启动持久连接,
MaxKeepAliveRequests 100     使用持久连接最大的请求个数
KeepAliveTimeout 15                使用持久连接超时时间,过长或过短都不利于系统资源的节省
启用持久连接的优点,可以减少进程的创建和删除,节省系统资源;但是不一定需要请求持久连接,

对于非常繁忙的网站可能不能节省资源


2、MPM参数: 
<IfModule prefork.c> 
StartServers 8                服务启动时启动的空闲进程数
MinSpareServers 5       任何时候保持的最小空闲进程数
MaxSpareServers 20     最大空闲进程数,不能小于服务器启动进程数
ServerLimit 256            在服务的生命周期内能并发接受的客户数
MaxClients 256             同时响应客户的最大值
MaxRequestsPerChild 4000 每个子进程最多允许接受多少各请求
</IfModule>                 表示主程序参数的容器

<IfModule worker.c> 
StartServers 4 
MaxClients 300      最大的并发用户请求
MinSpareThreads 25     最小空闲线程
MaxSpareThreads 75    最好空闲线程
ThreadsPerChild 25    
MaxRequestsPerChild 0 
</IfModule>

3、指定监听的地址和端口 
Listen [IP:]PORT     监听的IP地址和端口,IP地址可以省略表示监听所有Ip地址

此指令可以重复出现多次,修改监听端口需要重启服务

4、DSO机制装载的模块 
显示: 
# httpd -D DUMP_MODULES   显示装载的模块
LoadModule  Module_Name  /path/to/Module_File

  装载模块            模块名称            装载地址

支持动态装卸载,修改配置文件的模块的装载不需重启服务  
 =============以上为全局配置==========================

ServerAdmin  邮箱地址


当启动服务遇到下面的报错信息时:

spacer.gif
第一种办法:启动配置文件中的ServerName [域名]  ;此时无论正解或反解是否一直都不会报错,而是直接使用我们给的域名

第二种办法:在文件/etc/resolv.conf中定义主机的IP地址和域名


5、指定站点根目录 
DocumentRoot "/path/to/somewhere"可以自己修改指定路径,文件如果不存在会报错 

6、站点路径访问控制 
基于本地文件系统路径: 
<Directory "/path/to/somewhere"> 

</Directory> 

基于URL访问路径做访问控制 
<Location "/path/to/URL"> 可以使用正则表达式,但是会影响性能
</Location>

7、于Directory中可用的访问控制 
(1) Options      用来定义访问选项:在选项前加-表示不启用,或者直接删除-++++++++++++++++++------


Indexes(索引): 当访问的路径下无默认的主页面,将所有资源以列表形式呈现给用户;危险,慎用; 
FollowSymlinks: 跟踪符号链接 

(2) AllowOverride {None|All}对资源的访问控制
httpd2.2支持在每个页面目录下创建.htaccess用于实现对此目录中资源访问时的访问控制功能。 

8、基于IP做访问控制 
Order allow,deny   deny:拒绝访问的对像   allow:自己定义访问的对象
Deny from 172.16.100.17   允许的那么对象访问,可以是网段
Allow from 172.16.0.0/16 
allow|deny  All | IP或网段 | 网络地址


from后面能接受的地址格式: 
IP, Network Address 
网络地址格式较为灵活: 
172.16 
172.16.0.0 
172.16.0.0/16 
172.16.0.0/255.255.0.0 

9、定义默认的主页面 
DirectoryIndex   index.html 。。。

默认加载的主页面,可以有多个,但是有优先级,从前面的开始检索

10、配置日志功能 
ErrorLog "/path/to/error_log"   错误日志的路径
LogLevel {debug|info|notice|warn|error|crit|alert|emerg}  日志记录的级别,只记录设定级别以上的(左低又高) 

LogFormat 
CustomLog "/path/to/access_log" LogFormat_Name 记录用户访问时产生的访问信息

  LogFormat_Name  日志信息格式名称  

%h: 客户端地址 
%l: 远程登录名,通常为- 
%u: 认证时输入用户名,没有认证时为- 
%t: 服务器收到 用户请求时的时间 
%r:请求报名的起始行 
%>s: 响应状态码 
%b: 响应报文的长度,单位是字节 
%{HEADER_NAME}i: 记录指定首部对应的值 
        **想要保留引号使用反斜杠转义


11、路径别名 
站点根目录:/www/html 
http://www.magedu.com/p_w_picpaths/logo/new.gif 
此文件位置:/www/html/p_w_picpaths/logo/new.gif 

实现URL路径的映射,从而所访问的资源不再依赖于站点根目录; 

Alias /URL/ "/path/to/somewhere/"    设定路径别名

eg:Alias /ab/  "/www/hssk/ab/"  表示当用户访问ab时直接映射到后面的路径,不会因为根目录是否存在ab目录而改变
===========================================================

定义文件的访问权限的格式

<Directory "本地文件系统路径"> 可以使用~,表示对后面的路径做模式匹配

        options Indexes       当指定路径下的默认主页面不存在时,将指定目录的所有资源通过列表的方式列出

        AllowOverride          

        Order Allow,Deny    定义基于IP的访问控制(次序很重要)

</Directory>  **注意前门的斜杠不要忘了,不然语法检测时会报错**


12、设定默认字符集

         字符集<-- AddDefaultCharset

     

     

13、CGi脚本--->动态请求:但是与静态请求的服务器是分开的

        动态请i求工作原理:服务器的httpd进程接受到请求后,联系后台的动态去请求处理程序,再由它生成的子进程完成请求的            内容,完成后将进程放回空闲列表(和处理静态请求相似),这种处理动态请求的方式叫做 FastCGI。

          FastCGI协议:


           CGI脚本路径别名

             ScriptAlias   /URL/    /path/to/somewhere/   指定脚本存放路径的别名

 使用bash写CGI脚本

           所有文本都使用命令输出:echo、printf、cat

           执行程序:命令引用

       


14、基于用户访问控制

         用户认证:基本认证(Basic);摘要认证(digest)

         虚拟用户:仅用于访问某服务或获取某资源的凭证

                 文本文件:.htpasswd(一般影藏放置)

                 SQL数据库

          dbm:数据库引擎,提供API  与数据库引擎打交到,不直接访问用户数据文件

          ldap:轻量级数据访问协议


         authentication provider 客户帐号密码存储的位置

     

         authorization provider 授权


     案例:基于文件访问

     (1)编辑配置文件/etc/httpd/conf/httpd.conf

     <Directory "/var/www/html/admin">  指定控制访问文件路径

           Options none              定义访问权限,不允许访问

           AllowOverride AuthConfig     做认证相关的配置

           AuthType Basic           使用认证的方式

           AuthName "Admin Area."       做认证的原因(随便写入)

           #AuthBasicProvider file            指定认证时使用的存储机制

           AuthUserFile /etc/httpd/conf/.htpasswd    存储用户帐号和密码信息的位置,需要自己创建

           Require valid-user     指定允许登入的用户,这里表示所有用户

   </Directory>

     Requles   user  UserName  ,指定单个用户

     

     (2)提供认证文件

     htpasswd

        -c:如果文件不存在则创建;只在需要创建文件时使用

        -m:以md5编码存储用户密码信息

        -D:删除用户

格式:#htpasswd [options]..  /path/to/somewhere    USERname   这里不是本地用户是web用户

       

      (3)组认证

 <Directory "/var/www/html/admin">

        Options none

        AllowOverride AuthConfig

        AuthType Basic

        AuthName "Admin Area."

        #AuthBasicProvider file

        AuthUserFile /etc/httpd/conf/.htpasswd

         AuthGroupFile   /etc/httpd/conf/.htgroup   格式:  组名:用户名。。。。。

       Requles group Group_NAME

   </Directory>

     

     

15、虚拟主机:

     虚拟主机:不同的虚拟主机使用不同的访问路径

         1)基于端口

         2)基于IP

         3)基于主机名的虚拟主机

     (1)使用虚拟主机的前提,取消主服务器

        注释主服务器的站点跟路径指定:DocumentRoot


     (2)定义虚拟主机

        NameVirtualHost IP:PORT:基于名称的虚拟主机 ,并指定监听的IP和端口  (只在2.2上有,在2.4上不需定义)

       <VirtualHost IP:PORT>  定义虚拟主机的IP和端口

        ServerName    服务名(应该有)

        DocumentRoot  根目录  (应该有)

        ServerAlias      

        ErrorLog        错误日志路径

        CustomLog         访问日志路径

       </VirtualHost>

         前面两项需要有,后面三项可以不定义

        配置文件语法检查:#httpd -t

        

    (3)测试使用elinks-->文本浏览器

       -dump:获取到页面数据后直接退出

        格式:#elinks [option]  域名

        修改windows的host文件  :格式    IP        域名

       

        

 16、https协议

http与http对比(转载马哥教育)

wKiom1PnoBCwvCj-AAIsgqyNi9I404.jpg

      ssl(安全的套接字层),tls(传输层安全)

      http协议是基于文本编码

      使用telnet验证

验正:使用telnet发请求


# telnet 172.16.100.7 80

Trying 172.16.100.7...

Connected to 172.16.100.7.

Escape character is '^]'.

GET /index.html HTTP/1.0 

Host: www.b.org


HTTP/1.1 200 OK

Date: Fri, 08 Aug 2014 03:03:51 GMT

Server: Apache/2.2.15 (CentOS)

Last-Modified: Fri, 08 Aug 2014 02:14:52 GMT

ETag: "e0009-12-50014c53e753f"

Accept-Ranges: bytes

Content-Length: 18

Connection: close

Content-Type: text/html; charset=UTF-8


<h1> Host B </h1>

Connection closed by foreign host.  请求结束退出

持久连接的超时是一个请求结束距离下一个请求的的最长时间间隔       

      httpd:ssl

        ssl模块,单独成块,全称-->mod_ssl

      ssl会话基于IP地址创建,一个IP仅能创建一个ssl会话

     spacer.gif     ssl握手要完成的工作: 

交换协议版本号

选择双方都支持的加密方式

客户端对服务器端实现身份验正

密钥交换

https协议: 基于SSL二进制编码, 443/tcp

openssl s_client


客户端验正服务器端证书:
有效性检测:证书是否仍然在有效期内

CA的可信度检测:用本地CA的公钥解密证书,验证该证书的可信度检测

证书的完整性检测:用

持有者的身份检测


配置httpd工作于https:
(1) 安装mod_ssl模块
# yum install mod_ssl
(2) 为服务端生成私钥,并为其提供证书;
# mkdir /etc/httpd/ssl && cd /etc/httpd/ssl
# (umask 077; openssl genrsa -out httpd.key 1024)
# openssl req -new -key httpd.key -out httpd.csr
签署后的证书为:/etc/httpd/ssl/httpd.crt

证书生成后需要修改ssl的配置文件,指定公钥和私钥的位置

在客户段安装CA服务器的根证书

********CA的详细使用请看:http://8381039.blog.51cto.com/8371039/1534946


(3) 配置使用https的虚拟主机;
SSLCertificateFile           服务器证书所在的位置
SSLCertificateKeyFile     服务器私钥所在的位置

<VrtualHost IP:443>

DocumentRoot

ServerName
</VirtualHost>


(4) 重新装载配置
(5) 测试
# openssl s_client -connect IP:PORT -CAfile /path/to/ca_certificate


17、status页面
httpd内嵌有handler,其中有一个handler用于输出当前httpd服务相关状态信息
handler: server-status
启用handler要使用SetHandler指令
handler: 当文件被调用时,apache内部表示形式;一般每种文件类型都有其隐式处理器

 

 

 

 

=============================================================================

http服务的安装和启动

# yum installl httpd

使用#rpm -ql httpd  查看程序的生成的文件

启动服务spacer.gifwKioL1PnbtPB12QSAACvJtIvaeM395.jpg

解决上面的问题

编辑配置文件/etc/httpd/conf/http.conf

启动里面的ServerName这一项

修改如下ServerName   192.168.2.24880  IP地址+端口  

==============================================================================

 ()

创建虚拟目录

1.建立虚拟目录

#mkdir -p /date/web/{stu01,stu02}

2. 修改配置文件添加虚拟目录

#echo "Include  vmhost/vmhost.conf" >>  /etc/httpd/conf/http.conf

3.创建的新设置的配置文件 /etc/httpd/vmhost/vmhost.conf

 

4.编辑我们设置的虚拟目录的配置文件/etc/httpd/vmhost/vmhost.conf

                    Alias /stu01 /"/date/web/stu01/"  这里的stu01是对后面路径的映射即使在创建了test01文件也不会访问而是访问执行的路径

<Directory "/date/web/stu01">     定义文件的位置可以自己指定

Options Indexes MultiViews FollowSymLinks

AllowOverride None

Order allow,deny     

Allow from all

</Directory>

 

Alias /stu02/ "/date/web/stu02/"

<Directory "/date/web/stu02">

Options Indexes MultiViews FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

</Directory>

 

5.现在我们需要在指定的目录创建两个文件并编写内容

 /date/web/stu01,/date/web/stu02,在两个目录中创建网页文件

6.在浏览器输入我们给定的ip地址就可以了

wKioL1PnnorDzD84AAB-6bVRqv4659.jpg

 

==========================================================

对进入网站的用户认证和授权

一、对用户授权和认证

1.编辑我们自己创建的配置文件

#vim  /etc/httpd/vmhost/vmhost.conf

    如果我们想让访问stu01时用户需要进行授权认证才能访问

 

Alias /stu01 /"/date/web/stu01/"  

<Directory "/date/web/stu01">    

Options Indexes MultiViews FollowSymLinks

AllowOverride All

AuthType basic

AuthName "welcome zhou"

AuthUserFile /etc/httpd/.httppwd

Require user zhou

</Directory>

 

Alias /stu02/ "/date/web/stu02/"

<Directory "/date/web/stu02">

Options Indexes MultiViews FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

</Directory>

 

2.创建存储用户帐号和密码的文件,并且为用户创建密码

#htpasswd -c -m  /etc/httpd/.htpasswd   zhou

使用浏览器访问stu01看属否需要密码验证

格式http://IP/stu01

 wKiom1PnnbSC4LcDAADXxGafS18493.jpg

二、对组进行授权和认证

1.编辑文件 /etc/httpd/vmhost/vmhost.conf添加如下内容

Alias /stu01 /"/date/web/stu01/"  

<Directory "/date/web/stu01">    

Options Indexes MultiViews FollowSymLinks

AllowOverride All

AuthType basic

AuthName "welcome GroupName"    提示组名

AuthUserFile /etc/httpd/htgroup        存储组信息的文件

Require group  GroupName                设置组名

</Directory>

 

Alias /stu02/ "/date/web/stu02/"

<Directory "/date/web/stu02">

Options Indexes MultiViews FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

</Directory>

 

2.自己编辑存储主信息的文件编辑格式

    #GroupNameUserName1    UserName2 。。。。

    注意为组添加成员后需要为组内的成员创建密码不然你知道的

    htpasswd -m  /etc/httpd/.htpasswd  UserName

    重读配置文件#service httpd reload

    使用组内成员的身分访问stu01页面

    **我们可以多创建几个用户看非组内成员是否可以访问

=========================================================

创建虚拟主机 

一、不同IP地址同一域名和端口

1.修改apache配置文件/etc/httpd/conf/httpd.conf

  添加Include vvhost/vvhost.conf

2.创建文件#mkdir  /etc/httpd/vvhost/vvhost.conf

    编辑我们创建的关于虚拟主机的配置文件

<VirtualHost 192.168.1.120:80>

ServerAdmin webmaster@dummy-host.example.com

DocumentRoot /date/web/stu01

ServerName dummy-host.example.com

ErrorLog /date/log/stu01.error_log

CustomLog /data/log/stu01.access_log combined

</VirtualHost>

<VirtualHost 192.168.1.121:80>

ServerAdmin webmaster@dummy-host.example.com

DocumentRoot /date/web/stu02

ServerName dummy-host.example.com

ErrorLog /date/log/stu02.error_log

CustomLog /date/log/stu02.access_log combined

</VirtualHost>

**其实哦我们也可以不要Errorlog与Customlog这两项

3.创建在编辑虚拟主机配置文件是指定的各种文件

#touch /data/log/stu01.error_logstu02.error_log

#touch /data/log/{stu02.access_log combined,stu01.access_log combined}

4.上面我们配置了两个IP所有我们需要为虚拟主机再添加一个IP地址

        方法一#ifconfig eth0:0 192.168.2.248  (临时添加会立即生效,重启后失效)

        方法二#cd /etc/sysconfig/network-scripts

                      #cp ifcfg-eth0 ifcfg-eth0:0

                      #vim /ifcfg-eth0:0 

        方法三#setup   进入图形界面添加  

   **后面两种方法都需要重启服务#service network restart

5.使用浏览器登入访问

        注意的是使用19.168.2.248这各IP地址访问是需要我们前面授权了的组和用户

 wKioL1PnntyQSgOxAAD8oW3Q5do927.jpg

二、同IP地址不同端口号

1. 在配置文件/etc/httpd/vvhost/vvhost.conf中添加监听端口

        Listen    80

        Listen    8080

2.修改我们上面定义的虚拟主机的配置文件

<VirtualHost 192.168.1.120:80>

ServerAdmin webmaster@dummy-host.example.com

DocumentRoot /date/web/stu01

:ServerName dummy-host.example.com

ErrorLog /date/log/stu01.error_log

CustomLog /data/log/stu01.access_log combined

</VirtualHost>

<VirtualHost 192.168.1.120:8080>

ServerAdmin webmaster@dummy-host.example.com

DocumentRoot /date/web/stu02

ServerName dummy-host.example.com

ErrorLog /date/log/stu02.error_log

CustomLog /date/log/stu02.access_log combined

</VirtualHost>

使用#service  httpd reload重读配置文件

 

wKiom1PnndGwUJVHAAGrYYdNets892.jpg 

三、同IP同端口不同域名

这里我们需要用到DNS服务器创建域名可以参考前面关于DNS的文章

连接地址http://8381039.blog.51cto.com/8371039/1536628

1.我们直接在我们前面撞见的虚拟主机配置文件中修改

<VirtualHost 192.168.1.120:80>

ServerAdmin webmaster@dummy-host.example.com

DocumentRoot /data/web/stu01

ServerName www.zhou.com

ErrorLog /date/log/stu01.error_log

CustomLog /date/log/stu01.access_log combined

</VirtualHost>

<VirtualHost 192.168.1.120:80>

ServerAdmin webmaster@dummy-host.example.com

DocumentRoot /date/web/stu02

ServerName www.xiang.com

ErrorLog /date/log/stu02.error_log

CustomLog /data/log/stu02.access_log combined

</VirtualHost>

 

方法一在我们创建的DNS服务中添加上面的IP地址和域名

方法二直接编辑window中的host文件系统盘下的\Windows\System32\drivers\etc

        192.168.2.248    www.zhou.com

        192.168.2.248    www.xiang.com

重启服务测试

 

============================================================

建立基于https协议的httpd服务

1.安装mod_ssl模块

    #yum install mod_ssl

2.为服务端生成私钥并为其提供证书

关于证书的原理http://8381039.blog.51cto.com/8371039/1534946

a创建一个CA服务器,并为服务器生成证书

            #(umask 077; openssl gensra -out /etc/pki/CA/private/cakey.pem 2048)

            #cd /etc/pki/CA

            #openssl req -new -x509 -key private/cakey.pem   -out cacert.pem -days 1000

            #cd /etc/httpd    &&  mkdir ssl

            #(umask 077; openssl gensra -out ssl/httpd.key 1024 )

            #openssl req -new -key ssl/httpd.key -out ssl/httpd.csr

            #openssl ca -in /etc/httpd/ssl/httpd.csr -out /etc/httpd/ssl/httpd.crt -days 1000

3.在配置文件中添加一个关于https的配置文件路径

        #echo "Include sslhost/sslhost.conf" >> /etc/httpd/conf/httpd.conf

4.创建配置文件并设置

    #mkdir /etc/httpd/sslhost/sslhost.conf

在文件中添加如下内容

  SSLCertificateFile    /etc/httpd/ssl/httpd.crt           服务器证书所在的位置

  SSLCertificateKeyFile   /etc/httpd/ssl/httpd.key    服务端私钥所在的位置

 

  <VirtualHost 192.168.2.248:443>  

   DocumentRoot   /date/web/stu01  

   ServerName   www.zhou.com

  </VirtualHost> 

5.我们需要将CA服务器加入到收信任的跟证书办法机构

  下载/etc/pki/CA/cacert.pem到本地

  求在证书的后缀名为.crt安装证书即可

6.测试https服务是否成功安装

 =========================================================================

简单的编译安装

编译环境一、apr

#tar xf apr-*

#./configure --profix=/usr/local/apr

#make && make install

编译环境二、apr-util

#tar xf apr-util*

#./configure --profix=/usr/local/apr-util  --with-apr=/usr/local/apr

#make && make install

由于apr-util作为apr的工具使用的,所有我们要将apr的安装路径告诉apr-util


编译安装httpd2.4

编译安装前使#./configure --help  查看具体使用的参数

可能会需要这个程序:(#yum install prec-devel -y) 

# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-mpms-shared=all --with-mpm=event --enable-modules=most
# make && make install


为httpd配置环境变量

    #vim /etc/profile.d/httpd24.sh

      export PATH=/usr/local/apache/bin:$PATH

    读取文件

    #source /etc/profile.d/httpd24.sh


导出文件的帮助文件(就是在文件/etc/man.config中添加帮助文件的路径就可以了)

echo "MANPATH /usr/local/apache/man" >> /etc/man.config


修改配置文件

#cd /etc/httpd24

 编辑httpd配置文件

  添加  Alias  /manual/ /usr/local/apache/manual


**如果提示有无效命令,进入文件注释掉就可以了(文件路径错误信息或有提示)

启动服务

#apachectl start

查看监听端口:#ss -tnl

 

在测试的时候可能会存在记录,最好在测试的时候清楚记录

由于本人属于新人,所有有错误的地方请各位大牛指出,谢谢观看!