码迷,mamicode.com
首页 > Web开发 > 详细

http配置

时间:2016-07-19 13:59:19      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:http

TCP/IP协议

    用来实现主机间通讯

    TCP/IP协议不同的端口PORT

    用来实现主机上不同的进程(及应用)的交互,

    如:http ftpstmp https ssh 分别对应的端口是 80 21 25 443 22端口

ss-tnl

    查看本机都开了一些什么服务,或者说什么应用,不同的服务对应各自的端口

ps aux

    查看进程

    web页面由多个资源组成

                                                   http:超文本传输协议;传输的就是html超文本文件

      html:超文本标识语言;html写出来的就是超文本

      每一个资源都要进程一次完整的http事务,即请求<-->响应

      URL:每一个资源的唯一标识,用于描述服务器上某特定资源的位置

DocumentRoot

    将放web资源的目录映射为根,

web服务器上想开启http服务,需要安装httpd软件包,httpd是http协议的的主程序。它主要功能是建立处理请求的子进程或线程的池,httpd不应该被直接调用,而应该由 apachectl 调用


httpd支持 MPM DSO 是什么概念

                                                 DSO是功能模块化动态装载和卸载

    MPM多路处理模块;的种类,主要定义我们的httpd是基于何种并发模型,来响应大容量的用户请求的

    prefork

        主进程,子进程

    worker

        主进程,子进程,线程

    event

 C6上httpd-2.2: event为测试模型;

         MPM 不支持DSO机制;

 C7上httpd-2.4: MPM 支持DSO机制;


C6和C7 怎么切换MPM模式

 C6

    /etc/sysconfig/httpd

    HTTPD=/usr/sbin/httpd|httpd.worker|httpd.event(全部注释的状态,默认是httpd即prefork模式的)

 C7

    /etc/httpd/conf.modules.d/00-mpm.conf

    修改这一行:LoadModulempm_MPMNAME_module modules/..

查看httpd程序的模块列表:

     查看静态编译的模块:

       httpd-l(httpd.worker -l)

     查看编译的所有模块:

       httpd-M(httpd.worker -M)

          (static)表示静态的编译进程序内的

         (shared)表示动态可以自由手动加载卸载的

80,500ms, 256(假设每个网页有80个资源,每个资源响应500ms,httpd设定服务端并发响应数量是256个)512*86400/80=55WPV(每秒512个资源,乘以一天的秒数,除以80个资源,就是每天的pv)

    PageView(页面浏览量)

    UV:User View (用户流量)

 

安装httpd,

 C6和C7都可以用yuminstall httpd 来安装

    /etc/httpd/

    /var/www/html

    生成的文件在/etc/httpd/{conf,conf.d,log,modules,}

     conf中的httpd.conf是主配置文件,conf.d中是一些子配置文件,以及welcome欢迎页

     log和modules都是软连接,分别对应/var/log/httpd/..和  /usr/lib64/httpd/..

     资源文件路径在/var/www/html(index.html首页)

说明:

   C6中/etc/sysconfig/httpd(在这里配置切换httpd的默认主程序文件httpd,httpd.worker,httpd.event)

   C7不需要切换,支持动态模块加载

   C6开机启动服务 chkconfig httpd on|off

    C7开机启动服务 systemctl enable httpd.service

        httpd/conf/httpd.conf主配置文件的配置

    1、增加监听端口,默认Listen80  

      可定义多次;

         Listen80

          Listen8080

          Listen172.16.76.100 8080(必须是本机可用的有效地址)

          省略IP,表示0.0.0.0;(表示本机上的所有有效IP地址)

     2、是否开启持久连接,断开条件(数量,时间)

           KeepAliveOn|Off(开启或关闭)

           MaxKeepAliveRequests100(100次后断开)

           KeepAliveTimeout15(15秒后断开,在centos7上可以到毫秒                  3、DSO (动态模块装载)

             LoadModule指令

           LoadModule  Mod_Name modules/Module_File.so

             关闭的话注释掉就可以了

             相对路径,是相对于ServerRoot指令所定义的路径而言;

     4、站点资源访问控制(httpd2.2和2.4区别很大,现在讲的是httpd2.2的)

             就这样配就OK

             <Directory"/var/www/html">

            OptionsIndexes FollowSymLinks(可以改为Options None)

            AllowOverride None(全部关闭是对的)

            Orderallow,deny(Order后面allow和deny谁在前,谁就先生效,这里定义生效顺序的)Allowfrom all

        </Directory>

        httpd2.2是黑名单机制,如 <Directory"/PATH/TO/SOME_DIR">.....            </Directory>      封装的目录是不可以访问的        

        基于文件系统进行

        基于url路径进行

        基于文件系统进行

        <Directory"/PATH/TO/SOME_DIR">

        </Directory>

基于url路径进行

<Location"/PATH/TO/SOME_URL">

</Location>

<LocationMatch"URL_PATTERN">

</LocationMatch>

目录中的常用指令:

(1)Options:用于定义资源的展示方式;后跟以空白字符分隔的“选项”列表;

 IndexesIncludes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews None All

Indexes:允许索引;(比较危险,没有主页index时,显示全部)(建议关闭)

FollowSymLinks:允许跟踪符号链接;(如果是软连接,可以访问内容)(建议关闭)

SymLinksifOwnerMatch

ExecCGI:允许执行CGI脚本;(建议关闭)

如果都想关闭,则用配置成 :Options None

(2)AllowOverride

在某一个目录下放一个隐藏文件.htaccesss,此目录就不能被访问了。然而这样会大大的降低服务器性能强烈建议使用:AllowOverrideNone,不启用即可

(3)order和allow/deny from

基于IP地址的访问控制;(因为ip地址可以伪装,所以这种方案是基本无效的,做了解即可)

order用于定义allow和deny的生效次序;

allowfrom IP/NETWORK/FQDN

denyfrom IP/NETWORK/FQDN

来源地址格式:

IP

NetAddr:

172.16

172.16.0.0

172.16.0.0/16

172.16.0.0/255.255.0.0

FQDN

DAMAIN

来源请求遵循最佳匹配法则机制;(最精确匹配的优先生效)

orderallow, deny

5、定义站点主页面:

默认是这样的:DirectoryIndexindex.html index.html.var

默认index.html 多个值的话,自左向右去搜索

6、日志设定

ErrorLoglogs/error_log (错误日志路径)

LogLevelwarn (记录级别)

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

CustomLoglogs/access_log combined指明路径及日志格式)

格式:

%h    Remote host(远程主机)

%l     Remote logname (from identd, if supplied).(远程用户登录时的用户名,基本多数情况是空)

%u    Remote user (from auth; may be bogus ifreturn status (%s) is 401)(用户名,基本多数情况是空)

%t    Time the request was received (standardenglish format)(请求被收到的时间)

%r    First line of request(请求报文的首行)

%s    Status. For requests that got internallyredirected, this is the status of the *original* request --- %>s for thelast.(收到请求后具体的状态码是什么)

%b    Size of response in bytes, excluding HTTPheaders.(响应报文的大小)

%{Foobar}i        The contents of Foobar: header line(s)in the request sent to the server.

%{Host}i显示host的值

%{Referer}i本页面是从那个页面的超连接进来的,显示上级页面的值

%{User-Agent}i用户代理,浏览器名称

7、基于用户的访问控制机制(用户登录才可以访问的)

  (1)创建账号文件,创建虚拟账号密码(命令htpasswd)

   #which htpasswd

  /usr/bin/htpasswd

 #rpm -qf /usr/bin/htpasswd

  httpd-tools-2.2.15-45.el6.centos.x86_64

 htpasswd-c -m /etc/httpd/conf/.htpasswd tom 第一个账号有-c的原因是要创建.htpasswd文件,

 htpasswd-m /etc/httpd/conf/.htpasswd qiji    第二个账号在.htpasswd中生成

 htpasswd[options]  /PATH/TO/HT_PASSWD_FILE  USERNAME

   -c:创建文件;

   -m:md5加密密码;

   -s:SHA加密密码;

   -D:删除指定用户

(2)定义安全域用<Directory "PATH">……</Directory>封装配置

<Directory"/PATH/TO/SOME_DIR">(如“/data/web/admin”)

   Options  None  (选项)

   AllowOverrideNone (指令)

   AuthTypeBasic (认证类型)

   AuthName"SOME_STRING_HERE"(如 For Administrator)

   AutuUserFile"/PATH/TO/HT_PASSWD_FILE"(账号密码存放路径)

    Requireuser user1 user2 ...(授权给某些用户,或者valid-user所有有效用户)

    </Directory>

 也可于基于组账号进行认证:

   (1)创建用户账号密码文件完成后,还得将用户定义为组(创建组账号文件)

   组文件:每行定义一个组

    htpasswd-m /etc/httpd/conf/.htpasswd user1 第一个账号在.htpasswd中生成

   htpasswd-m /etc/httpd/conf/.htpasswd user2      第二个账号在.htpasswd中生成

   vim/etc/httpd/conf/.htgroup  创建组文件

      mygrps1:user1 user2        添加用户进组

      mygrps2:user3 user4     每一行定义一个组

    (2)定义安全域用<Directory "PATH">……</Directory>封装配置

     <Directory"/PATH/TO/SOME_DIR">(如/data/web/admin)

       Options  None  (选项)

      AllowOverrideNone (指令)

     AuthTypeBasic (认证类型)

      AuthName"SOME_STRING_HERE"(如 For Administrator)

      (这一行必须有) AutuUserFile"/etc/httpd/conf/.htpasswd"(账号密码存放路径)

     AutuGroupFile “/etc/httpd/conf/.htgroup”

      #Require user user1 user2 ...(授权给某些用户,或者valid-user所有有效用户)

     Require group mygrps1 mygrps2...

     </Directory>

8、虚拟主机配置

 测试403的原因

    1、关闭防火墙

      C6

      serviceiptables stop

     chkconfigiptables off

     C7

      systemctlstop firewalld.service

      systemctlenable firewalld.service

 2、关闭selinux

     vim/etc/selinux/config

      改成SELINUX=disabled

 C6上 network重启总失败

    关闭NetworkManager服务

 yum总安装失败

     执行 yum cleanall

 基于IP的虚拟主机示例:

  /etc/httpd/conf/httpd.conf里配置

      或新建两个,建议新建

    vim/etc/httpd/conf.d/vhost1.conf

     vim/etc/httpd/conf.d/vhost1.conf

 前提:本机需要配置了用到的所有IP地址;

      <VirtualHost172.16.100.71:80>

     ServerNamewww1.magedu.com

     DocumentRoot/data/vhosts/www1

        CustomLoglogs/www1-access_log combined

       </VirtualHost>

         <VirtualHost172.16.100.72:80>

        ServerNamewww2.magedu.com

      DocumentRoot/data/vhosts/www2

        CustomLoglogs/www1-access_log combined

        </VirtualHost>

基于端口的虚拟主机示例:

    前提:httpd监听了用到的所有端口;

    <VirtualHost172.16.100.71:80>

    serverNamewww1.magedu.com

   DocumentRoot/data/vhosts/www1

     CustomLoglogs/www1-access_log combined

     </VirtualHost>

      <VirtualHost172.16.100.71:8080>

     ServerNamewww2.magedu.com

    DocumentRoot/data/vhosts/www2

     CustomLoglogs/www1-access_log combined

 </VirtualHost>                                          

基于FQDN的虚拟主机示例:

     NameVirtualHost172.16.100.71:80

    <VirtualHost172.16.100.71:80>

       ServerNamewww1.magedu.com

      DocumentRoot/data/vhosts/www1

       CustomLoglogs/www1-access_log combined

       </VirtualHost>

       <VirtualHost172.16.100.71:80>

      ServerNamewww2.magedu.com

       DocumentRoot/data/vhosts/www2

      CustomLoglogs/www1-access_log combined

      </VirtualHost>                  

9、status页面

  LoadModule  status_module modules/mod_status.so

      <Location/server-status>

     SetHandlerserver-status

     Orderallow,deny

      Allowfrom 172.16

       </Location>     

       ExtendedStatus{On|Off}

浏览器测试:

     http://192.168.1.60/server-status         

10、user/group

    指定以哪个用户的身份运行httpd服务进程;

   主进程是由root运行的,因为80端口必须root身份

     子进程用其他用户运行,为了安全

    如果出现403,注意要查看html文件的权限是否可读

      Userapache

      Groupapache

 11、https (httpover ssl)

 SSL会话的简化过程

    1)客户端发送可供选择的加密方式,并向服务器请求证书;

    (2)服务器端发送证书以及选定的加密方式给客户端;

     (3)客户端取得证书并进行证书验正:

      如果信任给其发证书的CA:

     (a)验正证书来源的合法性;用CA的公钥解密证书上数字签名;

      (b)验正证书的内容的合法性:完整性验正

      (c)检查证书的有效期限;

       (d)检查证书是否被吊销;

       (e)证书中拥有者的名字,与访问的目标主机要一致;

(4)客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换;

 (5)服务用此密钥加密用户请求的资源,响应给客户端;

 注意:SSL会话是基于IP地址创建;所以单IP的主机上,仅可以使用一个https虚拟主机;

 配置httpd支持https:

   (1)为服务器申请数字证书;

    测试:通过私建CA发证书

    (a)创建私有CA

    (b)在服务器创建证书签署请求

      (c)CA签证

     (2)配置httpd支持使用ssl,及使用的证书;

      #yum -y install mod_ssl

  配置文件:/etc/httpd/conf.d/ssl.conf

      DocumentRoot

     ServerName

      SSLCertificateFile

     SSLCertificateKeyFile

(3)测试基于https访问相应的主机;

 #openssl  s_client  [-connect host:port] [-cert filename][-CApath directory] [-CAfile filename]

      cookie和curl

        服务器在第一次客户端连上来后,会给他一个cookie,以后客户端就自带cookie,如果没有cookie,登录后,访问页面又会出现要求登录

      url相当与浏览器中测试一样


 http报文格式

     首部和body,GET,200,403,404,referer,user-agent理解

     获得、引用页地址、浏览器

 httpd服务器上线之前做压力测试,检测最大并发数,生成环境,别测,带宽会占满

    ab-c 100 -n 4000 http://www.mageedu.com/index.html(默认主页也不能省略)

 配置环境:

  /etc/httpd/conf/httpd.conf

  模块配置文件:/etc/httpd/conf.modules.d/*.conf

    分段配置文件:/etc/httpd/conf.d/*.conf

     特有配置:

   (1)切换MPM;

     编辑配置文件/etc/httpd/conf.modules.d/00-mpm.conf

     修改这一行:LoadModulempm_MPMNAME_module modules/..

   (2)基于IP地址的访问控制

     统一使用Require指令进行,不再支持使用allow,deny等;

       允许所有主机访问:Requireall granted

       拒绝所有主机访问:Requireall denied

         <RequireAll>

         Requireip 172.16.100.67

         Requireall denied

        </RequireAll>

       控制特定的客户端IP地址访问:

  Requireip IPADDR:授权

   Requirenot ip IPADDR:拒绝

     控制特定的主机名访问:

      Requirehost HOSTNAME

       Requirenot host HOSTNAME

       HOSTNAME:

       FQDN:单个主机名

       domain.tld:域名内的所有主机

 (3)虚拟主机

    基于FQDN的虚拟主机不再需要专门的指令NameVirtualHost;

       PHP在C6和C7的安装

 在httpd是prefork的前提下

  C6C7 都是执行 yum install php 即可

    php作为httpd的模块,只需执行servicehttpd reload 重启加载php即可生效

 配置文件:

    /etc/php.ini,/etc/php.d/*.ini

 测试页(首页)的更改

    将原来的index.html----->index.php

                                                            PHP连接mysql的安装

yuminstall php-mysql              

  LAMP一步到位安装

 CentOS6:

  #yum install httpd php php-mysql mysql-server

     #service mysqld start

      #service httpd start

CentOS7:

#yum install httpd php php-mysql mariadb-server

      #systemctl start mariadb.service httpd.service

  php有许多组件之包,但是php-fpm不是他的之包,想安装php-fpm必须先把php卸载

 systemctl stop httpd.service

  rpm -e php

   yum install php-fpm

 

安装php-fpm:后,配置httpd:

     ProxyRequestsOff

     ProxyPassMatch

      DirectoryIndexindex.php


http配置

标签:http

原文地址:http://11650350.blog.51cto.com/11640350/1827667

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!