apache服务配置
-
三种工作模式
-
修改工作模式
# 父进程root产生apache进程
# 因此如果apche被进攻了,影响的是apache服务
[root@server ~]# ps -ef | grep httpd| head -n 10
root 1639 1 0 12:45 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1640 1639 0 12:45 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1641 1639 0 12:45 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1642 1639 0 12:45 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1643 1639 0 12:45 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 1835 1435 0 12:53 pts/0 00:00:00 grep --color=auto httpd
httpd配置
1、httpd工作模式
1、perfork多进程模型
-
进程预启动,一个进程只能派生一个线程处理一个请求,最大可以每秒启动32个进程,一秒能够处理32个请求
-
优点:
-
稳定,兼容apache早期的各种模块功能
-
安全,只有主进程是root启动,其他的子进程都是apache,因此攻击者攻击apache服务,不会影响到apache
-
-
缺点:
- 对进程的消耗和创建频繁,因此消耗的cpu资源多,在高并发的场景下,容易出现IO等待,也及时请求需要排队
-
场景:早期一些依赖apache的模块,低频率安全访问的场景(智能终端设备的web管理系统,光猫,路由器等)
2、worker多线程模型
-
启动多个子进程,同时每个子进程创建多个字线程出来,线程处理请求,这种模式下,占用的资源比较少,可以处理大量并发请求;但是其中的子进程或者线程崩溃的话,会影响子进程下面全部任务,同时长连接的请求如果被一直占用的话,直到超时才会释放
-
优点;
- 占用的内存少,高并发下请求处理的性能更优
-
缺点
-
线程之间通过共享内存的机制通信,安全性不高
-
高并发下的长连接不擅长,就是一个线程处理这个请求10秒,但是又来了一个请求,就会等待,IO阻塞,新的请求没有空闲的线程处理,就会排队
-
-
场景:高并发的场景,论坛,电商网站等,但是如果是长连接就不行
3、event异步的IO模型
-
一个进程下面有一个监听线程(专门用来接收请求的),还有多个子线程,改善了worker模式下的长连接一直占用线程的问题,监听线程接收请求后,转发给工作线程,工作线程负责处理请求,空线程不会被转发(这个也就是长连接的),空闲的连接不会占用线程
-
优点:
- 解决了高并发中的keepalive长期占用线程引起的阻塞问题
-
缺点:
- linux内核版本需要大于2.6以上
-
场景: 适合实时通讯业务,在线聊天平台,通讯内的短连接应用(短时间内有大量的并发)
4、更改httpd工作模式
1、查看apache版本和查看默认的工作模式
[root@server /]# httpd -v
Server version: Apache/2.4.51 (Unix) # apache版本是2.4.51
Server built: Sep 3 2025 17:21:11
[root@server /]# httpd -V
Server version: Apache/2.4.51 (Unix)
Server built: Sep 3 2025 17:21:11
Server's Module Magic Number: 20120211:134
Server loaded: APR 1.7.0, APR-UTIL 1.6.1
Compiled using: APR 1.7.0, APR-UTIL 1.6.1
Architecture: 64-bit
Server MPM: event # 默认的工作是是event
threaded: yes (fixed thread count)
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_PROC_PTHREAD_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="/run/httpd/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
2、更改httpd工作模式
修改/etc/httpd/conf.modules.d/00-mpm.conf这个文件
只能开启一个模式,开启多个会报错
# 这个三个参数控制httpd工作模式
[root@server conf.modules.d]# grep "so$" 00-mpm.conf
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule mpm_worker_module modules/mod_mpm_worker.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
# 重启服务
[root@server conf.modules.d]# systemctl restart httpd
# 查看httpd工作模式状态
[root@server conf.modules.d]# httpd -V | grep wor
Server MPM: worker
2、httpd配置文件详解
1、apache文件
1、配置文件
[root@server httpd]# ls
conf conf.d conf.modules.d logs modules run state
-
conf下面是主配置文件的目录
-
conf.d 是扩展配置目录
-
conf.modules.d 功能模块的配置目录(该目录下放的是启用模块的配置文件)
-
logs日志目录 对应的真实目录是/var/log/httpd
-
modules-->/usr/lib64/httpd/modules 功能模块的库都放在这个目录下
-
run---> /run/httpd 是apache的运行状态,里面有进程的套接字,进程的pid,以及缓存
-
state apache运行状态信息,失败的记录
2、全局的配置文件
[root@server conf]# egrep -v "^$|#" httpd.conf
ServerRoot "/etc/httpd"
Listen 80
Include conf.modules.d/*.conf
User apache
Group apache
ServerAdmin root@localhost
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/var/www/html"
<Directory "/var/www">
AllowOverride None
Require all granted
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<Files ".ht*">
Require all denied
</Files>
ErrorLog "logs/error_log"
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combin
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %Ombinedio
</IfModule>
CustomLog "logs/access_log" combined
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
<IfModule mime_module>
TypesConfig /etc/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset UTF-8
<IfModule mime_magic_module>
MIMEMagicFile conf/magic
</IfModule>
EnableSendfile on
IncludeOptional conf.d/*.conf
2、ServerRoot
-
指的是httpd服务的根目录,不是访问网站的根目录
-
/etc/httpd,默认的根目录
3、Listen
-
指的是httpd监听的哪一个端口,默认监听的是80端口
-
修改为9899端口
[root@server conf]# grep "^Li" httpd.conf
Listen 9899
# 添加selinux标签
[root@server conf]# semanage port -a -t http_port_t -p tcp 9899
# 重启httpd服务
[root@server conf]# systemctl restart httpd
# 发现httpd监听在9899端口上了
[root@server conf]# netstat -pant|grep 9899
tcp6 0 0 :::9899 :::* LISTEN 2278/httpd
- 虽然监听的是ipv6的,但是其实也在监听ipv4的,linux有一个内核参数将其转换为ipv6的了,都在监听
4、Include
- 指的就是去加载conf.modules.d/*.conf下面的所有conf文件,怎么去找这个呢,首先是ServerRoot这个根目录下面去寻找,找conf.modules目录,然后加载这个下面的.conf文件
# 注释掉,就会报错
[root@server conf]# grep "^#Incl" httpd.conf
#Include conf.modules.d/*.conf
systemctl restart httpd
# 发现报错原因是没有工作模式导入,所以就会报错
[root@server conf]# journalctl -xeu httpd | grep -i load
Oct 20 19:48:25 server httpd[2510]: AH00534: httpd: Configuration error: No MPM loaded.
# httpd -t也可以查看到错误信息
5、User和Group
- 指定httpd使用哪个用户启动worker进程,主进程只能是root启动,因为默认的情况下httpd监听80端口,普通用户只能监听1024以上的端口,所以只能使用root来启动主进程
# 修改user和group
[root@server conf]# ps -aux|grep httpd
root 2551 0.5 0.4 17448 10956 ? Ss 19:52 0:00 /usr/sbin/httpd -DFOREGROUND
apache 2552 0.0 0.2 17412 6540 ? S 19:52 0:00 /usr/sbin/httpd -DFOREGROUND
apache 2553 0.0 0.6 1435572 16452 ? Sl 19:52 0:00 /usr/sbin/httpd -DFOREGROUND
apache 2554 0.0 0.6 1435572 16452 ? Sl 19:52 0:00 /usr/sbin/httpd -DFOREGROUND
apache 2555 0.0 0.4 1566708 12368 ? Sl 19:52 0:00 /usr/sbin/httpd -DFOREGROUND
# 修改为zhangsan,这个用户的存在才行
[root@server conf]# grep "zhangsan" httpd.conf
User zhangsan
[root@server conf]# systemctl restart httpd
[root@server conf]# ps -aux|grep httpd
root 2823 0.2 0.4 17448 10984 ? Ss 19:55 0:00 /usr/sbin/httpd -DFOREGROUND
zhangsan 2824 0.0 0.2 17412 6496 ? S 19:55 0:00 /usr/sbin/httpd -DFOREGROUND
zhangsan 2825 0.0 0.4 1435572 10248 ? Sl 19:55 0:00 /usr/sbin/httpd -DFOREGROUND
zhangsan 2826 0.0 0.5 1435572 14336 ? Sl 19:55 0:00 /usr/sbin/httpd -DFOREGROUND
zhangsan 2827 0.0 0.4 1566708 12296 ? Sl 19:55 0:00 /usr/sbin/httpd -DFOREGROUND
6、ServerAdmin
- 管理员的邮箱,在服务器出现了报错的问题时,会显示,500的时候显示
# 修改httpd.conf这个文件
AllowOverride All
[root@server html]# cat .htaccess
<directory "/var/www/html">
asddadadada
</directory>
# 重启httpd服务
# 访问

7、DocumentRoot
-
网站的根目录,也就是网页的配置文件存放的地方
-
默认访问的网站的根目录
# 定义一个data目录
DocumentRoot "/data"
<Directory "/data">
AllowOverride None
Require all granted
</Directory>
<Directory "/data/euler">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
setenforce 0 和防火墙的关闭
[root@server conf.d]# ls /data/ -R
/data/:
euler
/data/euler:
# 访问 192.168.50.20/euler
8、Directory
- 给网站目录指定一个访问策略
<Directory />
AllowOverride none
Require all denied
</Directory>
# 拒绝所有访问网站/这个目录的
# AllowOverride 用来控制.htaccess这样的文件,none则忽略这些文件里面写的策略,All则是不忽略
# 上面的配置就是忽略网站根目录下的.htaccess文件,并且不允许访问根目录
9、IfModule dir_module
- 自定义网页的默认配置文件
<IfModule dir_module>
DirectoryIndex index.html # 默认去网站下面找index.html文件
</IfModule>
-
添加默认网页文件
-
自定义的网页默认文件,优先级就是按照这个顺序的
[root@server conf]# grep "dir_mod" httpd.conf -A2
<IfModule dir_module>
DirectoryIndex index.html hello.dh
</IfModule>
[root@server euler]# cat hello.dh
123
# 浏览器访问即可
http://192.168.50.20/euler/
10、File
- 对文件进行授权,有个文件存放在这个网站下面,但是不想让这个文件被访问到,可以使用file对这个文件进行授权
<Files ".ht*">
Require all denied
</Files>
# 拒绝访问的以.ht开头的所有文件
11、其他配置
-
ErrorLog 定义apache错误日志的存放位置
-
IfModule log_config_module 定义日志的格式
-
IfModule alias_module 定义别名目录
<IfModule alias_module> 定义的别名目录
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
# 访问cgi-bin的时候,访问/var/www/cgi-bin这个目录
-
IfModule mime_module 定义apache支持的文件类型,默认是文本文件
-
AddDefaultCharset 设置网站的默认字符集,utf-8
- 在vim 中使用:set fileencoding=gb2312 修改文本的编码方式
- 当网站程序(网页文件)和服务器支持的编码方式不一致时 则出现乱码
- IfModule mime_magic_module,扩展的mime的类型 支持二进制文件,或者是一些应用的程序的文件类型
<IfModule mime_magic_module>
MIMEMagicFile conf/magic
</IfModule>
- IncludeOptional conf.d/*.conf 加载虚拟主机的配置文件 就是一个一个网站,通常每一个配置文件就是一个网站
3、httpd高级配置
1、长连接
- 可以复用之前的通道
/usr/share/doc/httpd/httpd-default.conf
KeepAlive On
KeepAliveTimeout 5 # 设置超时时间,当服务器完成一次请求后,5秒内没有新的请求的话,关闭连接
MaxKeepAliveRequests 100 # 每一个连接可以处理100个请求
-
推荐的值的是 KeepAliveTimeout 10 -15 MaxKeepAliveRequests 200
-
默认是开启的
-
默认访问看不到这个选项,但是关闭的话,可以看到这个选项
-
nginx默认是看的到的
# apache 看不到
[root@server httpd]# curl localhost -I
HTTP/1.1 200 OK
Date: Wed, 22 Oct 2025 06:43:10 GMT
Server: Apache/2.4.51 (Unix)
Last-Modified: Wed, 22 Oct 2025 06:42:39 GMT
ETag: "4-641b99f6cecb0"
Accept-Ranges: bytes
Content-Length: 4
Content-Type: text/html; charset=UTF-8
# nginx可以看得到
[root@server httpd]# curl huawei.com -I
HTTP/1.1 301 Moved Permanently
Server: PAAS-WEB
Date: Wed, 22 Oct 2025 06:43:45 GMT
Content-Type: text/html
Content-Length: 165
Connection: keep-alive # 开启的
Location: https://www.huawei.com/
processtime: 0.000
2、配置资源的访问策略
- 配置目录和文件的访问策略,在directory这个字段下面
1、策略的配置
1、Options
-
配置的选项
-
Options:配置目录的权限
-
Indexes:如果目录中没有找到默认的首页文件,则索引当前的目录
-
FollowSymLinks 允许使用软连接
-
ALL 开启所以的配置
-
None 禁用所有的配置项
-
-
在根目录下面开启索引
# 在根目录下面配置索引
DocumentRoot "/data"
<Directory "/data">
AllowOverride None
Require all granted
Options Indexes # 开启了索引
</Directory>
# 访问时候为123
[root@server conf]# curl localhost
123
# 删除默认的页面文件
# 访问的就是welcome.conf这个欢迎文件
# 查看welcome.conf这个文件
<LocationMatch "^/+$">
Options -Indexes # -表示关闭索引
ErrorDocument 403 /.noindex.html
</LocationMatch>
<Directory /usr/share/httpd/noindex>
AllowOverride None
Require all granted
</Directory>
Alias /.noindex.html /usr/share/httpd/noindex/index.html # 然后访问这个文件
# 原因是什么呢,查看主配置文件
# 最后一行,加载了这个welcome.conf这个配置文件,配置冲突了,加载后,就关闭了根目录下面的索引
IncludeOptional conf.d/*.conf
# 移动这个文件到/opt下面,就能访问到根目录下面的索引了
[root@server conf.d]# mv welcome.conf /opt/
[root@server conf.d]# systemctl restart httpd

在根目录下面的子目录开启索引
<Directory "/data">
AllowOverride None
Require all granted
Options Indexes
</Directory>
<Directory "/data/a">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
[root@server conf]# ls /data/a/
file1.txt file2.txt file3.txt
# 没有移动welcome.conf这个配置文件
[root@server conf]# ls ../conf.d/
autoindex.conf README userdir.conf welcome.conf
[root@server conf]# systemctl restart httpd
# 访问

2、AllowOverride
-
AllowOverride 配置目录中.htaccess访问文件是否生效,默认值为None
-
All 该文件中的所有指令都生效
-
None 该文件中的所有指定都不生效
-
2、访问的控制
1、基于ip地址和域名的访问控制
-
参数解析
-
默认拒绝所有访问
-
requieany 逻辑或 表示这个里面指令满足一个就可以了,用户访问的时候只需要满足一个条件就能访问
-
requireall 逻辑与 表示里面的所有指令都需要满足,用户访问时,必须满足这个里面的所有条件才能允许访问
- 里面可以写多条require指令
-
require all granted 允许所有地址访问
-
require all denied 拒绝所有地址访问
-
require not ip 地址 需要和granted配置使用,表示黑名单,denied时,不需要使用not--->表示白名单
-
require ip 地址 只允许这个ip地址访问,白名单
-
require ip 地址/24 允许这个指定的子网进行访问
-
require host 域名 允许这个主机访问,apache主机需要能够解析这个主机名
-
-
禁止所有人访问a这个目录
<Directory "/data/a">
Options Indexes FollowSymLinks
AllowOverride None
Require all denied
</Directory>
[root@server conf]# curl localhost/a/
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access this resource.</p>
</body></html>
- 允许所有人访问,但是禁止自己这个ip访问
<Directory "/data/a">
Options Indexes FollowSymLinks
AllowOverride None
<requireall>
Require all granted
require not ip 192.168.50.20
</requireall>
[root@server conf]# curl 192.168.50.20/a/
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access this resource.</p>
</body></html>
# 这个访问127.0.0.1,以这个ip地址进行访问的
[root@server conf]# curl localhost/a/
888
- 白名单配置,因为apache默认是拒绝所有的,因此允许一个ip地址访问就是白名单了
<requireall>
require ip 192.168.50.20
</requireall>
[root@server conf]# curl 192.168.50.20/a/
888
[root@server conf]# curl localhost/a/
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access this resource.</p>
</body></html>
- 允许一个子网访问都能访问,但是有一个ip地址不能访问
# 都需要满足下面的条件,
<requireall>
require not ip 192.168.50.20
require ip 192.168.50.0/24
</requireall>
- 配置错误的
# 这个配置是错误的,因为表示都要满足下面的2个条件
# 需要改成any才行
<requireall>
require ip 192.168.60.0/24
require ip 192.168.50.0/24
</requireall>
<Directory "/data/a">
Options Indexes FollowSymLinks
AllowOverride None
require host server # 服务器可以解析这个主机名,才能生效
</Directory>s
3、基于用户的认证
-
访问网页,需要登录才能看的到
-
用户认证的参数
-
AuthType Basic 认证的类型
-
AuthName 认证的提示信息
-
AuthUserFile 认证的用户和密码存储文件
-
require user 用户名 表示可以认证的用户
-
1、明文认证
- 这个认证是明文的,因此抓包的话,可以显示密码
<requireall>
Require all granted
authtype basic
authname openeuler
authuserfile /opt/pass1
require user zhangsan
</requireall>
# 生成用户和密码
[root@server conf]# htpasswd -c /opt/pass1 zhangsan
New password:
Re-type new password:
Adding password for user zhangsan
[root@server conf]# cat /opt/pass1
zhangsan:$apr1$SKLzGtCn$MUyCKDdtDkyT6SpAlSGgt.
# 还有添加用户的话,需要-a添加,-c的话就会覆盖之前的用户

2、密文认证
-
基于hash加密的
-
需要指定这个域,域的要求一致
<requireall>
Require all granted
authtype digest
authname openeuler
authuserfile /opt/pass2
require user test
</requireall>
# openeuler是域,后面test是用户
[root@server conf]# htdigest -c /opt/pass2 openeuler test
Adding password for test in realm openeuler.
New password:
Re-type new password:
# openeuelr必须与配置文件的一致才行
[root@server conf]# cat /opt/pass2
test:openeuler:d2500e2af06bd0eb4d572ac93b853096
# 浏览器访问
# 抓包抓不到的
3、配置https
-
公网ip+ssl签名
-
在网上购买ssl签名,公网,zerossl这个网址
-
是一个zip文件,然后上传到linux服务器了
-
url重定向的规则
-
自定义安装httpd
-
http协议是不安全的,都是明文传输,需要配置https让网站加密一下用户信息
-
分为三步
-
安装模块
-
申请证书
-
配置证书
-
1、安装ssl模块
[root@server conf]# yum -y install mod_ssl
2、申请证书
- 申请一个ssl证书
openssl genrsa -out server.key 2048 # 生成私钥
openssl req -new -key server.key -out server.csr # 私钥签名,证书签名请求
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt # 创建自签名证书
server.key:私钥文件(保密!)
server.csr:证书签名请求(可提交给 CA 机构)
server.crt:自签名证书(用于配置 HTTPS)
3、配置证书
[root@server conf.d]# vim ssl.conf
SSLCertificateFile /root/server.crt # 证书的存在的路径
SSLCertificateKeyFile /root/server.key # 私钥存放路径
# 重启服务

4、http重定向到https
Listen 80
RewriteEngine on # 打开重写规则
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=302] # 重定向规则
# 重启服务
- 无论你输入的是http://ip还是https://ip,最后都是https
4、虚拟主机
-
就是一个服务器可以提供多个网站页面,一个ip虚拟出来多个网站
-
虚拟主机有三类
-
基于端口的虚拟主机,81,82端口,就会显示不同的页面
-
基于ip的虚拟主机
-
基于域名的虚拟主机,不同的域名会显示不同的页面
-
1、基于端口的虚拟主机
- 虚拟主机配置文件在/etc/httpd/conf.d下,需要自己创建
[root@server conf.d]# cat port.conf
Listen 81 # 自定义端口
Listen 82
<virtualhost *:81>
documentroot /www/81
<directory "/www/81">
require all granted # 所有人都能访问
</directory>
</virtualhost>
<virtualhost *:82>
documentroot /www/82
<directory "/www/82">
require all granted
</directory>
</virtualhost>
# 网页文件创建
mkdir /www/81 -p
mkdir /www/82 -p
echo port is 81 > /www/81/index.html
echo port is 82 > /www/82/index.html
# 安全的设置
semanage port -a -t http_port_t -p tcp 81
semanage port -a -t http_port_t -p tcp 82
[root@server conf.d]# semanage port -l | grep -w 80
http_port_t tcp 82, 80, 81, 443, 488, 8008, 8009, 8443, 9000
semanage fcontext -a -t "httpd_sys_content_t" "/www(/.*)?"
restorecon -RFv /www
[root@server conf.d]# firewall-cmd --permanent --add-port=81/tcp
success
[root@server conf.d]# firewall-cmd --permanent --add-port=82/tcp
success
[root@server conf.d]# firewall-cmd --reload
success
# http监听的端口
[root@server conf.d]# ss -pant|grep 81
TIME-WAIT 0 0 127.0.0.1:60116 127.0.0.1:81
LISTEN 0 511 *:81 *:* users:(("httpd",pid=2221,fd=6),("httpd",pid=2220,fd=6),("httpd",pid=2219,fd=6),("httpd",pid=2216,fd=6))
systemctl restart httpd
- 访问
[root@server conf.d]# curl localhost:81
port is 81
[root@server conf.d]# curl localhost:82
port is 82
2、基于ip的虚拟主机
- 一个服务器上面有多个ip地址,监听
[root@server conf.d]# cat port.conf
<virtualhost 192.168.50.20:80> # 这个监听的是192.168.50.20这个地址,而不是之前监听所有地址
documentroot /www/
<directory "/www/">
require all granted
</directory>
</virtualhost>
- 因此的话访问,只能与192.168.50.20这个能进行通信即可
[root@server conf.d]# curl 192.168.50.20
ip
curl localhost # 就无法访问到上面的页面,因为是127.0.0.1这个ip上,没有精确匹配的
# 显示默认页面
-
当请求为http://192.168.50.20时,服务器发现这个请求目标ip和端口精确匹配,port.conf中的配置文件,因此返回一个页面
-
当请求为http://127.0.0.1时,由于没有精确匹配,就会匹配监听所有主机的80端口的规则,返回默认页面
3、基于域名的虚拟机主机
- 就是基于同一个ip地址和端口,显示不同的页面
[root@server conf.d]# cat w.conf
<virtualhost *:80>
documentroot /www/a
servername www.a.com
<directory "/www/a">
require all granted
</directory>
</virtualhost>
<virtualhost *:80>
documentroot /www/b
servername www.b.com
<directory "/www/b">
require all granted
</directory>
</virtualhost>
# 需要域名解析才行,或者dns能够解析这个域名也可以
[root@server conf.d]# echo "192.168.50.20 www.a.com" >> /etc/hosts
[root@server conf.d]# echo "192.168.50.20 www.b.com" >> /etc/hosts
# 访问
[root@server conf.d]# curl www.a.com
aaaa
[root@server conf.d]# curl www.b.com
bbbb
5、数据压缩
- 之后补充
6、日志配置
- 之后补充
实验
-
自定义网页目录
-
默认访问的是index.html文件
-
如果没有index.html,可以看到这个目录下面的所有文件
-
然后展示这个目录下面的所有文件,开启一个参数即可
-
如果没有看到默认的首页文件,就会看到这个目录下面的所有
浙公网安备 33010602011771号