Web之apache


Web

    WWW(World Wide Web,环球信息网)也可以简称为 Web,中文名字为"万维网"。它起源于 1989 年 3 月, 由欧洲量子物理实验室 CERN(the European Laboratory for Particle Physics)发展出来的主从结构分布式多媒体系统。
   
    WWW 采用的是客户/服务器结构,其作用是整理和储存各种 WWW 资源,并响应客户端软件的请求,把客户所 需的资源传送到客户端的操作系统上。   
    HTTP(HyperText Transfer Protocol,超文本传输协议)是 Internet 上应用最为广泛的一种网络协议, 所有的 WWW 文件都必须遵守这个标准。 设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。
          
http : Hyper  Text Transfer Protocol  超文本传输协议
监听在80端口,可以方便的实现在多个文件页面之间进行跳转

smtp: 简单邮件传输协议
        smtp+mime  -->编码为纯文本信息 ,发送给接收端   ,接收端利用mime调用相关的解码器时行解码


        MIME:Multipurpose Internet Mail Extensior,多用途互联网邮件扩展)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符(图像、声音、二进制文件)、二进制格式附件等多种格式的邮件消息。

 

URL: <协议>://<主机地址或主机名称>[:port]/<目录资源>   -->统一资源定位符

资源获取的方法
     GET  --> 浏览器直接向 WWW 服务器要求网址上面的资源,也是最常见的
     HEAD: 获取http协议的首部    eg: # curl -I http://172.16.0.1/bbs   
     POST : 提交表单     

     PUT: WebDAV(分布式版本协作)通常会有安全漏洞
     DELETE:
       

http的协议状态码
    1xx            1开头的 --> 纯粹的说明信息
    2xx            2开头的 --> 正常响应信息
    3xx            3开头的    --> URL 重定向信息
    4xx            4开头的 --> 暂时性错误,(客户端错误)
    5xx            5开头的 --> 永久性错误

最常见的web服务器软件apache

apache 支持许多特性,而这些特性大部分是通过编译的模块来实现             
支持MPM(多道处理模块)   
    MPM的常用的两个模块:   

worker: 每一个请求用一个线程来响应,在一个进程内部创建多个线程,用线程响应用户请求
                       
         工作模型: 一个父进程管理几个子进程,一个子进程又管理多个线程,用线程来响应用户请求
                       
         特点:
             并发访问同一个文件,响应速度较快
             稳定性差、一个线程访问文件的时候会对资源加锁
             一个线程崩溃,同一进程的其它线程可能会全军覆没           
               

prefork: 每一个请求用一个进程来响应
                           
            稳定性极佳,各个进程间相互独立,但对系统资源消耗较大
                           
   
   
apahe  rpm方式安装
            # yum install -y httpd
       daemon : httpd     /usr/sbin/httpd  ( /usr/sbin/httpd.event  /usr/sbin/httpd.worker)
      Script ;/etc/rc.d/init.d/httpd     脚本的配置文件 --> /etc/syscofig/httpd
      Configuration :
            /etc/httpd/conf/httpd .conf    主配置文件
            /etc/httpd/conf.d/*.conf       额外参数配置文件 以.conf 结尾

 主配置文件的格式:       
       
            参数    数值
       
    /var/www/html/       --> 预设的首页所在的目录
    /var/www/cgi-bin/    --> 预设给一些可执行的CGI程序放置的目录
    /var/log/httpd/      --> 预设登录文件放置的目录
    /usr/sbin/httpd      --> 主程序
    /usr/bin/htpasswd    --> 预设的产生密码的指令
                       
    查看Apache已载入的模块;   --> # httpd -M               
    检查配置文件语法:          --> # httpd -t  

    查看当前httpd装载的模块: # httpd -l

                  
   
主配置文件:/etc/httpd/conf/httpd.conf
    分为三段: # grep "Section"  httpd.conf
        ### Section 1: Global Environment          --> 全局配置
        ### Section 2: 'Main' server configuration --> 主服务器
        ### Section 3: Virtual Hosts               --> 虚拟主机
                               
基本设定格式:
      <设定项目>
          设定项目内的相关参数
          ...
           ...
      </设定项目>
                              
  eg:
        <Directory "/var/www/html">      --> 针对特定目录的限制
        Options  Indexes  FollowSymLinks     Options (目录参数):表示在这个目录内能够让 Apache 进行的动作
        AllowOverride  None       
        Order deny,allow
        Deny from 192.168.0.247
        </Directory>

       
  Options
        Indexes  若此目录下没有主页面,是否显示文件列表,主页面与DirectoryIndex 设定值有关
        FollowSymLinks   是否允许追踪显示符号链接
        MultiViews     内容协商    --> 会影响服务器性能    有�c像是多���Z言的支持,可以依据用�舳说恼Z系而�o予不同的�Z言显示
        ExecCGI    是否允许该目录执行CGI脚本,让此目录具有执行CGI程序的权限        
        AllowOverride: None    是否允许覆盖下面的简单访问控制机制
                        AuthConfig  基于认证的访问机制
               
   
简单访问控制的实现:
            Order allow,deny   --> 简单访问控制,若前面的未定义,则以后面的为默认值
            Allow from all         --> 允许所有
               
                eg:

                    Order allow,deny
                    Allow from 192.168.0.0/24
                    Allow from  172.16.0.0/24
                   
              
       
    /etc/httpd/conf.d/welcome.conf    红帽提供的测试页面,若服务器未提供任何一个主页页面(index.conf)则默认显示

   网页fiel文档所在的位置       /var/www/html
  

ServerName      --> 配置服务器用于识别自己的主机与端口    eg: ServerName  www.xyuex.com:80
   
ServerTokens  OS  --> 仅告知用�舳宋��服务器的版本与操作系�y     
              Prod: 返回Apache的产品名称
              Major: 主版本号及次版本号
              Min: 主版本号、次版本号、编译版本号
              OS: 主、次、编译、操作系统
              Full: 最详细的信息
   
 ServerRoot  "/etc/httpd"  --> 服务器的工作目录(根)
 PidFile  run/httpd.pid    --> 放置 PID 文件的位置,只有相对路径,考虑 ServerRoot 设定值,所以文件在 /etc/httpd/run/httpd.pid

超时配置
   
  Timeout  120               --> TCP协议超时时间,超过120秒就中断该次连接
  KeepAlive  Off             -->是否支持持续连接,设On较好
  MaxKeepAliveRequests  100  --> 持续连接期间,所允许的最大请求数量  0:表示不限制
  KeepAliveTimeout  15       --> 持续连接时下个请求的等待时间(超时时间)
               
    KeepAlive 参数的配置方法:
         1.客户端浏览的网页包含多个JavaScript CSS或其它类似文件,并且这些文件位于同一台Web服务器时,通常设为 “on”
         2. 客户端浏览的网页只包含少量JavaScript、CSS或其它类似文件,KeepAlive的设置作用不大。
         3.客商端浏览的是动态网页,其内容大多通过 动态脚本生成时,通常设为 “off”
                                  
连接配置:   
prefork模式
       
    <IfModule prefork.c>        --> prefork 模式(默认)
    StartServers       8        开机默认就启动几个空闲进程
    MinSpareServers    5        空闲进程最少有多少个
    MaxSpareServers   20        空闲进程的最多有多少个
    ServerLimit      256        一个进程最多可以响应多少次(个资源)用户请求,然后就必须(自行)销毁
    MaxClients       256        最大并发连接数(同时在线的请求个数)
    MaxRequestsPerChild  4000    每��程序能够提供的最大传输次数要求(一个进程),�@���O定可以有效的控管每�� process 在系�y上的『存活�r�g』。 因�楦�据观察所得,新程序的效能较佳
    </IfModule>   
           
worker模式
   
    <IfModule worker.c>
    StartServers         2        默认启动几个空闲进程
    MaxClients         150       
    MinSpareThreads     25        最少空闲线程数
    MaxSpareThreads     75
    ThreadsPerChild     25        每一个进程至多启动多少个线程
    MaxRequestsPerChild  0        每一个线程可以响应多少次用户请求
    </IfModule>

   
2.定义服务监听的地址和端口(默认为80)
           
            端口: 可以监听多少端口
                    Listen ip:port
                        ...
                       
                eg: Listen   80
                    Listen      8080
                    Listen  172.16.0.1:80       监听172.16.0.1   的80端口
3. 如何装载apache模块
            LoadModule   module_name   /path/to/module

       
       
定义服务器识别的目录默认主页:
            DirectoryIndex   index.html  index.html.var    若第一个找到则使用, 若找不到第一个就找第二个,再找不到就报错

4. 自定义日志格式

        ErrorLog  logs/error_log    错误日志
        Loglevel  warn     定义记录错误日志的级别

5.路径别名
            selinux 关闭
           
   Alias   /forum/  "/web/forum/"     目录后有“/” ,则必须都有
           
   AliasMatch  ^/images/(.*)$   /web/images/$1   --> 可以使用正则表达式     把images下的所有文件 转到 /web/images/ 下的同名的文件
                                                                (.*)  <--  $1引用前括号中内容的
                                                                $ 代替正则表达式中\  来表示引用
           
            eg:
                    Alias  /froum   /web/forum
                    AliasMatch  /forum  /web/forum
                   
                    若访问 http://172.16.0.1/abc/form 时,则只能与(AliasMatch  /forum  /web/forum) 匹配
                   
           
6. CGI  路径别名
            ScriptAlias用法与Alias一样

            ScriptAlias   /cgi-bin/   /web/cgi-bin/   
           
                /web/cgi-bin/ 这个目录中的内容必须要有执行CGI的权限-->Options ExecCGI
           
           
            /web/cgi-bin/a.html
           
                #!/bin/bash
                #
                echo "Content-type: text/html"    -->定义网页文件内容的类型
                ...
                ...
                       
           
7.认证访问
       
    basic认证        浏览器与服务器对密钥和信息  采用明文传输
                    是根据目录来实现的
           
        eg: 针对stuff这个目录的设定
       
            <Directory "/var/www/html/stuff">
                Options   none
                AllowOverride  AuthConfig   
                AuthType    Basic              认证类型
                AuthName  "Stuff of"        提示信息
                AuthBasicProvider   file    --> 不指定时,默认为file
                AuthUserFile  /etc/httpd/conf/.htpasswd            指定存放用户帐号、密码的文件(绝对路径)
                AuthGroupFile  /etc/httpd/conf/.htgroup
           
                Require  valid-user          所有的合法用户都能访问
           
            </Directory>
           
           
                # vi /etc/httpd/conf/.htgroup
                    mystuff:gentoo centos vbird
           
   
   
  htpasswd   [-c] [-m] [-D]  passwdfile  username      
              -c : 只能在第一次使用时使用(重新生成文件)  
              -m : md5 格式
              -D : 指定从那个文件中删除那个用户
                       
  htpasswd -b [-c] [ -m | -d | -p | -s ] [ -D ]    passwdfile username password   --> 可以直接指定密码           
                       
                       
    eg: # htpasswd  -c -m /etc/httpd/conf/.htpasswd  centos
         # htpasswd  -m /etc/httpd/conf/.htpasswd  gentoo
         # htpasswd  -b -m /etc/httpd/conf/.htpasswd  vbird  redhat
   
   
   
   htdbm  [-c] [-m] [-D]  filename username    以数据库的方式认证
   
            AllowOverride  AuthConfig   
            AuthType    Basic             
            AuthName  "Stuff of"
            AuthBasicProvider  dbm
            AuthDBMUserFile   /etc/httpd/conf/stuff.dbm
            Rqeuire valid-user
       
 
  CGI  : 在对应的环境建立一个程序执行环境的进程,然后把运行的结果返回给web服务器,服务器把结果转换为静态的html返回给客户端 ,进程的创建和销毁由web服务器主导
   Module: 将程序的执行环境嵌入到web中,  把动态执行环境整合成模块,让外部程序可以直接在web服务内可以直接执行。( 加载模块  --> eg: php)
   FastCGI : 通过动态进程服务器执行动态内容的程序(应用程序服务器)  分为多层(web服务器(只服务静态内容--缓存)--动态服务器(应用程序--缓存)--数据库服务器)
                 

   
虚拟主机
            一台web服务器,提供多个站点

        1. 使用不同端口
        2. 80端口,使用不同的ip
        3. 使用不同的主机名称    通过请求报文中的主机名称来实现

             
        1.使用同一IP的不同端口:
                    (1).关闭selinux
                    (2).注释: DocumentRoot  "/var/www/html"
                    (3).添加监听端口:Listen 8080
                       
                        <VirtualHost *:80>
                            ServerName *:80
                            DocumentRoot  "/web/port/www.a.com"
                        </VirtualHost>

                        <VirtualHost 172.16.45.1:8080>
                            ServerName 172.16.45.1:8080
                            DocumentRoot  "/web/port/www.b.com"
                        </VirtualHost>

                        <VirtualHost 172.16.45.1:8088>
                                ServerName 172.16.45.1:8088
                                DocumentRoot  "/web/port/www.c.com"
                        </VirtualHost>
       
        2.使用不同IP的同一端口:
                (1). 添加IP地址
                        ifconfig eh0:1  172.16.45.2/16
                        ifconfig eh0:1  172.16.45.3/16
                       
                        <VirtualHost 172.16.45.1:80>
                            ServerName www.a.com
                            DocumentRoot  "/web/port/www.a.com"
                        </VirtualHost>

                        <VirtualHost 172.16.45.2:80>
                            ServerName www.b.com
                            DocumentRoot  "/web/port/www.b.com"
                        </VirtualHost>

                        <VirtualHost 172.16.45.3:8080>
                            ServerName www.c.com
                            DocumentRoot  "/web/port/www.c.com"
                        </VirtualHost>
                   

            IP与端口的综合使用:
               
                        <VirtualHost 172.16.45.1:80>
                            ServerName www.a.com
                            DocumentRoot  "/web/port/www.a.com"
                        </VirtualHost>

                        <VirtualHost 172.16.45.2:80>
                            ServerName www.b.com
                            DocumentRoot  "/web/port/www.b.com"
                        </VirtualHost>

                        <VirtualHost 172.16.45.1:8080>
                            ServerName www.c.com
                            DocumentRoot  "/web/port/www.c.com"
                        </VirtualHost>
       

        3.基于主机名的:
           
              启用:NameVirtualHost *:80    --> 在2.4的版本中不用指定
                       
              在windows的windows\systme32\dirive\hosts文件中添加本地主机名解析
                                172.16.45.1  www.a.com
                                172.16.45.1  www.b.com
                                172.16.45.1  www.c.com
                   
                   
                    NameVirtualHost 172.16.45.1:80

                    <VirtualHost 172.16.45.1:80>
                            ServerName www.a.com
                            DocumentRoot  "/web/port/www.a.com"
                            ErrorLog     /var/log/httpd/error.www.a.log
                            CustomLog    /var/log/httpd/access.www.a.log  common
                    </VirtualHost>

                    <VirtualHost 172.16.45.1:80>
                            ServerName www.b.com
                            DocumentRoot  "/web/port/www.b.com"
                            ErrorLog     /var/log/httpd/error.www.b.log
                            CustomLog    /var/log/httpd/access.www.b.log  common
                    </VirtualHost>

                    <VirtualHost 172.16.45.1:80>
                            ServerName www.c.com
                            DocumentRoot  "/web/port/www.c.com"
                            ErrorLog     /var/log/httpd/error.www.c.log
                            CustomLog    /var/log/httpd/access.www.c.log  common
                    </VirtualHost>
           
           
            (*)    综合扩展
                    <VirtualHost 172.16.45.1:80>
                            ServerName www.c.com
                            DocumentRoot  "/web/port/www.c.com"
                            ErrorLog     /var/log/httpd/error.www.c.log
                            CustomLog    /var/log/httpd/access.www.c.log  common
                            Alias  /tube  "/web/port/www.a.com"
                            ScriptAlias  /cgi  "/www/cgi"
                        <Directory "web/port/www.c.com">
                            Options none
                            AllowOverride  AuthConfig
                            AuthType        Basic
                            AuthName        "Control"
                            AuthBasicProvider  file
                            AuthUserfile  "/etc/httpd/conf/.htpasswd"
                            Require  valid-user
                        </Directory>
                    </VirtualHost>


                   

   
    定义默认虚拟主机的两种方法:
               
                1.     <VirtualHost 172.16.100.1:80>
                        ServerName default
                        DocumentRoot  "web/vhosts/default"
                        ErrorDocument  404 /site_list.html      --> 可以在网页中指定返回错误提示信息
                    </VirtualHost>
                   
                   
                2.     <VirtualHost _default:80>
                        DocumentRoot  "web/vhosts/default"
                        ErrorDocument  404 /site_list.html
                    </VirtualHost>
   
 



建立web, 提供LAMP平台,三台虚拟主机,基于主机名实现
pma.magedu.com    /web/vhosts/pma            phpMyAdmin :基于Web实现MySQL的管理GUI, ( PMA 3.4以后的版本要求php的版本为5.3以上) SSL
www,magedu.com   /web/vhosts/www            discuz 论坛 
wp.magedu.com    /web/vhosts/wp            wordpress

rpm: httpd, php53, pht53-mbstring ,php53-mysql ,mysql ,mysql-server
           mod_sll的模块   php53-gd ,php53-xml

            扩展:php53-mcrept-5.3.3-1
                        Source/nginx/libmcrypt-2.5.7-5...
           
# yum install -y httpd php53 pht52-mbstring php53-mysql mysql mysql-server

    1.  注释  DirtectoryRooot    "/var/www/html"   
        启用  NameVirtualHost *:80

        2. vi /etc/httpd/conf/httpd.conf  在文件末尾添加如下内容
            <VirtualHost *:80>
                    ServerName www.magedu.com
                    DocumentRoot  "/web/vhosts/www"
            </VirtualHost>

            <VirtualHost *:80>
                    ServerName pma.magedu.com
                    DocumentRoot  "/web/vhosts/pma"
            </VirtualHost>

            <VirtualHost *:80>
                    ServerName wp.magedu.com
                    DocumentRoot  "/web/vhosts/wp"
            </VirtualHost>

   安装PMA        PMA 3.4以后的版本要求php的版本为5.3以上       
          
        3.    phpMyAdmin-3.5.1-all-languages.tar.bz2
                # tar xf phpMyAdmin-3.5.1-all-languages.tar.bz2
                #  cd  phpMyAdmin-3.5.1-all-languages
                # mv * /web/vhosts/pma/
                # cp config.sample.inc.php  config.inc.php
                # vi /config.inc.php
                        更改 $cfg['blowfish_secret'] = 'a8b7c6dchangyue'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
                   
                # vi /etc/php.ini
                        更改时区 timezone
                                date.timezone  = Asia/Shanghai
       
        为让phpMyAdmin的cookie认证是比较安全的,需要添加mcrypt(php53-mcrypt)扩展 

      php53-mcrypt-5.3.3-1.el5.i386.rpm
      libmcrypt-2.5.7-5.el5.i386.rpm

        # rpm -ivh  php53-mcrypt-5.3.3-1.el5.i386.rpm  libmcrypt-2.5.7-5.el5.i386.rpm

       
        启用phpMyAdmin 的高级功能:
            快速设置高级功能:

                通过 examples/create_tables.sql 创建必需的数据表。 文档
                创建一个用户并授予其访问上一步操作中创建的数据表的权限。 文档
                在配置文件 (config.inc.php) 中启用高级功能,参见 config.sample.inc.php 中的范例。 文档
                请重新登录 phpMyAdmin 以加载新配置并使其生效。
               
                # mysql -usroot -p
                    > SOURCE  ./create_tables.sql
                    > SHOW DATABASES;
                        查看是否多个一个phpmyadim 的表
                   \q
                  
                 # vi /web/vhosts/pam/config.inc.php
   
       
       
        4.  # /etc/init.d/mysqld start
            #  mysql
                SET PASSWORD FOR root@'localhost'=password('redhat');
                SET PASSWORD FOR root@'127.0.0.1'=password('redhat');
               
        5. 在浏览器中输入: pma.magedu.com
       
   
    安装discuz
   
       Discuz_7.2_FULL_SC_GBK.zip
       
        # unzip Discuz_7.2_FULL_SC_GBK.zip  -d /web/vhosts/www
        # rm -rf  readme utilities index.php
        # mv upload/*  ./
       
       
        # vi /etc/httpd/conf/httpd.conf        解决乱码
       
        # vi /etc/php.ini
                short_open_tag = On
               
        # cd /web/vhosts/www
        # setfacl -m u:apache:rwx ./attachments/ ./forumdata/ ./forumdata/cache/ ./forumdata/templates/ ./forumdata/threadcaches/ ./forumdata/logs/ ./uc_client/data/cache/
       
       
       
        通过 pma.magedu.com
        添加用户discuz,并新增数据库discuz
             
    # mysql
       >use mysql 设定默认表
       >SELECT host,user,password FROM user; 查看表
       >DROP USER '' @localhost;  删除匿名用户
       >UPDATE user SET password=password('redhat') WHERE user='root';   --> 为所有的root用户更改密码

你可能感兴趣的:(apache,lamp,虚拟主机)