apache基础
apache:www.apache.org --->主页中的project项目标题中提供了apache组织发布的各种平台软件。
apache:是取自“a patchy server”的读音,意思是充满补丁的服务器。
发布了很多开源的应用程序。如大数据库的平台软件hadoop、zookeeper等。
软件包名称:httpd
服务端口:80/tcp 443/tcp
查apache的配置文件:rpm -qc httpd
配置文件: /etc/httpd/conf/httpd.conf 主配置文件
/etc/httpd/conf.d/*.conf 子配置文件
/etc/httpd/conf.d/welcome.conf 默认配置文件
数据目录:/var/www/html .html
练习:安装并启动httpd软件。
rpm -q httpd httpd-manual
yum -y install httpd httpd-manual
systemctl restart httpd && systemctl enable httpd
lsof -i:80 或 netstat -atunlp |grep :80
练习:安装命令行界面的网页浏览器软件,访问网站。
yum -y install curl elinks
curl 127.0.0.1 看到的网站的html源代码
elinks 127.0.0.1 看到网页内容,按q键退出浏览器软件
练习:创建一个index.html的主页。访问网站。
data > /var/www/html/index.html
free >> /var/www/html/index.html
lsblk >> /var/www/html/index.html
curl 127.0.0.1 或elinks 127.0.0.1
URl:统一资源标识,定位了一切网上的资源。列子 www.qf.com/index.html
URL:统一资源定位器。列:http://www.baidu.com/xinwen/1.html
www. 万维网
www 主机名
qf.com 域名
客户端
图形化界面:firefox 浏览器
命令: elinks links
elinks 192.168.1.250
#echo qf.com > /var/www/html/index.html
当服务器没有welcome.conf和*.html文件时,web server会显示、/var/www/html这个目录中的目录结构
*//apache的主配置文件:
vim /etc/httpd/conf/httpd.conf
httpd.conf配置文件的组成:
global全局设置:
mlodules模块设置:
VirtualHost虚拟主机设置:
Directory目录设置(控制访问权限-基于IP、用户认证):
File文件控制访问控制:
.....
31 ServerRoot "/etc/httpd" 服务器的根目录(即apache软件的根目录)
41 #Listen 12.34.56.78:80
42 Listen 80 启用80端口的监听
56 Include conf.modules.d/*.conf 包含的子配置文件,此目录是存放apache的模块程序
66 User apache 程序的执行者,用lsof -i :80 或 ps aux | grep apache可查
67 Group apache 程序的执行组,用top -u apache -->按f键-->方向键选group,并空格-->Esc键
86 ServerAdmin root@localhost 网站服务器管理员的邮箱
102
103 AllowOverride none
104 Require all denied 要求全部拒绝,即拒绝访问/根目录下的任何文件
105
119 DocumentRoot "/var/www/html" 文档根目录,即默认的网站主页目录
124
125 AllowOverride None
126 # Allow open access:
127 Require all granted 需要所有授权,即允许任何人访问
128
131
144 Options Indexes FollowSymLinks
151 AllowOverride None
156 Require all granted
157
163
164 DirectoryIndex index.html index.php index.jsp 指定目录的索引(即主页)文件
165
171
172 Require all denied
173
182 ErrorLog "logs/error_log"
189 LogLevel warn
191
196 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"% {User-Agent}i\"" combined
197 LogFormat "%h %l %u %t \"%r\" %>s %b" common
198
199
201 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \ "%{User-Agent}i\" %I %O" combinedio
202
217 CustomLog "logs/access_log" combined
218
220
231 # Example:
232 # Alias /webpath /full/filesystem/path 定义/full/.../path路径的别名为/webpath
247 ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
248
249
255
256 AllowOverride None
257 Options None
258 Require all granted
259
260
261
266 TypesConfig /etc/mime.types
277 #AddEncoding x-compress .Z
278 #AddEncoding x-gzip .gz .tgz
283 AddType application/x-compress .Z
284 AddType application/x-gzip .gz .tgz
305 AddType text/html .shtml
306 AddOutputFilter INCLUDES .shtml
307
316 AddDefaultCharset UTF-8 默认的网站字符编码为UTF-8(支持中文)
317
318
324 MIMEMagicFile conf/magic
325
348 EnableSendfile on
353 IncludeOptional conf.d/*.conf
apache有两种运行模式(进程和线程)
稳 prefork model 基于进程(公司常用) 即一个apache进程启动一个线程来响应客户的请求
快 worker model 基于线程(公司少用) 即一个apache进程启动多个线程来响应客户的请求
通俗理解:将进程理解成“超市”,将线程理解成超市中的“收银台”。
基于进程:由主进程创建子进程,每一个进程只有一个线程,内存是不可以共享,系统开销大,但是一个线程坏掉了不会影响其他线程
基于线程:一个进程中会产生多个线程,内存中的某个区域是可以共享的,创建线程数度快,开销小,但是一个线程出现问题时,其他线程都死掉。[以武侠小说中的分身术来理解,即发分身术招式的是进程(本尊),招式中分身是线程]
集群环境:一般都会使用进程模式,不需要某一台主机单独承担大量的访问
httpd模式切换:
centos 7的操作:
cat -n /etc/sysconfig/httpd 请看第10行内容
10 # /etc/httpd/conf.modules.d/00-mpm.conf.
vim /etc/httpd/conf.modules.d/00-mpm.conf
6 LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
12 #LoadModule mpm_worker_module modules/mod_mpm_worker.so
18 #LoadModule mpm_event_module modules/mod_mpm_event.so
说明:apache默认是采用进程模式来运行的,即以上的第6行代码。如需使用多线程模式运行,需要将第6行注释掉并且将第12行启用。然后重启httpd服务,再用httpd -V 查apache的运行模式信息。输出结果的部分内容如下:
Server MPM: worker(线程模式)
threaded: yes (fixed thread count)
forked: yes (variable process count)
---
centos 6的操作(httpd模式切换):
vim /etc/sysconfig/httpd //切换成线程模式
HTTPD=/usr/sbin/httpd.worker
/etc/init.d/httpd restart (centos 6的操作) 或 systemctl restart httpd (centos 7的操作)
StartServers 8 初始建立的进程数(1个父进程,8个工作进程)
MinSpareServers 5 最小空闲的进程数
MaxSpareServers 20 最大空闲的进程数
ServerLimit 256 服务器最大并发连接限制(默认256)
MaxClients 256 服务器最大并发访问量
MaxRequestsPerChild 4000 每个子进程在其生命周期内允许响应的最大请求数,达到进程会被杀死,如果为0则用不结束,一个程序结束后
httpd线程查询
[root@node11 ~]# ps -ef | grep httpd
apache虚拟主机
apache虚拟主机功能:在一台apache网站服务器发布多个网站站点。
网站虚拟主机三种技术:
1.基于ip地址 每个网站有一个ip地址
2.基于端口 所有网站仅用一个ip,端口不一样
3.基于主机名(域名) 所有网站仅用一个ip,但是主机名称不一样
最常用的是基于主机名,基于ip地址不常用,因为申请ip需要资金
配置apache实现虚拟主机
基于ip的虚拟主机:
思路: 1.给服务器的网卡设置多个ip地址。
2.创建网站主页目录及index.html主页文件。
3.在httpd服务器软件的/etc/httpd/conf.d目录中创建虚拟主机的配置文件,给每个ip地址绑定一个网站。
4.访问测试:访问不同的ip地址,得到不同网站页面。
实施参考:
1.给服务器的网卡设置多个ip地址。(临时设置多个ip,重启network服务是时ip会丢失)
ifconfig ens33:1 192.168.11.21/24 up
ifconfig ens33:2 192.168.11.22/24 up
ifconfig ens33:3 192.168.11.23/24 up
ip a 或 ifconfig
2.创建网站主页目录及index.html主页文件。
mkdir -pv /baidu/{www,map,music}
echo www.baidu.com >/baidu/www/index.html
echo map .baidu.com > /baidu/map/index.html
echo music.baidu.com > /baidu/music/index.html
要给文件加权限setfacl -m u:apache:rx /baidu/www
3.在httpd服务器软件的/etc/httpd/conf.d目录中创建虚拟主机的配置文件,给每个ip地址绑定一个网站。
cd /etc/httpd/conf.d(子配置文件)
ls
rpm -ql httpd | grep vhosts查httpd软件的所有文件名列表,但匹配vhosts关键词的文件
cat /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf
tail /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf > /etc/httpd/conf.d/baidu.conf(创建baidu.conf配置文件)
-----基于ip的虚拟主机
vim /etc/httpd/conf.d/baidu.conf 修改后的内容如下
指定虚拟主机的ip号和端口号
ServerAdmin [email protected] 服务器管理员邮箱
DocumentRoot "/baidu/www/" 网站主页根目录
ServerName www.baidu.com 网站的域名
ErrorLog "/var/log/httpd/www.baidu.com-error_log"
CustomLog "/var/log/httpd/www.baidu.com-access_log" common
AllowOverride None
井 Allow open access:
Require all granted 需要所有授权,即允许任何人访问
ServerAdmin [email protected]
DocumentRoot "/baidu/map/"
ServerName www.map.com
ErrorLog "/var/log/httpd/www.map.com-error_log"
CustomLog "/var/log/httpd/www.map.com-access_log" common
AllowOverride None
井Allow open access:
Require all granted
4.访问测试:访问不同的ip地址,得到不同的页面。
systemctl restart httpd
curl 192.168.11.21 结果是www.baidu.com
curl 192.168.11.22 结果是map.baidu.com
----基于端口的虚拟主机
vim /etc/httpd/conf.d/baidu.conf修改内容如下
Listen 81 启用81端口的监听
Listen 82 启用82端口的监听
ServerAdmin [email protected]
DocumentRoot "/baidu/www/"
ServerName www.baidu.com
ErrorLog "/var/log/httpd/www.baidu.com-error_log"
CustomLog "/var/log/httpd/www.baidu.com-access_log" common
AllowOverride None
井 Allow open access:
Require all granted
ServerAdmin [email protected]
DocumentRoot "/baidu/map/"
ServerName www.map.com
ErrorLog "/var/log/httpd/www.map.com-error_log"
CustomLog "/var/log/httpd/www.map.com-access_log" common
AllowOverride None
井 Allow open access:
Require all granted
访问测试:访问相同ip的不同端口,得到不同网页界面
systemctl restart httpd
curl 192.168.11.21:81 输出结果是www.baidu.com
curl 192.168.11.21:82 输出结果是map.baidu.com
基于域名的虚拟主机:
Listen 81
Listen 82
ServerAdmin [email protected]
DocumentRoot "/baidu/www/"
ServerName www.baidu.com
ErrorLog "/var/log/httpd/www.baidu.com-error_log"
CustomLog "/var/log/httpd/www.baidu.com-access_log" common
AllowOverride None
井 Allow open access:
Require all granted
ServerAdmin [email protected]
DocumentRoot "/baidu/map/"
ServerName www.map.com
ErrorLog "/var/log/httpd/www.map.com-error_log"
CustomLog "/var/log/httpd/www.map.com-access_log" common
AllowOverride None
井 Allow open access:
Require all granted
并改掉 vim /etc/hosts
加入这一行192.168.11.21 www.baidu.com map.baidu.com
systemctl restart httpd
curl www.baidu.com 输出结果为www.baidu.com
curl map.baidu.com 输出结果为map.baidu.com