恒晖瑶 发表于 2018-11-26 07:00:02

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 : HyperText 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: 每一个请求用一个进程来响应
                           
            稳定性极佳,各个进程间相互独立,但对系统资源消耗较大
                           
   
   
apaherpm方式安装
            # 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:
            --> 针对特定目录的限制
      OptionsIndexesFollowSymLinks   Options (目录参数):表示在这个目录内能够让 Apache 进行的动作
      AllowOverrideNone      
      Order deny,allow
      Deny from 192.168.0.247
      

      
Options:
      Indexes若此目录下没有主页面,是否显示文件列表,主页面与DirectoryIndex 设定值有关
      FollowSymLinks   是否允许追踪显示符号链接
      MultiViews   内容协商    --> 会影响服务器性能    有點像是多國語言的支持,可以依据用戶端的語系而給予不同的語言显示
      ExecCGI    是否允许该目录执行CGI脚本,让此目录具有执行CGI程序的权限         
      AllowOverride: None    是否允许覆盖下面的简单访问控制机制
                        AuthConfig基于认证的访问机制
               
   
简单访问控制的实现:
            Order allow,deny   --> 简单访问控制,若前面的未定义,则以后面的为默认值
            Allow from all         --> 允许所有
               
                eg:
  Order allow,deny
                  Allow from 192.168.0.0/24
                  Allow from172.16.0.0/24
                  
               
      
    /etc/httpd/conf.d/welcome.conf    红帽提供的测试页面,若服务器未提供任何一个主页页面(index.conf)则默认显示

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

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

超时配置:
   
Timeout120               --> TCP协议超时时间,超过120秒就中断该次连接
KeepAliveOff             -->是否支持持续连接,设On较好
MaxKeepAliveRequests100--> 持续连接期间,所允许的最大请求数量0:表示不限制
KeepAliveTimeout15       --> 持续连接时下个请求的等待时间(超时时间)
               
    KeepAlive 参数的配置方法:
         1.客户端浏览的网页包含多个JavaScript CSS或其它类似文件,并且这些文件位于同一台Web服务器时,通常设为 “on”
         2. 客户端浏览的网页只包含少量JavaScript、CSS或其它类似文件,KeepAlive的设置作用不大。
         3.客商端浏览的是动态网页,其内容大多通过 动态脚本生成时,通常设为 “off”
                                 
连接配置:   
prefork模式:
      
            --> prefork 模式(默认)
    StartServers       8      开机默认就启动几个空闲进程
    MinSpareServers    5      空闲进程最少有多少个
    MaxSpareServers   20      空闲进程的最多有多少个
    ServerLimit      256      一个进程最多可以响应多少次(个资源)用户请求,然后就必须(自行)销毁
    MaxClients       256      最大并发连接数(同时在线的请求个数)
    MaxRequestsPerChild4000    每個程序能够提供的最大传输次数要求(一个进程),這個設定可以有效的控管每個 process 在系統上的『存活時間』。 因為根据观察所得,新程序的效能较佳
      
            
worker模式:
   
   
    StartServers         2      默认启动几个空闲进程
    MaxClients         150      
    MinSpareThreads   25      最少空闲线程数
    MaxSpareThreads   75
    ThreadsPerChild   25      每一个进程至多启动多少个线程
    MaxRequestsPerChild0      每一个线程可以响应多少次用户请求
   
  
2.定义服务监听的地址和端口(默认为80)
            
            端口: 可以监听多少端口
                  Listen ip:port
                        ...
                        
                eg: Listen   80
                  Listen      8080
                  Listen172.16.0.1:80       监听172.16.0.1   的80端口
3. 如何装载apache模块
            LoadModule   module_name   /path/to/module

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

4. 自定义日志格式

      ErrorLoglogs/error_log    错误日志
      Loglevelwarn   定义记录错误日志的级别

5.路径别名
            selinux 关闭
            
   Alias   /forum/"/web/forum/"   目录后有“/” ,则必须都有
            
   AliasMatch^/images/(.*)$   /web/images/$1   --> 可以使用正则表达式   把images下的所有文件 转到 /web/images/ 下的同名的文件
                                                                (.*)Options ExecCGI
            
            
            /web/cgi-bin/a.html
            
                #!/bin/bash
                #
                echo "Content-type: text/html"    -->定义网页文件内容的类型
                ...
                ...
                        
            
7.认证访问:
      
    basic认证      浏览器与服务器对密钥和信息采用明文传输
                  是根据目录来实现的
            
      eg: 针对stuff这个目录的设定
      
            
                Options   none
                AllowOverrideAuthConfig   
                AuthType    Basic            认证类型
                AuthName"Stuff of"      提示信息
                AuthBasicProvider   file    --> 不指定时,默认为file
                AuthUserFile/etc/httpd/conf/.htpasswd            指定存放用户帐号、密码的文件(绝对路径)
                AuthGroupFile/etc/httpd/conf/.htgroup
            
                Requirevalid-user          所有的合法用户都能访问
            
            
            
            
                # vi /etc/httpd/conf/.htgroup
                  mystuff:gentoo centos vbird
            
   
   
htpasswd   [-c] [-m] [-D]passwdfileusername      
            -c : 只能在第一次使用时使用(重新生成文件)   
            -m : md5 格式
            -D : 指定从那个文件中删除那个用户
                        
htpasswd -b [-c] [ -m | -d | -p | -s ] [ -D ]    passwdfile username password   --> 可以直接指定密码            
                        
                        
    eg: # htpasswd-c -m /etc/httpd/conf/.htpasswdcentos
         # htpasswd-m /etc/httpd/conf/.htpasswdgentoo
         # htpasswd-b -m /etc/httpd/conf/.htpasswdvbirdredhat
   
   
   
   htdbm[-c] [-m] [-D]filename username    以数据库的方式认证
   
            AllowOverrideAuthConfig   
            AuthType    Basic            
            AuthName"Stuff of"
            AuthBasicProviderdbm
            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
                        
                        
                            ServerName *:80
                            DocumentRoot"/web/port/www.a.com"
                        

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

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

                        
                            ServerName www.b.com
                            DocumentRoot"/web/port/www.b.com"
                        

                        
                            ServerName www.c.com
                            DocumentRoot"/web/port/www.c.com"
                        
                  

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

                        
                            ServerName www.b.com
                            DocumentRoot"/web/port/www.b.com"
                        

                        
                            ServerName www.c.com
                            DocumentRoot"/web/port/www.c.com"
                        
      

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

                  
                            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.logcommon
                  

                  
                            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.logcommon
                  
            
            
            (*)    综合扩展
                  
                            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.logcommon
                            Alias/tube"/web/port/www.a.com"
                            ScriptAlias/cgi"/www/cgi"
                        
                            Options none
                            AllowOverrideAuthConfig
                            AuthType      Basic
                            AuthName      "Control"
                            AuthBasicProviderfile
                            AuthUserfile"/etc/httpd/conf/.htpasswd"
                            Requirevalid-user
                        
                  


                  

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

  

建立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在文件末尾添加如下内容
            
                  ServerName www.magedu.com
                  DocumentRoot"/web/vhosts/www"
            

            
                  ServerName pma.magedu.com
                  DocumentRoot"/web/vhosts/pma"
            

            
                  ServerName wp.magedu.com
                  DocumentRoot"/web/vhosts/wp"
            

   安装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
                #cdphpMyAdmin-3.5.1-all-languages
                # mv * /web/vhosts/pma/
                # cp config.sample.inc.phpconfig.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 -ivhphp53-mcrypt-5.3.3-1.el5.i386.rpmlibmcrypt-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 -rfreadme 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用户更改密码



页: [1]
查看完整版本: Web之apache