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服务
# 访问

img

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

img

在根目录下面的子目录开启索引

<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

# 访问

img

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的话就会覆盖之前的用户

img

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  # 私钥存放路径

# 重启服务

img

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,可以看到这个目录下面的所有文件

  • 然后展示这个目录下面的所有文件,开启一个参数即可

  • 如果没有看到默认的首页文件,就会看到这个目录下面的所有

posted @ 2025-10-20 21:21  w7nn  阅读(2)  评论(0)    收藏  举报