学习apache服务

本文详细介绍了如何学习和配置Apache服务器,包括安装httpd、修改配置文件、设置开机自启、调整工作模式、实现多域名虚拟主机、权限管理、日志记录以及使用curl命令。此外,还讲解了如何通过ab命令进行压力测试和通过server-status查看服务器状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习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参数,直接保存资源到本地

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值