了解常见的WEB服务器
熟悉apache服务的基本配置
掌握apache服务的虚拟主机配置 一台物理机部署多个虚拟主机 多个网站
掌握apache的访问控制 —— 用户和网络控制
掌握MySQL的安装
常见的web服务端程序有:
Apache/Nginx/Tengine/Lighttpd/ISS等
Apache或Nginx都支持静态页面的解析
Web服务的中间件
Apache不能直接解析动态页面,要通过 访问中间件的解析
PHP:PHP-FPM、HHVM(HipHop Virtual Machine)
JSP:Tomcat、JBOSS、Resin、IBM WebSphere
Nginx是用PHP-FPM程序去完成的,Apache通过解释器去加载模块
常见的WEB组合方式
LAMP(Linux + Apache + MySQL + PHP) //php作为Apache的模块
LNMP(Linux + Nginx + MySQL + PHP) //php-fpm进程(服务)
Nginx / Apache + Tomcat
Apache的工作原理
Apache的手册
www.apache.org
httpd-manual.noarch
★中文手册.★
英文手册:
#yun list | grep ^httpd
#yum -y install httpd-manual
#service httpd start
IE:http://10.1.1.2/manual/
1.关闭防火墙和selinux
2.配置yum源
3.软件三部曲(查看安装|确认成功安装|查看软件的文件列表)
4.了解配置文件 man 5 xxx.conf |程序的官方手册 appache,mysql
5.根据需求通过修改配置文件来完成服务搭建
6.启动服务,开机自启动
7.测试验证
需求:访问一个静态页面,内容:hello world!
环境:
web-server:10.1.1.2
步骤:
1.关闭防火墙和selinux
#service iptables stop
#chkconfig iptables off
#getenforce
Enforcing
#setenforce 0 //临时关闭
#getenforce
Permissive
#vim /etc/sysconfig/selinux //永久关闭
#grep ^SELINUX /etc/sysconfig/selinux
SELINUX=disabled
SELINUXTYPE=targeted
2.配置yum源 (在我的博客中可以找到)
3.软件三步曲
#rpm -ivh httpd-2.2.15-69.el6.centos.x86_64.rpm
#rpm -q httpd
#rpm -ql httpd
/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/logs // 硬链接 /var/log/httpd/ 同一个文件 inode号一样
/etc/httpd/modules
/etc/httpd/run // 硬链接 /var/log/httpd 两个文件(iNode)是一样的 可以 #ll -id xxx 列举两个对比
/etc/logrotate.d/httpd //日志轮转
/etc/rc.d/init.d/httpd //服务启动脚本
/etc/sysconfig/httpd
/usr/sbin/apachectl
/usr/sbin/htcacheclean
/usr/sbin/httpd
/var/log/httpd
/var/run/httpd
/var/www //apache服务的数据目录
/var/www/html //apache服务的静态页面存放路径
/var/www/error/HTTP_NOT_FOUND.html.var 404
/var/www/error/HTTP_FORBIDDEN.html.var 403
//互为硬链接,同时改变,一个改变另一个也改变
[root@web-server ~]# ll -id /var/log/httpd/
267919 drwx------. 2 root root 4096 Apr 23 18:52 /var/log/httpd/
[root@web-server ~]# ll -id /etc/httpd/logs/
267919 drwx------. 2 root root 4096 Apr 23 18:52 /etc/httpd/logs/
4.了解配置文件
/etc/httpd/conf/httpd.conf 配置文件:
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 /> //系统的根目录授权
Option FollowSymLinks //支持软连接
AllowOverride None //不支持 .htaccess访问列表 .htaccess文件提供了针对每个目录改变配置的方法
</Directory>
/usr/local/apache/conf/extra配置文件下的 httpd-mpm.conf
扩展:配置进程和线程 针对apache2.2 针对面试
# perfork MPM //进程模式
<IfModule prefork.c>
StartServers 10 //初始建立的进程数
MinSpareServers 10 //最小空闲的进程数
MaxSpareServers 15 //最大空闲的进程数
ServerLimit 2000 //最大启动的进程数 默认256
MaxClients 2000 //最大并发连接数 默认256
MaxRequestsPerChid 4000 //每个子进程在其生命周期内允许响应的最大请求数,0不限制
</IfModule>
# worker MPM //线程模式
<IfModule worker.c>
StartServer 2 //初始创建的进程数
ThreadPerChild 50 //每个进程建立的线程数
MinSpareThreads 100 //最小空闲的线程数
MaxSpareThreads 200 //最大空闲的线程数
MaxClients 2000 //最大的并发访问量(线程)
MaxRequestsPerChild 0 //每个子进程在其生命周期内允许响应的最大请求数,0不限制
</IfModule>
5.根据需求通过修改配置文件完成服务搭建
1)创建一个首页文件
#netstat -ntlp | grep httpd
#echo "hello world!!" > /var/www/html/index.html
2)启动服务
6.测试验证
IE:http://10.1.1.2
#cd /etc/httpd/conf
#cp httpd.conf httpd.conf.bak
#vim /etc/httpd/conf/httpd.conf
/Docu
DocumentRoot "/webserver/" //站点默认数据主目录
<Directory "/webserver/"> //系统的根目录授权
....其他默认....
</Directory>
#mkdir /webserver //创建对应的主目录
#echo "2020/2/19">/webserver/index.html
#service httpd restart
————————————————————————————————————————————
//有问题才看,没问题忽略这步
假设主机名和IP地址的解析问题,有问题才弄这步
#hostname
web-server
#vim /etc/hosts
10.1.1.2 web-server
#vim /etc/httpd/conf/httpd.conf
删掉注释:ServerName 10.1.1.2:80 或 ServerName web-server:80
//
————————————————————————————————————————————
测试验证:http://10.1.1.2
DocumentRoot "/webserver"
<Directory />
Options Indexes FollowSymLinks #没有index.html,列出目录结构
AllowOverride None
Order allow,deny # 先检测allow设置,再检测deny设置
Allow from all #如果是CentOS 8 不同
</Directory>
第一种方法:
上面的Options Indexes FollowSymLinks---->Options FollowSymLinks
把Indexes 去掉,就可以禁止 Apache 显示该目录结构。用户就不会看到该目录下的文件和子目录列表了。
第二种方法:
编辑httpd.conf文件
vi ./conf/httpd.conf
在Options Indexes FollowSymLinks在Indexes前面加上 – 符号。 # Options None 也行
即: Options -Indexes FollowSymLinks
【备注:在Indexes前,加 + 代表允许目录浏览;加 – 代表禁止目录浏览。】
这样的话就属于整个Apache禁止目录浏览了。
需求1:共享web-server服务端的/data目录里的所有文件(在上面更改数据目录的基础上)
方法一:
1.apache服务默认情况下到默认指定目录找相应的文件
2.将本地的/data目录做一个快捷方式(软连接)到默认指定的目录里
步骤:
1.创建 /data 共享目录
#cd
#mkdir /data //根下创建
#touch /data/file{1..5}
#mkdir /data/Kolor
#ll /webserver/
2.创建快捷方式(软连接)
#ln -s /data/ /webserver/share
#ll /webserver/share/
3.测试验证
IE:http://10.1.1.2/share
得出结论:
1.当默认数据目录里有index.html的首页文件时,优先找首页文件
2.通过#mv /webserver/index.html /webserver/index.html.bak
得出:当默认数据目录里没有index.html的首页文件时,会显示测试页
3.不管有没有首页文件,都不会直接找数据文件
那如何解决: 没首页情况,直接得到数据文件
1.加入路径
http://10.1.1.2/share
2.将测试页欢迎页删除或者重命名即可 。 //当没有首页文件时,会显示测试页,测试页都没有
#cd /etc/httpd/conf.d/
#mv welcome.conf welcome.conf.bak
#service httpd restart
方法二:
别名方式
#vim /etc/httpd/conf/httpd.conf
Alias /test/ "/data/" 这里的/test/是别名
DocumentRoot "/data/" //站点默认数据主目录 //原先的只需要注释掉DocumentRoot就行
指定了数据默认主目录后 就要授权
<Directory "/data/"> //系统的根目录授权
Options Indexes MultiViews FollowSysmLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
#service httpd restart
#echo hello world > /data/Kolor/test
注意:别名后面的路径 test“/” 会影响访问
IE:http://10.1.1.2/test ——》 不能访问
IE:http://10.1.1.1/test/ ——》 可以访问
模板:
Alias /icons/ "/var/www/icons/"
<Directory "/var/www/icons">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
课堂练习:
通过2种方式共享你的/home目录和/tmp目录里的所有文件
/home 用别名
/tmp目录 用软件
/home
#vim /etc/httpd/conf/httpd.conf // home的别名是rhome
Alias /rhome "/home/"
<Directory "/home/"> //系统的根目录授权
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
#service httpd restart
#mkdir /home/test 因为home下其他人没权限,因此创建一个后 就会默认赋予权限
验证:http://10.1.1.2/rhome/test
/tmp
#ln -s /tmp/ /data/tmp 因为 四、共享文件的方法二 我已经修改主目录为 /data/
#ll /data/
Apache HTTP Server Version 2.2 文档 - Apache 2.2 中文手册 [金步国] http://www.jinbuguo.com/apache/manual/index.html
根据需求,基本认证,选取所要条件
<Directory "/xx/">
AuthType Basic //开启基本认证
AuthName "Restricted Files" //认证信息
#(下面这一行是可选的)
AuthBasicProvider file //声明指定文件
AuthUserFile /usr/local/apache2/passwd/passwords //指定刚创建的文件
Require user rbowen //允许指定用户
</Directory>
需求1:/data/ ——》 index.html
步骤:
查询 htpasswd这个命令来自于哪
#which htpasswd
/usr/bin/htpasswd
#rpm -qf /usr/bin/htpasswd
httpd-tools-2.2.15-69.el6.centos.x86_64
如果没这个命令,就要安装 httpd-tools-2.2.15-69.el6.centos.x86_64
步骤
1.创建密码文件
#htpasswd -cm /etc/httpd/conf/xxx 文件名字(任意取) 用户名
.passfile 表示隐藏文件passfile,点
#htpasswd -cm /etc/httpd/conf/.passfile harry
New password:
Re-type new password:
Adding password for user harry
#htpasswd -bm /etc/httpd/conf/.passfile jack 123456
Adding password for user jack
htpasswd:
-c:创建新的密码文件
-m:密码使用md5加密
-b:非交互式
2.修改配置文件开启基本认证 目前在/data/ 是默认主目录
#vim /etc/httpd/conf/httpd.conf
<Directory "/data/">
...
AuthType Basic //开启基本认证
AuthName "Input your name and password:" //认证信息
AuthBasicProvider file //声明指定文件
AuthUserFile /etc/httpd/conf/.passfile //指定刚创建的文件
Require user harry //允许指定用户
</Directory>
3.测试验证
#service httpd restart 重启服务
http://10.1.1.3
总结:
1.开启用户名密码认证有几点注意
1)创建一个密码文件来保存用户名和密码
2)需要知道网站的数据根目录 DocumentRoot
3)将认证信息加入到 <Directory " "> 认证信息 </Directory>
模板:
AuthType Basic
AuthName "By Invitation Only"
AuthUserFile /usr/local/apache2/passwd/passwords
AuthGroupFile /usr/local/apache2/passwd/groups
Require group GroupName
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.修改主配置文件
#vim /etc/httpd/conf/httpd.conf
<Directory "/data/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
AuthType Basic
AuthName "请输入用户名和密码"
AuthUserFile /etc/httpd/conf/.passfile
AuthGroupFile /etc/httpd/conf/groups
Require group admin
</Directory>
4.重启服务,测试验证
#service httpd restart
http://10.1.1.3
思考:
Require group admin
Require user jack
两个一起的话,就只会允许jack,不允许group admin 。即使都在密码文件中。
那怎么解决 不把jack加组里,然后去访问group admin同时 也能访问jack
Require group admin
Require valid-user jack
总结:
1.将很多人加入到组里(创建一个文件建立组合用户的关系) /etc/httpd/conf/groups
2.在配置文件中指定允许属于组成员来访问 Require group admin
结论:只允许admin组成员访问,那么密码文件中的其他用户不可以访问
思考:想允许其他用户和admin组成员都可以访问,咋办?
#vim /etc/httpd/conf/httpd.conf
<Directory "/data/">
....
Require group admin
Require valid-user jack
Require valid-user:指定多个用户访问
Require user:指定某个人访问
RHEL6:http 2.2版本
Order allow,deny 如果allow和deny冲突,deny为准
Order deny,allow 如果allow和deny冲突,allow为准
加入到 授权目录 <Directory "授权目录"> </Directory> :
1.禁止部分IP不能访问网站
Order allow,deny
Allow from all
Deny from 192.168.0.254 10.1.1.5
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 *.itcast.cc
4.拒绝大部分,允许某个IP
Order deny,allow
Deny from all
Allow from 192.168.0.254
需求3:只拒绝10.1.1.2主机访问我的网站
#vim /etc/httpd/conf/httpd.conf
<Directory "/data/">
Order allow,deny //排序,先allow后deny
Allow from all
Deny from 10.1.1.2
</Directory>
#service httpd restart
HTTP通过状态码来标记返回信息,以下为常见的状态码:
一台物理真机,搭建两个 两张网卡
一台物理真机,搭建两个 两张网卡
环境准备:
eth0:10.1.1.1
eth1:192.168.0.1
需求:
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.发布网站
#cd /etc/httpd/conf
#vim httpd.conf 也可以通过 Include conf/httpd-vhosts.conf的方法。这里是直接在httpd.conf配置文件下加的
在文件最后面增加以下内容
<VirtualHost 10.1.1.2:80>
ServerAdmin [email protected]
DocumentRoot /web1/data/
#ServerName dummy-host.example.com
ErrorLog logs/10.1.1.2-error_log
CustomLog logs/10.1.1.2-access_log common
</VirtualHost>
<VirtualHost 192.168.1.2:80>
ServerAdmin [email protected]
DocumentRoot /web2/data/
#ServerName dummy-host.example.com
ErrorLog logs/192.168.1.2-error_log
CustomLog logs/192.168.1.2-access_log common
</VirtualHost>
3.重启服务
#hostname
server.localdomain
#vim /etc/hosts
192.168.1.2 server.localdomain
#service httpd restart
#yum -y install elinks
使用:elinks http://IP
需求2:
IE:
http://10.1.1.2:80
http://192.168.1.2:10086
步骤:
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.发布虚拟主机
#vim /etc/httpd/conf/httpd.conf
<VirtualHost 10.1.1.2:80>
ServerAdmin [email protected]
DocumentRoot /data/80
#ServerName dummy-host.example.com
ErrorLog logs/80-error_log
CustomLog logs/80-access_log common
</VirtualHost>
<VirtualHost *:10086>
ServerAdmin [email protected]
DocumentRoot /data/10086
#ServerName dummy-host.example.com
ErrorLog logs/10086-error_log
CustomLog logs/10086-access_log common
</VirtualHost>
3.重启服务
#service httpd restart
[root@web-server conf]# netstat -nltp|grep 80
tcp 0 0 :::80 :::* LISTEN 2663/httpd
[root@web-server conf]# netstat -nltp|grep 10086
在配置文件 /etc/httpd/conf/httpd.conf 必须得添加一个
Listen 10086
4.测试验证
#service httpd restart
需求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.2
DNS-server:10.1.1.3
client:10.1.1.4
步骤:
1.搭建DNS服务器 (在10.1.1.3完成)
2.搭建WEB服务器 (在10.1.1.2完成)
3.测试验证
1.搭建DNS服务器 (在10.1.1.3完成)
[root@DNS-server ~]# vim /etc/named.conf 两个any,两个no
[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; };
};
在/var/named/里面添加两个文件myweb.cc.zone test.net.zone
#cd /var/named/ //-p 连同档案的属性一起复制过去
#cp -p named.localhost myweb.cc.zone //复制个模板,方便编写
#cp -p named.localhost test.net.zone
然后修改 @ IN SOA myweb.cc. rname.....
@ NS a.myweb.cc.
a A 10.1.1.3
www A 10.1.1.1 另一个test.net.zone 略
修改完毕重启服务 #service named restart
当请求www.myweb.cc时域名对应的IP是什么,就会查询 /var/named/myweb.cc.zone记录
www A 10.1.1.1 向10.1.1.3dns服务器要,服务器回应10.1.1.1
2.搭建web服务
1)创建相应的数据目录和首页文件
#mkdir /data/{myweb,myftp}
[root@server ~]# echo "this is myweb.cc" > /data/myweb/index.html
[root@server ~]# echo "this is myftp" > /data/myftp/index.html
2)发布两个虚拟主机
#vim /etc/httpd/conf/httpd.conf
打开NameVirtualHost *:80 ★
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /data/myweb
ServerName www.myweb.cc //当访问到www.myweb.cc的时候就到/data/myweb找首页文件
ErrorLog logs/80-error_log
CustomLog logs/80-access_log common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /data/myftp
ServerName ftp.test.net
ErrorLog logs/80-error_log
CustomLog logs/80-access_log common
</VirtualHost>
3.重启服务
#service httpd restart
4.客户端测试验证(如下图)
CLIENT:
#echo nameserver 10.1.1.3>/etc/resolv.conf //resolv.conf是DNS客户机配置文件
#elinks http://ftp.test.net
补充:
/usr/local/apache/conf/extra配置文件中比较重要的:httpd-default.conf、httpd-mpm.conf、http-vhosts.conf
文件;httpd-default.conf
Timeout 60
KeepAlive On 建立连接后保持一端时间
KeepAliveTimeout 5 默认5秒内没有请求连接,就断开
ServerTokens Prod 禁止显示或发送Apache版本号,更安全
ServerTokens Full (或未指定)
服务器会发送(比如): Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2
文件:httpd-mpm.conf
# perfork MPM //进程模式
<IfModule prefork.c>
StartServers 10 //初始建立的进程数
MinSpareServers 10 //最小空闲的进程数
MaxSpareServers 15 //最大空闲的进程数
ServerLimit 2000 //最大启动的进程数 默认256
MaxClients 2000 //最大并发连接数 默认256
MaxRequestsPerChid 4000 //每个子进程在其生命周期内允许响应的最大请求数,0表不限制
</IfModule>
# worker MPM //线程模式
<IfModule worker.c>
StartServer 2 //初始创建的进程数
ThreadPerChild 50 //每个进程建立的线程数
MinSpareThreads 100 //最小空闲的线程数
MaxSpareThreads 200 //最大空闲的线程数
MaxClients 2000 //最大的并发访问量(线程)
MaxRequestsPerChild 0 //每个子进程在其生命周期内允许响应的最大请求数,0表不限制
</IfModule>
文件:httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /data/myweb
<Directory "/data/myweb">
Options None
AllowOverride None
Require all granted # 这个是Centos 8写法
</Directory>
ServerName www.myweb.cc //当访问到www.myweb.cc的时候就到/data/myweb找首页文件
ServerAlias myweb.cc
ErrorLog logs/80-error_log
CustomLog logs/80-access_log common
</VirtualHost>
然后在 httpd.conf 把这个文件包含进去 Include conf/httpd-vhosts.conf的方法