学习apchae
准备前工作
1.安装httpd软件
[root@localhost ~]# yum install httpd
2.检查关闭防火墙和selinux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# getenforce
Disabled
3.添加httpd开机自启
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# ststemctl enable httpd
4.检查程序进程和端口
[root@localhost ~]# netstat -tunlp|grep httpd
tcp6 0 0 :::80 :::* LISTEN 1610/httpd
[root@localhost ~]# ps -ef |grep httpd
root 1610 1 0 19:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1612 1610 0 19:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1613 1610 0 19:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1614 1610 0 19:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1615 1610 0 19:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1616 1610 0 19:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1618 1610 0 19:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1632 1610 0 19:15 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1636 1610 0 19:15 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1637 1610 0 19:15 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1638 1610 0 19:15 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 1727 1520 0 19:19 pts/0 00:00:00 grep --color=auto httpd
配置apcche文件
#注:默认的主配置文件在/etc/httpd/conf/httpd.conf
[root@localhost ~]# grep -Ev "^[# ]|^$" /etc/httpd/conf/httpd.conf
ServerRoot "/etc/httpd" #######httpd主配置目录
Listen 80 #######定义apache允许的端口
Include conf.modules.d/*.conf ######通过include语法,把其他目录中的配置文件包含进来,实现配置文件简洁化
User apache #######定义httpd服务运行的用户名
Group apache #######定义httpd服务运行的用户组
ServerAdmin root@localhost #######定义主机名
<Directory />
</Directory>
DocumentRoot "/var/www/html" ######定义httpd的网页根目录
<Directory "/var/www">
</Directory>
<Directory "/var/www/html">
</Directory>
<IfModule dir_module>
</IfModule>
<Files ".ht*">
</Files>
ErrorLog "logs/error_log"
LogLevel warn
<IfModule log_config_module>
</IfModule>
<IfModule alias_module>
</IfModule>
<Directory "/var/www/cgi-bin">
</Directory>
<IfModule mime_module>
</IfModule>
AddDefaultCharset UTF-8
<IfModule mime_magic_module>
</IfModule>
EnableSendfile on
IncludeOptional conf.d/*.conf
修改apache网页根目录,需要修改如下参数
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/www/html"
<Directory "/www/html">
AllowOverride None ########不允许其他配置文件,覆盖现有配置
#Allow open access:
Require all granted ########允许所有请求
</Directory>
创建新的站点目录
[root@localhost ~]# mkdir -p /www/html
[root@localhost www]# vim /www/html/index.html
<meta charset=utf8>
我是修改httpd首页之后的先站点内容!
重新启动httpd服务
[root@localhost www]# systemctl restart httpd
修改apache默认允许端口,更改为85端口
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
Listen 85
重启httpd服务
[root@localhost www]# systemctl restart httpd
apache的工作模式(多进程工作模式)
prefok
是在apache在启动时,预先fork一些进程,并且这些进程等待用户的请求,这么做为了减少,频繁的创建和销毁进程,带来的额外系统开销
该prefok模式是一个进程,只有一个进程,一个时间只能处理一个请求
优点:稳定,兼容所有的apache模块,不用担心线程冲突
缺点:多个进程占用较多的系统资源,消耗较多的内容,该模式不适合并发
worker
使用了多进程和多线程的混合模式,预先fork了几个子进程,然后每个子进程创建一些线程,同时包括一个监听线程。每个请求过来,会被分配到1个线程来服务。线程比起进程更轻量,消耗较少内存
优点:占据更少的内存,高并发下表现更优秀
缺点:必须考虑线程安全问题
event
和worker模式相似,区别在于,它解决了TCP的keep-alive场景下,长期被占用的线程的资源浪费问题,event模式会默认开启一个监听线程,检测到当子线程处理完毕请求之后,会释放该线程,减轻服务器的压力
检查默认的apache工作模式
[root@localhost www]# httpd -V|grep -i "server mpm"
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Server MPM: prefork
添加编译参数更改apache工作模式
[root@localhost ~]--with-mpm=prefork|worker|event
userdir功能
注:它的主配置文件目录为/etc/httpd/conf.d/userdir.conf
<IfModule mod_userdir.c>
#
# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).
#
# UserDir disabled **################添加注释,表示启用**
#
# To enable requests to /~user/ to serve the user's public_html
# directory, remove the "UserDir disabled" line above, and uncomment
# the following line instead:
#
UserDir public_html ####打开次参数
</IfModule>
#
# Control access to UserDir directories. The following is an example
# for a site where these directories are restricted to read-only.
#
<Directory "/home/*/public_html">
#AllowOverride FileInfo AuthConfig Limit Indexes ####注释掉原先的配置
AllowOverride all
authuserfile "/etc/httpd/passwd" ######添加一些认证的配置,让用户可以用账号,密码访问该目录
authname "input your accout"
authtype basic
require user chao ######用chao用户登录apache
#Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
#Require method GET POST OPTIONS
</Directory>
创建网站数据资料,注意权限
创建普通用户,创建共享目录
[root@localhost ~]# useradd chaoge
[root@localhost ~]# su - chaoge
[chaoge@localhost ~]$ mkdir public_html
创建共享网页文件内容和设置权限
[chaoge@localhost ~]$ vim public_html/index.html
<meta charset=utf8>
欢迎大家来一起学习apache,感谢大家~~~~~
[chaoge@localhost ~]$ chmod -Rf 755 /home/chaoge/
创建需要验证的账号密码生成数据库文件(创建chao账号,密码123456)
[root@localhost ~]# htpasswd -c /etc/httpd/passwd chao
New password:
Re-type new password:
Adding password for user chao
重启apache服务
[root@localhost ~]# systemctl restart httpd
访问http://192.168.3.120/~chaoge/ ######格式是ip/~用户名
apache多域名和多ip的虚拟主机实战
基于IP的多虚拟机主机
1.在服务器上绑定多个ip地址,每个ip地址部署一个网址
服务器绑定3个ip地址(机器重启临时的ip就失效,要永久有效还是要写在配置文件里/etc/sysconfig/network-scripts/ifcfg-ens33)
[root@localhost ~]# ip address add 192.168.3.200/24 dev ens33
[root@localhost ~]# ip address add 192.168.3.201/24 dev ens33
[root@localhost ~]# ip address add 192.168.3.202/24 dev ens33
[root@localhost ~]# ip address | grep "inet 192"
inet 192.168.3.120/24 brd 192.168.3.255 scope global noprefixroute ens33
inet 192.168.3.200/24 scope global secondary ens33
inet 192.168.3.201/24 scope global secondary ens33
inet 192.168.3.202/24 scope global secondary ens33
永久生效一个网卡配置多个虚拟ip
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
BOOTPROTO=static
UUID=f3daddeb-fb92-41cd-ba7b-21e8b7237d8a
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.3.200
NETMASK=255.255.255.0
GATEWAY=192.168.3.1
DNS1=61.153.177.196
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33:1
BOOTPROTO=static
UUID=f3daddeb-fb92-41cd-ba7b-21e8b7237d8a
DEVICE=ens33:1
ONBOOT=yes
IPADDR=192.168.3.201
NETMASK=255.255.255.0
GATEWAY=192.168.3.1
DNS1=61.153.177.196
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33:2
BOOTPROTO=static
UUID=f3daddeb-fb92-41cd-ba7b-21e8b7237d8a
DEVICE=ens33:2
ONBOOT=yes
IPADDR=192.168.3.202
NETMASK=255.255.255.0
GATEWAY=192.168.3.1
DNS1=61.153.177.196
更改完成后重启网卡
[root@localhost ~]# service network restart
###对多个不同ip地址,做一个域名解析关系,在hosts文件中,添加如下对应的解析关系(客户端添加)
192.168.3.200 www.xiaoshuo.cn
192.168.3.201 www.hanju.cn
192.168.3.202 www.tiyu.cn
###在客户端本地的hosts文件中,添加对应的域名-ip
文件的路径在:c:\windows\system32\drivers\etc\hosts
在linux服务器上,添加多个站点资料和对应首页信息
192.168.3.200 /www/xiaoshuo/index.html
192.168.3.201 /www/hanju/index.html
192.168.3.202 /www/tiyu/index.html
[root@localhost ~]# mkdir -p /www/{xiaoshuo,hanju,tiyu}
[root@localhost ~]# vim /www/xiaoshuo/index.html
<meta charset=utf8>
我是小说首页,来自于192.168.3.200
[root@localhost ~]# vim /www/hanju/index.html
<meta charset=utf8>
我是韩剧首页,来自于192.168.3.201
[root@localhost ~]# vim /www/tiyu/index.html
<meta charset=utf8>
我是体育首页,来自于192.168.3.202
修改httpd.conf主配置文件,最底行添加apache虚拟主机的配置
<VirtualHost 192.168.3.200>
DocumentRoot /www/xiaoshuo #########定义网页跟目录
ServerName "www.xiaoshuo.cn" #########定义虚拟机主机匹配的域名
<Directory "/www/xiaoshuo">
AllowOverride None #########允许所有访问的权限
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.3.201>
DocumentRoot /www/hanju
ServerName "www.hanju.cn"
<Directory "/www/hanju">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.3.202>
DocumentRoot /www/tiyu
ServerName "www.tiyu.cn"
<Directory "/www/tiyu">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
重启httpd服务
[root@localhost ~]# systemctl restart httpd
apache设置站点访问权限
直接修改apache配置文件,如虚拟主机:192.168.3.200
拒绝所有人访问站点资源和允许某个网段访问
<VirtualHost 192.168.3.201>
DocumentRoot /www/hanju
ServerName "www.hanju.cn"
<Directory "/www/hanju">
#AllowOverride None #####允许所有人访问
#Require all granted
order allow,deny ######禁止所有人访问
#Allow from 192.168.3.0/24 #####打开注释,就是允许某个网段访问
</Directory>
</VirtualHost>
定义访问日志格式
查看httpd配置文件,找到LogLevel 对应的行就是日志配置所在位置
日志级别
emerg 紧急-系统无法使用
alert 必须立即采取措施
crit 致命情况
error 错误情况
warn 警告情况
notice 一般重要情况
info 普通信息
debug 出错级别信息
日志格式
%…a 远程IP地址
%…A 本地IP地址
%…B 已发送的字节数,不包含HTTP头
%…b CLF格式的已发送字节数量,不包含HTTP头
%…{FOOBAR}e 环境变量FOOBAR的内容
%…f 文件名字
%…h 远程主机
%…H 请求的协议
%…{Foobar}i Foobar的内容,发送给服务器的请求的标头行
%…l 远程登录名字
%…m 请求的方法
%…{Foobar}n 来自另外一个模块的注解“Foobar”的内容
%…{Foobar}o Foobar的内容,应答的标头行
%…p 服务器响应请求时使用的端口
%…P 响应请求的子进程ID
%…q 查询字符串
%…r 请求的第一行
%…>s 状态。对于进行内部重定向的请求
%…t 已公共日志时间格式表示的时间
%…{format}t 指定格式format表示的时间
%…T 为响应请求而耗费的时间,以秒计
%…D 记录服务器处理请求的微秒时间
%…u 远程用户
%…U 用户所请求的URL路径
%…v 响应请求的服务器的ServerName
%…V 依照UseCanonicalName设置得到的服务器名字
%…{Referer}i 请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的
%…{User-Agent}i 请求报文中首部“User-Agent”的值;即发出请求的应用程序
status状态页
对于运维来说,需要实时监控httpd实时运行情况、负载情况等。需要在编译安装apache的时候,开启mod_status模块
在httpd配置文件下添加如下命令
设置状态页的功能,用户访问192.168.3.120/server-status
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
<Location /server-status>
SetHandler server-status
<RequireAll>
Require ip 192.168.3.0/24
</RequireAll>
</Location>
[root@localhost ~]# systemctl restart httpd
访问apache状态页面
192.168.3.120/server-status
使用apache自带的压测命令,给服务器发送大量的请求
使用ab命令
[root@localhost ~]# yum install httpd-tools
给服务器发出100个并发数,总发出100000个请求
[root@localhost ~]# ab -c 100 -n 100000 http://192.168.3.120/
检查进程数
[root@localhost ~]#ps -ef | grep httpd | wc -l
curl命令
-A/–user-agent 设置用户代理发送给服务器
-b/–cookie <name=string/file> cookie字符串或文件读取位置
-c/–cookie-jar 操作结束后把cookie写入到这个文件中
-C/–continue-at 断点续转
-D/–dump-header 把header信息写入到该文件中
-e/–referer 来源网址
-f/–fail 连接失败时不显示http错误
-o/–output 把输出写到该文件中
-O/–remote-name 把输出写到该文件中,保留远程文件的文件名
-r/–range 检索来自HTTP/1.1或FTP服务器字节范围
-s/–silent 静音模式。不输出任何东西
-T/–upload-file 上传文件
-u/–user <user[:password]> 设置服务器的用户和密码
-w/–write-out [format] 指定输出内容
-x/–proxy <host[:port]> 在给定的端口上使用HTTP代理
-#/–progress-bar 进度条显示当前的传送状态
1.保存网页html元素
获取192.168.3.120站点的内容并保存
[root@localhost ~]# curl 192.168.3.120 > index.html
<meta charset=utf8>
我是修改httpd首页之后的先站点内容!
2.参数保存网页
-o参数,指定保存文件的名字
[root@localhost ~]# curl -o /test.html 192.168.3.120
3.测试网页是否存活
-o 输出内容到文件
-s 不输出页面内容
-w 指定输出内容
[root@localhost ~]# curl -o /dev/null -s -w %{http_code} 192.168.3.120
[root@localhost ~]# echo $?
0 #############查看上一条命令是否正确执行,0为正确,也就是表示该网站正常运行
4.保存站点cookie
[root@localhost ~]# curl -c cookiec.txt 192.168.3.120
5.利用curl命令,进行身份伪装
准备一个伪装的user-agent信息
“Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36”
curl -A “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36” www.pythonav.cn
6.利用curl下载资源
-O 大写字母O参数,直接保存资源到本地