APACHE架构WEB服务器

这是我的总结,然后简单的排版了一下,希望大家用心观看。

课程目标:

  • 了解常见的WEB服务器

  • 熟悉apache服务的基本配置

  • 掌握apache服务的虚拟主机配置

  • 掌握apache的访问控制

  • 掌握MySQL的安装

一、WEB服务概述

web服务是我们日常使用最多的服务,所有的网站都是以web服务的形式为我们呈现

1. WEB服务的特点

  • web服务分为客户端和服务端

  • web客户端通常是我们所使用的浏览器(IE/Chrome/Firefox/Safari或者命令行浏览器等)

  • web服务端就是我们所访问的网站提供的web服务器

    • 常见的web服务端程序有:

      Apache/Nginx/Tengine/Lighttpd/IIS等,不同的web服务针对不同的系统平台各自有优缺点

2. HTTP协议

  • web服务端与客户端是通过HTTP协议(HyperText Transfer Protocol)超文本传输协议进行交互

  • Apache或Nginx都只支持静态页面的解析

3. 静态页面和动态页面

  • HTML语言

    • HTML(HyperText Markup Language)超文本标记语言,是绝大多数网页使用的语言,几乎所有的网页都是以HTML作为源代码,通过浏览器解释后展现出来

    • HTML有固定语法,用来存储网页数据,定义不同元素,如文字、标题、图片等,现在的网页都用CSS语言来存储网页的表现形式

    • 现代主流的网页设计架构: ​ 内容存储:HTML ​ 网页架构:div ​ 网页样式:css

    • HTML形式的页面我们称之为静态页面,包含一些图片、文本、表格等

  • 动态语言

    • 网站使用特定的语言编写的一些程序,在用户访问的时候基于不同的条件生成不同的HTML代码返回给用户浏览器,这样就实现网页的动态化

    • 常见的动态语言: .php .jsp .cgi .asp、python等

4. WEB服务的中间件

  • php: PHP-FPM、HHVM (HipHop Virtual Machine)

  • jsp: Tomcat、JBOSS、Resin、IBM WebSphere

5.常见的WEB组合方式

  • LAMP (Linux + Apache + MySQL + PHP) //php作为Apache的模块

  • LNMP (Linux + Nginx + MySQL + PHP) //php-fpm进程(服务)

  • Nginx /Apache+ Tomcat

二、Apache的介绍

Apache是著名的web服务器软件,开源,由apche软件基金会负责管理开发。

  • Apache服务特点:

  1. 开放源码

  2. 跨平台

  3. 支持多种编程语言

  4. 采用模块化设计

  5. 安全稳定

  • Apache的工作原理

  • Apache的官网和手册

    • www.apache.org

    • 英文手册:需要安装

      httpd-manual.noarch         //安装后启动服务就可以本地查看
      yum -y install httpd-manual.noarch  
      service httpd restart
      查看官方手册:
      IE:http://10.1.1.1/manual
      ​
    • 中文手册参考:Apache HTTP Server Version 2.2 文档 - Apache 2.2 中文手册 [金步国]

  • Apache的软件包

    • 软件包: httpd

三、开胃菜-搭建简易WEB服务

1. 关闭防火墙和selinux
2. 配置yum源
3. 软件三步曲(查看安装|确认成功安装|查看软件的文件列表)
4. 了解配置文件   man 5 xxx.conf |程序的官方手册(apache、mysql、oracle)
5. 根据需求通过修改配置文件来完成服务搭建
6. 启动服务,开机自启动
7. 测试验证
需求1:访问一个静态页面,内容:hello world 五一快乐!
环境:
web-server:10.1.1.1
步骤:
1.略
2.略
3.软件三步曲
​
/etc/httpd
/etc/httpd/conf             //主配置文件的主目录
/etc/httpd/conf.d           //子配置文件的目录
/etc/httpd/conf.d/README
/etc/httpd/conf.d/welcome.conf  //欢迎页
/etc/httpd/conf/httpd.conf  //主配置文件
/etc/httpd/conf/magic
/etc/httpd/logs     /var/log/httpd      //互为硬连接
/etc/httpd/modules
/etc/httpd/run      /var/run/httpd      //互为硬连接     
/etc/logrotate.d/httpd              //日志轮转
/etc/rc.d/init.d/htcacheclean
/etc/rc.d/init.d/httpd              //服务启动脚本
/etc/sysconfig/htcacheclean
​
/usr/sbin/apachectl
/usr/sbin/htcacheclean
/usr/sbin/httpd             //二进制命令
​
/var/log/httpd
/var/run/httpd
/var/www                    //apache服务的数据目录
/var/www/html               //apache服务的静态页面存放路径
​
//以下两个目录互为硬连接,互为硬连接的文件是同一个文件,一个改变另一个也改变
[root@web-server ~]# ll -id /var/log/httpd/
798080 drwx------. 2 root root 4096 Apr 25 10:17 /var/log/httpd/
[root@web-server ~]# ll -id /etc/httpd/logs/
798080 drwx------. 2 root root 4096 Apr 25 10:17 /etc/httpd/logs/
​
4. 了解配置文件
5. 根据需求通过修改配置文件完成服务搭建
1)创建一个首页文件
echo "hello world 五一快乐" > /var/www/html/index.html
​
2)启动服务
​
6. 测试验证
IE:http://10.1.1.1

四、Apache服务的基本配置

RHEL6/CentOS6:2.2版本

RHEL7/CentOS7:2.4版本

1. Apache基础

服务端口:
80/tcp(http)
配置文件:
/etc/httpd/conf/httpd.conf      //主配置文件
/etc/httpd/conf.d/*.conf        //子配置文件
/etc/httpd/conf.d/welcome.conf  //默认测试页面
​
/etc/httpd/conf             配置文件目录  
/etc/httpd/conf.d           子配置文件目录
/etc/httpd/conf.d/README     说明书
/etc/httpd/conf.d/welcome.conf   当没有首页index.html 显示红帽欢迎页面
/etc/httpd/conf/httpd.conf      主配置文件
/etc/httpd/logs                 日志目录 /var/log/httpd/硬链接
/etc/httpd/modules              库文件 /usr/lib64/httpd/modules硬链接
/etc/httpd/run                  pid信息
/etc/logrotate.d/httpd          日志轮循
/etc/rc.d/init.d/httpd          启动脚本
/etc/sysconfig/httpd            额外配置文件
/usr/lib64/httpd               
/usr/lib64/httpd/modules        库文件
/usr/lib64/httpd/modules/mod_actions.so
/usr/sbin/apachectl             apache官方启动脚本
/usr/sbin/httpd
/var/www                        apache数据目录
/var/www/cgi-bin                存放apache的cgi脚本数据目录
/var/www/html                   存放apache的html数据目录
/var/www/error                 
/var/www/error/HTTP_NOT_FOUND.html.var    404
/var/www/error/HTTP_FORBIDDEN.html.var    403

2. Apache基本配置选项

ServerRoot "/etc/httpd"                       //服务主目录
Listen 80                                   //监听端口
IncludeOptional conf.d/*.conf                //包含conf.d下的*.conf文件
User apache                                //运行Apache的用户
Group apache                               //运行Apache的用户组
DirectoryIndex index.html index.php      //设置默认主页
DocumentRoot               /var/www/html/               //站点默认数据主目录
​
       //系统的根目录授权
    Options FollowSymLinks      //支持软链接
    AllowOverride None         //不支持.htaccess 访问列表 .htaccess文件提供了针对每个目录改变配置的方法

​
RHEL6:
         //授权
    Options Indexes FollowSymLinks      //支持索引 支持软链接
    AllowOverride None          //不支持 .htaccess 访问列表
    Order allow,deny            //排序 先允许再拒绝
    Allow from all                 //允许all

​
REHL7:

     AllowOverride None
     Require all granted        //允许所有人访问
扩展:配置进程和线程 针对apache2.2 针对面试
# prefork MPM                                   //进程模式

StartServers            10                      //初始建立的进程数
MinSpareServers     10                          //最小空闲的进程数
MaxSpareServers    15                           //最大空闲的进程数
ServerLimit          2000                       //最大启动的进程数 默认256
MaxClients           2000                       //最大并发连接数  默认256    
MaxRequestsPerChild  4000            //每个子进程在其生命周期内允许响应的最大请求数,0不限制

​
# worker MPM                                   //线程模式

StartServers            2                          //初始建立的进程数
ThreadsPerChild     50                         //每个进程建立的线程数
MinSpareThreads   100                      //最小空闲的线程数
MaxSpareThreads  200                       //最大空间的线程数
MaxClients           2000                      //最大的并发访问量(线程)
MaxRequestsPerChild 0                //每个子进程在其生命周期内允许响应的最大请求数,0不限制

3.Apache更改默认数据根目录

DocumentRoot "/webserver"

    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all

​
[root@web-server conf]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd: Syntax error on line 293 of /etc/httpd/conf/httpd.conf:
DocumentRoot must be a directory
                                                           [FAILED]
[root@web-server conf]# mkdir /webserver
​
[root@web-server conf]# service httpd restart
Stopping httpd:                                            [FAILED]
Starting httpd: httpd: apr_sockaddr_info_get() failed for web-server
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
原因:主机名和IP地址解析问题                                                           [  OK  ]
​
[root@web-server conf]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 10.1.1.1 for ServerName
                                                           [  OK  ]
vim /etc/httpd/conf/httpd.conf
...
ServerName  10.1.1.1:80
​
[root@web-server conf]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
​
​
root@web-server conf]# cp /var/www/html/index.html /webserver/
​
测试验证

4.Apache共享文件

Apache如何共享文件呢?

  • 软连接方式

需求1:共享web-server服务端的/data目录里的所有文件
1. apache服务默认情况下到哪个目录里找相应的文件
2. 将本地的/data目录做一个快捷方式(软连接)到指定的目录里
​
步骤:
1. 创建/data/共享目录
[root@web-server ~]# touch /data/file{1..5}
[root@web-server ~]# mkdir /data/kangjian
[root@web-server ~]# ll /data/
total 4
-rw-r--r-- 1 root root    0 Apr 25 11:21 file1
-rw-r--r-- 1 root root    0 Apr 25 11:21 file2
-rw-r--r-- 1 root root    0 Apr 25 11:21 file3
-rw-r--r-- 1 root root    0 Apr 25 11:21 file4
-rw-r--r-- 1 root root    0 Apr 25 11:21 file5
drwxr-xr-x 2 root root 4096 Apr 25 11:22 kangjian
[root@web-server ~]# ll /webserver/
total 4
-rw-r--r-- 1 root root 25 Apr 25 11:16 index.html
2. 创建快捷方式(软连接)
[root@web-server ~]# ln -s /data/ /webserver/share
[root@web-server ~]# ll /webserver/share/
total 4
-rw-r--r-- 1 root root    0 Apr 25 11:21 file1
-rw-r--r-- 1 root root    0 Apr 25 11:21 file2
-rw-r--r-- 1 root root    0 Apr 25 11:21 file3
-rw-r--r-- 1 root root    0 Apr 25 11:21 file4
-rw-r--r-- 1 root root    0 Apr 25 11:21 file5
drwxr-xr-x 2 root root 4096 Apr 25 11:22 kangjian
[root@web-server ~]# ll /webserver/
total 4
-rw-r--r-- 1 root root 25 Apr 25 11:16 index.html
lrwxrwxrwx 1 root root  6 Apr 25 11:23 share -> /data/
​
3. 测试验证
结论:
1. 当默认数据目录里有index.html的首页文件时,优先找首页文件
2. 当默认数据目录里没有index.html的首页文件时,会显示测试页
3. 不管有没有首页文件都不会直接找数据文件
解决:
1. 加入路径
http://10.1.1.1/share
2. 将测试页欢迎页删除或者重命名即可
[root@web-server conf.d]# mv welcome.conf welcome.conf.bak
[root@web-server conf.d]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
​

  • 别名方式

​
Alias /test/ "/data/"
​

    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all

​
注意:
别名后面的路径"/""会影响访问
​
IE:http://10.1.1.1/test     ——>不能访问
IE:http://10.1.1.1/test/    可以访问

课堂练习:

通过2种方式共享你的/home目录和/tmp目录里的所有文件

三、Apache服务的访问控制

1. 开启基本认证(用户密码)

AuthType Basic
AuthName "Restricted Files"
#(下面这一行是可选的)
AuthBasicProvider file
AuthUserFile /usr/local/apache2/passwd/passwords
Require user rbowen
​
​

需求:/webserver——>index.html

步骤:
1. 创建密码文件
[root@web-server conf]# htpasswd -cm /etc/httpd/conf/.passfile harry
New password: 
Re-type new password: 
Adding password for user harry
[root@web-server conf]# cat .passfile 
harry:$apr1$eMymxFmU$A1/l6yw29iVRdwE968TBT0
[root@web-server conf]# htpasswd -mb /etc/httpd/conf/.passfile jack 123
Adding password for user jack
[root@web-server conf]# cat .passfile 
harry:$apr1$eMymxFmU$A1/l6yw29iVRdwE968TBT0
jack:$apr1$C3TPLnU8$s2F2Dv8Aol2LjbSqqizDI/
​
htpasswd:
-c:创建新的密码文件
-m:密码使用md5加密
-b:非交互式
​
2. 修改配置文件开启基本认证
vim /etc/httpd/conf/httpd.conf
。。。

    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
    AuthType Basic          //开启基本认证
    AuthName "Input your name and password:"    //认证信息
    AuthBasicProvider file      //文件
    AuthUserFile  /etc/httpd/conf/.passfile     //刚刚创建的密码文件
    Require user  harry         //可用用户

​
3. 重启服务
service httpd restart
​
​
总结:
1. 开启用户名密码认证有几点注意
1) 需要知道网站的数据根目录  /webserver
2) 将认证信息加入到  .....
3) 创建一个密码文件来保存用户名和密码
​
​
需求2:允许多个人来访问如何实现
1. 创建一个文件保存所有的用户(将很多用户加入到一个组里)
vim /etc/httpd/conf/groups
admin:user01 user02 user03
​
2. 将组成员加入到密码文件中
htpasswd -mb /etc/httpd/conf/.passfile user01 123
htpasswd -mb /etc/httpd/conf/.passfile user02 123
htpasswd -mb /etc/httpd/conf/.passfile user03 123
​
3. 修改主配置文件

    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
    AuthType Basic
    AuthName "Input your name and password:"
   AuthBasicProvider file
   AuthUserFile /etc/httpd/conf/.passfile
   AuthGroupFile /etc/httpd/conf/groups
   Require group admin

​
4. 重启服务
service httpd restart
​
5. 测试验证
​
总结:
1. 将很多人加入到组里(创建一个文件建立组和用户的关系)   /etc/httpd/conf/groups
2. 在配置文件中指定允许属于组成员来访问       Require group admin
结论:只允许admin组成员访问,那么密码文件中的其他用户不可以访问
思考:想允许其他用户和admin组成员都可以访问,咋办?
​
   Require group admin
   Require valid-user harry
​
Require valid-user:指定多个用户访问
Require user:指定某个人访问

2. 网络访问控制

RHEL6:http 2.2
Order allow,deny  如果allow和deny冲突,deny为准
Order deny,allow  如果allow和deny冲突,allow为准
1、禁止部分ip不能访问网站
Order allow,deny
Allow from  all
Deny from  192.168.0.254 172.16.2.10
​
2、针对某个网段
Order allow,deny
Allow from  all
Deny from  192.168.0.0/255.255.255.0
​
3、针对域名
Order allow,deny
Allow from  all
Deny from  node1.itcast.cc *.itcast.cc
​
4、拒绝大部分,只允许某个ip
Order deny,allow
Deny from  all
Allow from 192.168.0.254
​
需求3:只拒绝10.1.1.2主机访问我的网站
​
Order allow,deny
Allow from  all
Deny from  10.1.1.2
​
引申扩展:
RHEL7:http 2.4+
案例1:允许所有主机访问

     AllowOverride None
     Require all granted

​
AllowOverride All        允许子目中的 .htaccess 中的设置覆盖当前设置
AllowOverride None       不允许子目中的 .htaccess 中的设置覆盖当前设置
​
案例2:只允许网段192.168.0.0/24和192.168.10.254/24访问

     AllowOverride None
     Require ip 192.168.0.0/24
     Require ip 192.168.10.254

​
案例3:只拒绝某些主机访问

        AllowOverride None
        
                Require not ip 10.1.1.254
                Require all granted
        
  • HTTP通过状态码来标记返回信息,以下为常见的状态码:

常用状态码分类:
200:成功,请求的所有的数据通过响应报文的entity-body部分发送;ok
301:请求的URL指向的资源已经被删除,但是在响应报文中通过首部Location指明了资源现在所处的新位置;Moved Permanently
302:与301相似,但是在响应报文中通过Location指明资源现在所处的临时的新位置;Found
304:客户端发出了条件式请求,但是服务器上的资源未发送改变,通过响应此响应状态码通知客户端,Not Modified
401:需要客户端输入账号和密码才能访问资源;Unauthorized
403:请求被禁止;Forbidden
404:服务器无法找到客户端请求的资源;Not Found
500:服务器内部错误;Internal Server Error
502:代理服务器从后端服务器收到了一条伪响应;Bad Gateway

课堂练习1:

  1. 根据如下需求搭建web服务

    • 访问http://IP/bbs可以看到“this is bbs test page”

    • 访问http://IP/test可以看到“this is test page”

  2. 更改默认数据根目录/webserver

  3. 只允许sysadmin组里的user01成员去访问你的默认数据根目录,密码是123;同时拒绝192.168.0.0网段的人去访问,除了192.168.0.1

默认数据目录  /webserver      index.html
1. 创建一个密码文件
htpasswd -cmb /etc/httpd/conf/.passfile user01 123
2. 创建一个文件来保存用户和组的信息
echo "sysadmin:user01 user02" > /etc/httpd/conf/groups
​
3. 修改配置文件开启基本认证
vim /etc/httpd/conf/httpd.conf
。。。

    Options Indexes FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from 192.168.0.0/255.255.255.0
    Allow from 192.168.0.1
    AuthType Basic
    AuthName "Input your name and password:"
   AuthBasicProvider file
   AuthUserFile /etc/httpd/conf/.passfile
   AuthGroupFile /etc/httpd/conf/groups
   Require group sysadmin
   Require user user01

四、Apache服务的虚拟主机

1. 基于IP的虚拟主机

环境准备:
方法1:增加一个虚拟网卡,配置IP地址 (两个网卡是同一种网络模式)
eth0:10.1.1.1
eth1:192.168.0.1
方法2:通过增加子接口的方式
ifconfig eth0:1 192.168.0.1/24      //临时增加子接口(重启失效)
​
注意:不管什么方式只需要当前主机有2个不同网段的IP即可
​
需求:
IE:http://10.1.1.1  ———> this is 10.1.1.1 test page
    http://192.168.0.1 ——> this is 192.168.0.1 test page
    
    
步骤:
1. 创建相应的数据目录及首页文件
mkdir /web{1,2}/data -p
echo "this is 10.1.1.1 test page" > /web1/data/index.html
echo "this is 192.168.0.1 test page" > /web2/data/index.html
​
2. 发布网站
vim /etc/httpd/conf/httpd.conf
最后面增加以下内容:

    ServerAdmin [email protected]    //管理员邮箱(可改可不改)
    DocumentRoot /web1/data/                    //定义网站文件的数据目录
    #ServerName dummy-host.example.com
    ErrorLog logs/10.1.1.1-error_log            //错误日志文件名(/etc/httpd/logs/下)
    CustomLog logs/10.1.1.1-access_log common   //正常的访问日志文件

    ServerAdmin [email protected]
    DocumentRoot /web2/data/
    #ServerName dummy-host.example.com
    ErrorLog logs/192.168.0.1-error_log
    CustomLog logs/192.168.0.1-access_log common

​
3. 重启服务
​
4. 测试验证
client:10.1.1.2
[root@client Desktop]# route add -net 192.168.0.0/24 dev eth0   //临时添加一条道192.168.0.0网络的路由
[root@client Desktop]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.1.1.0        0.0.0.0         255.255.255.0   U     1      0        0 eth0
0.0.0.0         10.1.1.254      0.0.0.0         UG    0      0        0 eth0
[root@client Desktop]# ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=1.85 ms
​
[root@client Desktop]# yum -y install elinks
[root@client Desktop]# elinks http://10.1.1.1
[root@client Desktop]# elinks http://192.168.0.1
​
​
​
​
​
​

2. 基于端口的虚拟主机

需求2:
IE: 
http://10.1.1.1:80          this is 80 test page
http://10.1.1.1:10086       this is 10086 test page
​
1. 创建相应的数据目录及首页文件
mkdir /data/{80,10086} -p
echo "this is 80 test page" > /data/80/index.html
echo "this is 10086 test page" > /data/10086/index.html
​
2. 发布虚拟主机
Listen 80
Listen 10086
​

    ServerAdmin [email protected]
    DocumentRoot /data/80
    #ServerName dummy-host.example.com
    ErrorLog logs/80-error_log
    CustomLog logs/80-access_log common

    ServerAdmin [email protected]
    DocumentRoot /data/10086
    #ServerName dummy-host.example.com
    ErrorLog logs/10086-error_log
    CustomLog logs/10086-access_log common

​
[root@web-server conf]# netstat -nltp|grep 10086
tcp        0      0 :::10086                    :::*                        LISTEN      7570/httpd          
[root@web-server conf]# netstat -nltp|grep 80
tcp        0      0 :::80                       :::*                        LISTEN      7570/httpd       

3.基于域名的虚拟主机

需求3:
http://www.myweb.cc     ——> this is myweb.cc
http://ftp.test.net     ——> this is myftp
​
思路:
1. 搭建DNS服务器
2. 搭建web服务器
3. 客户端指定DNS服务器测试验证
​
环境:
WEB-server:10.1.1.1
DNS-server:10.1.1.3
client:10.1.1.2
​
步骤:
1. 搭建DNS服务器(在10.1.1.3上完成)
[root@DNS-server ~]# vim /etc/named.conf 
options {
    listen-on port 53 { 127.0.0.1;any; };
    listen-on-v6 port 53 { ::1; };
    directory   "/var/named";
    dump-file   "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
    allow-query     { localhost; any;};
    recursion yes;
。。。。
​
​
​
[root@DNS-server ~]# vim /etc/named.rfc1912.zones 
...
增加以下内容:
zone "myweb.cc" IN {
    type master;
    file "myweb.cc.zone";
    allow-update { none; };
};
​
zone "test.net" IN {
    type master;
    file "test.net.zone";
    allow-update { none; };
};
​
[root@DNS-server ~]# cd /var/named/
[root@DNS-server named]# ll
total 28
drwxrwx--- 2 named named 4096 Aug 27  2013 data
drwxrwx--- 2 named named 4096 Aug 27  2013 dynamic
-rw-r----- 1 root  named 1892 Feb 18  2008 named.ca
-rw-r----- 1 root  named  152 Dec 15  2009 named.empty
-rw-r----- 1 root  named  152 Jun 21  2007 named.localhost
-rw-r----- 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx--- 2 named named 4096 Aug 27  2013 slaves
[root@DNS-server named]# cp -p named.localhost myweb.cc.zone
[root@DNS-server named]# cp -p named.localhost test.net.zone
[root@DNS-server named]# vim myweb.cc.zone 
[root@DNS-server named]# vim test.net.zone 
[root@DNS-server named]# service named start
Generating /etc/rndc.key:                                  [  OK  ]
Starting named:                                            [  OK  ]
[root@DNS-server named]# 
​
​
相关文件内容:
[root@DNS-server named]# cat myweb.cc.zone test.net.zone 
$TTL 1D
@   IN SOA  myweb.cc. rname.invalid. (
                    0   ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
@   NS  a.myweb.cc.
a   A   10.1.1.3
www A   10.1.1.1
$TTL 1D
@   IN SOA  test.net. rname.invalid. (
                    0   ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
    NS  b.test.net.
b   A   10.1.1.3
ftp A   10.1.1.1
​
​
​
2. 搭建web服务器,发布2个虚拟主机(网站)  [在10.1.1.1上完成]
1) 创建相应的数据目录和首页文件
[root@web-server ~]# mkdir /data/{myweb,myftp}
[root@web-server ~]# echo "this is myweb.cc" > /data/myweb/index.html
[root@web-server ~]# echo "this is myftp" > /data/myftp/index.html
​
2)发布网站
[root@web-server ~]# vim /etc/httpd/conf/httpd.conf
...
NameVirtualHost *:80

    ServerAdmin [email protected]
    DocumentRoot /data/myweb
    ServerName www.myweb.cc
    ErrorLog logs/myweb-error_log
    CustomLog logs/myweb-access_log common

    ServerAdmin [email protected]
    DocumentRoot /data/myftp
    ServerName ftp.test.net
    ErrorLog logs/ftp-error_log
    CustomLog logs/ftp-access_log common

​
3) 重启服务
​
​
3. 客户端测试验证 [10.1.1.2]
​
[root@client Desktop]# echo nameserver 10.1.1.3 > /etc/resolv.conf 
[root@client Desktop]# elinks http://www.myweb.cc
[root@client Desktop]# elinks http://ftp.test.net
​
​
​
​

课堂练习2:

搭建web服务器,要求如下:

  1. 当访问www.zhangsan.net时看到“welcome to myweb!!!”

  2. 当访问www.test.com时看到“this is test page!”

  3. 拒绝192.168.0.0/24网段和example.com这个域所管理的主机访问www.zhangsan.net网站,但是允许harry用户访问

  4. www.test.com网站的数据根目录为/web/www

环境:
web-server:10.1.1.1
client:10.1.1.2
​
1. 搭建基于域名的虚拟主机(10.1.1.1)
1) 创建相应的数据目录和网页文件
[root@web-server ~]# rpm -q httpd
httpd-2.2.15-29.el6.centos.x86_64
[root@web-server ~]# mkdir /web/{zhangsan,test} -p
[root@web-server ~]# echo "this is zhangsan.com test page " > /web/zhangsan/index.html
[root@web-server ~]# echo "this is test.com test page " > /web/test/index.html
​
2) 发布虚拟主机
NameVirtualHost *:80

    ServerAdmin [email protected]
    DocumentRoot /web/zhangsan
    ServerName www.zhangsan.net
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common


    ServerAdmin [email protected]
    DocumentRoot /web/test
    ServerName www.test.com
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common

​
3. 拒绝192.168.0.0/24网段和example.com这个域所管理的主机访问www.zhangsan.net网站,但是允许harry用户访问
​
vim /etc/httpd/conf/httpd.conf
...

    Options Indexes FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from 192.168.0.0/24 .example.com
    AuthType Basic
    AuthName "Input your name and password:"
    AuthBasicProvider file
    AuthUserFile  /etc/httpd/conf/.passfile
    Require user  harry

五、MySQL数据库的安装

1. 通用的二进制包安装

shell> groupadd mysql
shell> useradd -r -g mysql -s /bin/false mysql
shell> cd /usr/local
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
shell> ln -s full-path-to-mysql-VERSION-OS mysql
shell> cd mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
shell> bin/mysqld_safe --user=mysql &
# Next command is optional
shell> cp support-files/mysql.server /etc/init.d/mysql.server

2.源码包安装

根据需求进行配置,参考官方文档

​
默认情况下载当前目录下直接可以配置
shell> cmake . -LAH  查看所有支持的配置选项
shell> cmake .
//配置选项
CMAKE_INSTALL_PREFIX  /usr/local/mysql      安装路径
DEFAULT_CHARSET  latin1      拉丁  默认字符集
DEFAULT_COLLATION    latin1_swedish_ci     指定服务器默认的校对规则(排序规则)
ENABLED_LOCAL_INFILE    OFF     是否开启内部加载外部文件功能 默认off 1代表开启0代表关闭
MYSQL_DATADIR       数据文件目录
SYSCONFDIR         初始化参数文件目录(主配置文件路径(默认优先去/etc目录去找))
MYSQL_TCP_PORT                    服务端口号,默认3306
MYSQL_UNIX_ADDR                   socket文件路径,默认/tmp/mysql.sock 
WITHOUT_xxx_STORAGE_ENGINE        指定不编译的存储引擎
WITH_xxx_STORAGE_ENGINE       指定静态编译到mysql的存储引擎,MyISAM,MERGE,MEMBER以及CSV四种引擎默认已被编译至服务器,不需要特别指定。
WITH_EXTRA_CHARSETS    扩展字符集

  • 根据需求进行配置

编写cmake脚本:
vim cmake.sh
#!/bin/bash
cmake . \
-DCMAKE_INSTALL_PREFIX=/mysql25 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/mysql25/data \
-DSYSCONFDIR=/mysql25 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DMYSQL_UNIX_ADDR=/mysql25/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DMYSQL_TCP_PORT=3309 \
-DMYSQL_USER=mysql
说明:如果第一次配置出错,再次配置前删掉上一次的缓存文件
rm -f  CMakeCache.txt
  • 编译

make

  • 安装

make install

引申拓展:

  • 字符集与字符编码

字符是各种文字和符号的总称,包括各个国家文字、标点符号、图形符号、数字等。字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。也就是说字符编码是字符集的实现方式。 注意:有的字符编码和字符集的名称是一致的。

  • 常见的字符集

    • Unicode:也叫统一字符集,它包含了几乎世界上所有的已经发现且需要使用的字符(如中文、日文、英文、德文等)

    • ASCII:早期的计算机系统只能处理英文,所以ASCII也就成为了计算机的缺省字符集,包含了英文所需要的所有字符

    • GB2312:中文字符集,包含ASCII字符集。ASCII部分用单字节表示,剩余部分用双字节表示

    • GBK:GB2312的扩展,但完整包含了GB2312的所有内容

    • GB18030:GBK字符集的超集,常叫大汉字字符集,也叫CJK(Chinese,Japanese,Korea)字符集,包含了中、日、韩三国语言中的所有字符

  • 常见的字符编码

UTF-8 UTF-16 UCS-2 UCS-4 
GBK/GB2312
GB18030
  • 生产环境字符集建议

    • 非常肯定终端用户只有中文时,可选择gbk / gb2312

    • 为了方便数据迁移、以及多种终端展示,最好是utf8

    • 字符无需区分大小写时,采用默认的xx_ci校验集可以,否则选择xx_bin校验集(生产环境中,尽量不要修改校验集)

    • 默认字符集是latin1,该字符集存放汉字是分开存放,以至于检索结果时不够精确,好处就是节省空间,不推荐使用

字符编码 每个字符字节数
ASCII 1
UCS-2(Unicode) 2
UCS-4(Unicode) 4
UTF-8(Unicode) 1-6
UTF-16(Unicode) 2-4
GBK/GB2312(中文) 1-2
GB18030(CJK) 1-4

3.常见启动报错

初始化数据库(安装默认的库和表):
​
cd /mysql25
# scripts/mysql_install_db --user=mysql
错误:
2017-07-16 10:55:20 22725 [ERROR] InnoDB: Unable to lock ./ibdata1, error: 11
2017-07-16 10:55:20 22725 [Note] InnoDB: Check that you do not already have another mysqld process using the same InnoDB data or log files.
​
原因:
默认情况下会到/usr/local/mysql里去找文件;通用的二进制包的安装路径正好在该目录写,并且是启动的
​
# ./mysql_install_db --help
--no-defaults:不要从任何的配置文件中读取相应的参数,忽略掉mysql安装过程中的默认配置,如创建默认用户并设置默认密码等
解决:
# ./mysql_install_db --basedir=/mysql25 --datadir=/mysql25/data --user=mysql 
​
启动数据库:
# ./mysqld_safe --user=mysql 
170716 11:05:51 mysqld_safe Logging to '/var/lib/mysql/node1.uplook.com.err'.
170716 11:05:51 mysqld_safe A mysqld process already exists
​
原因:是因为/var/lib/mysql启动的是另外一个数据库库,所以进程冲突
解决:如下
# ./mysqld_safe --basedir=/mysql25 --datadir=/mysql25/data --user=mysql
170716 11:09:13 mysqld_safe Logging to '/mysql25/data/node1.uplook.com.err'.
170716 11:09:13 mysqld_safe Starting mysqld daemon with databases from /mysql25/data
170716 11:09:14 mysqld_safe mysqld from pid file /mysql25/data/node1.uplook.com.pid ended
原因:
mysql用户无法在安装目录里创建pid文件和sock文件
解决:
chown -R mysql. /mysql25
再次启动,依然无法启动:
# ./mysqld_safe --basedir=/mysql25 --datadir=/mysql25/data --user=mysql
170716 11:14:42 mysqld_safe Logging to '/mysql25/data/node1.uplook.com.err'.
170716 11:14:42 mysqld_safe Starting mysqld daemon with databases from /mysql25/data
170716 11:14:44 mysqld_safe mysqld from pid file /mysql25/data/node1.uplook.com.pid ended
​
查看错误日志:
2017-07-16 11:14:43 23957 [Note] Server socket created on IP: '::'.
2017-07-16 11:14:43 23957 [ERROR] Can't start server: Bind on TCP/IP port: Address already in use
2017-07-16 11:14:43 23957 [ERROR] Do you already have another mysqld server running on port: 3308 ?
2017-07-16 11:14:43 23957 [ERROR] Aborting
​
分析:
mysql 5.6.19 ——>rpm——>/etc/mysql/my.cnf
# cat /etc/mysql/my.cnf 
[mysqld]
basedir=/usr
datadir=/var/lib/mysql
port=3308
socket=/var/lib/mysql/mysql.sock
​
mysql 5.6.25 配置文件/mysql25/my.cnf
该文件没有做任何配置,所以默认去到/etc/my.cnf——>/etc/mysql/my.cnf....
​
最终如何解决:
vim /mysql25/my.cnf
[mysqld]
 basedir = /mysql25
 datadir = /mysql25/data
 port = 3309
 socket = /mysql25/mysql.sock
​
​
​
报错:
# service mysql start
Starting MySQL.The server quit without updating PID file (/mysql/data/vm1.uplook.com.pid).[FAILED]
解决:
chown mysql.mysql /mysql -R
​
环境变量:
export PATH=$PATH:/usr/local/mysql/bin
​
# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
[root@vm1 data]# mysql --socket=/data/mysql.sock 
​
​
# ln -s /data/mysql.sock /var/lib/mysql/mysql.sock
​
# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.25 Source distribution
​
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
​
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
​
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
​
mysql> exit
Bye

你可能感兴趣的:(apache,架构)