web服务是我们日常使用最多的服务,所有的网站都是以web服务的形式为我们呈现
web服务分为客户端和服务端
web客户端通常是我们所使用的浏览器(IE/Chrome/Firefox/Safari或者命令行浏览器等)
web服务端就是我们所访问的网站提供的web服务器
常见的web服务端程序有:
Apache/Nginx/Tengine/Lighttpd/IIS等,不同的web服务针对不同的系统平台各自有优缺点
HTML语言
动态语言
Apache是著名的web服务器软件,开源,由apche软件基金会负责管理开发。
Apache的工作原理
Apache的官网和手册
英文手册:需要安装
xhttpd-manual.noarch //安装后启动服务就可以本地查看
yum -y install httpd-manual.noarch
service httpd restart
查看官方手册:
IE:http://10.1.1.1/manual
Apache的软件包
xxxxxxxxxx
1. 关闭防火墙和selinux
2. 配置yum源
3. 软件三步曲(查看安装|确认成功安装|查看软件的文件列表)
4. 了解配置文件 man 5 xxx.conf |程序的官方手册(apache、mysql、oracle)
5. 根据需求通过修改配置文件来完成服务搭建
6. 启动服务,开机自启动
7. 测试验证
xxxxxxxxxx
需求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
RHEL6/CentOS6:2.2版本
RHEL7/CentOS7:2.4版本
xxxxxxxxxx
服务端口:
80/tcp(http)
配置文件:
/etc/httpd/conf/httpd.conf //主配置文件
/etc/httpd/conf.d/*.conf //子配置文件
/etc/httpd/conf.d/welcome.conf //默认测试页面
xxxxxxxxxx
/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
xxxxxxxxxx
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/ //站点默认数据主目录
<Directory /> //系统的根目录授权
Options FollowSymLinks //支持软链接
AllowOverride None //不支持.htaccess 访问列表 .htaccess文件提供了针对每个目录改变配置的方法
</Directory>
RHEL6:
<Directory "/var/www/html"> //授权
Options Indexes FollowSymLinks //支持索引 支持软链接
AllowOverride None //不支持 .htaccess 访问列表
Order allow,deny //排序 先允许再拒绝
Allow from all //允许all
</Directory>
REHL7:
<Directory "/var/www/html">
AllowOverride None
Require all granted //允许所有人访问
</Directory>
xxxxxxxxxx
扩展:配置进程和线程 针对apache2.2
# prefork MPM //进程模式
<IfModule prefork.c>
StartServers 10 //初始建立的进程数
MinSpareServers 10 //最小空闲的进程数
MaxSpareServers 15 //最大空闲的进程数
ServerLimit 2000 //最大启动的进程数 默认256
MaxClients 2000 //最大并发连接数 默认256
MaxRequestsPerChild 4000 //每个子进程在其生命周期内允许响应的最大请求数,0不限制
</IfModule>
# worker MPM //线程模式
<IfModule worker.c>
StartServers 2 //初始建立的进程数
ThreadsPerChild 50 //每个进程建立的线程数
MinSpareThreads 100 //最小空闲的线程数
MaxSpareThreads 200 //最大空间的线程数
MaxClients 2000 //最大的并发访问量(线程)
MaxRequestsPerChild 0 //每个子进程在其生命周期内允许响应的最大请求数,0不限制
</IfModule>
xxxxxxxxxx
Apache如何共享文件呢?
xxxxxxxxxx
需求1:共享web-server服务端的/data目录里的所有文件
xxxxxxxxxx
课堂练习:
通过2种方式共享你的/home目录和/tmp目录里的所有文件
xxxxxxxxxx
AuthType Basic
AuthName "Restricted Files"
#(下面这一行是可选的)
AuthBasicProvider file
AuthUserFile /usr/local/apache2/passwd/passwords
Require user rbowen
需求:/webserver——>index.html
xxxxxxxxxx
xxxxxxxxxx
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
xxxxxxxxxx
引申扩展:
RHEL7:http 2.4+
案例1:允许所有主机访问
<Directory "/var/www/html">
AllowOverride None
Require all granted
</Directory>
AllowOverride All 允许子目中的 .htaccess 中的设置覆盖当前设置
AllowOverride None 不允许子目中的 .htaccess 中的设置覆盖当前设置
案例2:只允许网段192.168.0.0/24和192.168.10.254/24访问
<Directory "/var/www/html">
AllowOverride None
Require ip 192.168.0.0/24
Require ip 192.168.10.254
</Directory>
案例3:只拒绝某些主机访问
<Directory "/var/www/html">
AllowOverride None
<RequireAll>
Require not ip 10.1.1.254
Require all granted
</RequireAll>
</Directory>
xxxxxxxxxx
常用状态码分类:
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
根据如下需求搭建web服务
更改默认数据根目录/webserver
只允许sysadmin组里的user01成员去访问你的默认数据根目录,密码是123;同时拒绝192.168.0.0网段的人去访问,除了192.168.0.1
xxxxxxxxxx
xxxxxxxxxx
环境准备:
方法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
xxxxxxxxxx
需求2:
IE:
http://10.1.1.1:80 this is 80 test page
http://10.1.1.1:10086 this is 10086 test page
xxxxxxxxxx
需求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
搭建web服务器,要求如下:
xxxxxxxxxx
xxxxxxxxxx
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
根据需求进行配置,参考官方文档
xxxxxxxxxx
默认情况下载当前目录下直接可以配置
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 扩展字符集
xxxxxxxxxx
编写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
xxxxxxxxxx
make
xxxxxxxxxx
make install
xxxxxxxxxx
初始化数据库(安装默认的库和表):
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