1.apache HTTP server介绍

httpd项目地址:

https://httpd.apache.org/  

在Apache2中有三种工作模式,使用者可以根据不同的业务场景来进行选择

(1)prefork模式

prefork模式是一种老而稳的模式:

一个主进程管理者多个子进程,每个子进程单独处理用户请求,它比较占内存,但稳定,能够设置进程数量上下限,适合访问量不大的场景(Liunx下最多同时处理1024个连接)

优点:工作稳定

缺点:每个用户请求需要对应开启一个线程,占用资源较多,并发性差,不适用于高并发场景

(2)worker模式

一种多进程和多线程混合的模型,有一个控制进程,启动多个子进程,每个子进程里面包含固定的线程,使用线程来处理请求,当线程不够用的时候会再启动一个新的子进程,然后在进程里面再启动线程处理请求,由于其使用了线程处理请求,因此可以承受更高的并发

优点:相比prefork模型,其占用的内存较少,可以同时处理更多的请求

缺点:使用keepalive的长连接方式,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超时才会被释放,如果过多的线程被这样占据,也会导致再高并发场景下的无服务线程可用

(3)event模型

Apache2的event模型是2012年2.4.x版本新增的稳定模式,基于事件驱动(epoll),每个进程响应多个请求,类似于worker模式,但解决了keepalive时线程空挂浪费资源的问题,用专门线程管理这类线程,高并发下处理能力更强

优点:单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keepalive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放

缺点:没有线程完全控制

查看使用的哪种模式

[root@apache ~]# httpd -M | grep mpmmpm_event_module (shared)

2.apache的安装和使用

2.1apache配置文件注意事项

a.Apache2的配置主要分为三部分,分别是全局配置,虚拟主机配置,模块配置,这些配置项目分散在不同的目录和文件中,在主配置文件中以文件包含的形式引用它们

b.配置文件中的每一行包含一个配置指令,并指定值,配置指令不区分大小写,但值区分大小写

c.以#开头的行是注释行,注释不能出现在指令的后边,空白行和指令前的空白字符将被忽略,因此可用采用缩进以保持配置层次的清晰

2.2安装apache及用法

2.2.1安装apache

[root@apache ~]# yum install httpd -y

2.2.2查看版本

[root@apache ~]# httpd -v
Server version: Apache/2.4.53 (Red Hat Enterprise Linux)
Server built:   Jul 20 2022 00:00:00

2.2.3检测配置文件语法,是否正确

[root@apache ~]# httpd -t
Syntax OK

2.2.4查看apache的web服务配置文件

[root@apache ~]# tree -L 1 /etc/httpd/
/etc/httpd/
├── conf  #主配置文件所在目录
├── conf.d  #子配置文件所在目录
├── conf.modules.d   
├── logs -> ../../var/log/httpd  #日志文件所在目录
├── modules -> ../../usr/lib64/httpd/modules
├── run -> /run/httpd
└── state -> ../../var/lib/httpd# ../表示上一级目录的位置
比如说../../var/log/httpd
第一层表示在httpd上一级目录
第二层表示在etc上一级目录
所以httpd的日志文件所在目录为/var/log/httpd

2.2.5主配置文件说明

#过滤掉所有以#开头的注释行好所有空白行
[root@apache ~]# grep  -Ev "^.*#|^$" /etc/httpd/conf/httpd.conf
ServerRoot "/etc/httpd"  # http服务的顶级目录为/etc/httpd
Listen 80  #监听80
Include conf.modules.d/*.conf  #包括/etc/httpd/conf.modules.d/*.conf的所有文件
User apache  #服务的用户
Group apache  #服务的组
ServerAdmin root@localhost  #当前服务的管理员
<Directory />   #目录权限设置AllowOverride none  #此处权限不可被.htaccess文件权限参数覆盖Require all denied  #拒绝访问根目录
</Directory>
DocumentRoot "/var/www/html"  #网页文件存放的目录
<Directory "/var/www">  #目录权限限定AllowOverride NoneRequire all granted
</Directory>
<Directory "/var/www/html">Options Indexes FollowSymLinks  #索引,跟踪软链接AllowOverride NoneRequire all granted
</Directory>
<IfModule dir_module>  #全局默认提供的页面文件为index.htmlDirectoryIndex index.html
</IfModule>
<Files ".ht*">  #禁止访问所有以 .ht开头的文件Require all denied
</Files>
ErrorLog "logs/error_log"  #错误日志
LogLevel warn   #只记录警告(warn)及以上级别的日志信息
<IfModule log_config_module>  #定义日志格式LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedLogFormat "%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 %O" combinedio</IfModule>CustomLog "logs/access_log" combined  #使用combined的日志格式记录日志
</IfModule>
<IfModule alias_module>  #早期的动态网站文件路径ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<Directory "/var/www/cgi-bin">  #权限设定AllowOverride NoneOptions NoneRequire all granted
</Directory>
<IfModule mime_module>  #MIME类型配置TypesConfig /etc/mime.typesAddType application/x-compress .ZAddType application/x-gzip .gz .tgzAddType text/html .shtmlAddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset UTF-8  #Apache 默认的响应字符编码为UTF-8
<IfModule mime_magic_module>  #定义使用通过文件内容识别文件mime类型MIMEMagicFile conf/magic
</IfModule>  
EnableSendfile on  #启用sendfile系统调用,实现零拷贝文件传输
IncludeOptional conf.d/*.conf  #加载 conf.d/目录下所有 .conf结尾的文件作为额外配置

2.2.6启动服务并访问默认页面

a.关闭防火墙和SELinux
[root@apache ~]# systemctl disable --now firewalld
[root@apache ~]# setenforce  0
setenforce: SELinux is disabled
b.修改默认index.html页面文件
[root@apache ~]# echo jeams > /var/www/html/index.html
c.重启httpd并查看端口号
[root@apache ~]# systemctl restart httpd
[root@apache ~]# ss -lntup | grep httpd
tcp   LISTEN 0      511                *:80               *:*    users:(("httpd",pid=32197,fd=4),("httpd",pid=32196,fd=4),("httpd",pid=32195,fd=4),("httpd",pid=32193,fd=4))
d.访问网站
第一种:直接查看网站内容
[root@apache ~]#  curl  192.168.75.184
jeams
第二种:仅返回服务器的响应头
[root@apache ~]# curl -I 192.168.75.184
HTTP/1.1 200 OK
Date: Tue, 09 Sep 2025 07:06:39 GMT
Server: Apache/2.4.53 (Red Hat Enterprise Linux)
Last-Modified: Tue, 09 Sep 2025 07:03:22 GMT
ETag: "c-63e58e64fab29"
Accept-Ranges: bytes
Content-Length: 6
Content-Type: text/html; charset=UTF-8

2.2.7响应时不显示版本号

a.向apache服务器的主配置文件的末尾添加一行内容ServerTokens Prod(隐藏服务器的详细信息)
[root@apache ~]# echo "ServerTokens Prod" >> /etc/httpd/conf/httpd.conf
b.检测语法并重启httpd
[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd
c.查看
[root@apache ~]# curl -I 192.168.75.184
HTTP/1.1 200 OK
Date: Tue, 09 Sep 2025 07:16:26 GMT
Server: Apache      #此处不显示服务端apache具体版本号信息
Last-Modified: Tue, 09 Sep 2025 07:03:22 GMT
ETag: "c-63e58e64fab29"
Accept-Ranges: bytes
Content-Length: 6
Content-Type: text/html; charset=UTF-8

注意: 添加下面一条命令到配置文件,重启速度会特别快

[root@apache ~]# echo "ServerName 0.0.0.0" >> /etc/httpd/conf/httpd.conf

3.apache配置和使用

3.1常用全局配置

3.1.1修改全局默认页面所在目录和文件名

a.编辑apache主配置文件
[root@apache ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/www"
<directory /www>allowoverride nonerequire all granted
</directory>
<IfModule dir_module>DirectoryIndex index.html index default.html
</IfModule>#<directory /www>   设置 /www 目录的访问权限
#allowoverride none 禁止该目录下的.htaccess文件覆盖主配置
#require all granted 允许所有客户端访问该目录下的内容
#<IfModule dir_module> 当启用目录模块时,定义访问目录时默认加载的页面顺序:
优先加载index.html,如果没有则找index,再没有就用default.html

注意:测试时,我们要从下往上去测试,否则会测试失败,只能看到index.html里面的内容

b.创建/www目录
[root@apache ~]# mkdir /www
c.检测并重启httpd
[root@apache www]# httpd -t
Syntax OK
[root@apache www]# systemctl restart httpd
d.测试
default.html
[root@apache www]# echo "jeams" > /www/default.html
[root@apache ~]# curl  192.168.75.184
jeams
index
[root@apache www]# echo "jeam" > /www/index
[root@apache ~]# curl  192.168.75.184
jeam
index.html
[root@apache www]# echo "jeams6" > /www/index.html
[root@apache ~]# curl  192.168.75.184
jeams6

3.1.2配置监听端口和IP

a.添加监听端口81
[root@apache ~]# echo "listen 0.0.0.0:81" >> /etc/httpd/conf/httpd.conf 
b.检测并重启httpd
[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd
c.查看端口号
[root@apache ~]# ss -lntup | grep httpd
tcp   LISTEN 0      511          0.0.0.0:81         0.0.0.0:*    users:(("httpd",pid=34228,fd=5),("httpd",pid=34227,fd=5),("httpd",pid=34226,fd=5),("httpd",pid=34223,fd=5))
tcp   LISTEN 0      511                *:80               *:*    users:(("httpd",pid=34228,fd=4),("httpd",pid=34227,fd=4),("httpd",pid=34226,fd=4),("httpd",pid=34223,fd=4))
d.测试
[root@apache ~]# curl 192.168.75.184:81
jeams6
e.添加IP地址
[root@apache ~]# ip addr add 192.168.75.185/24 dev eth0
f.检测并重启httpd
[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd
g.查看IP
[root@apache ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:b7:fa:01 brd ff:ff:ff:ff:ff:ffaltname enp3s0altname ens160inet 192.168.75.184/24 brd 192.168.75.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet 192.168.75.185/24 scope global secondary eth0valid_lft forever preferred_lft foreverinet6 fe80::c80e:1840:7e94:5d13/64 scope link noprefixroute valid_lft forever preferred_lft forever
h.测试
[root@apache ~]# curl 192.168.75.185:81
jeams

3.1.3配置文件压缩

启用数据压缩功能能够减少网络IO的数据量,提高服务器的网络吞吐能力,配置文件默认已开启数据压缩

a.查看压缩模块是否已经加载
[root@apache ~]# httpd -M | grep deflatedeflate_module (shared)
b.配置压缩规则
[root@apache ~]# vim /etc/httpd/conf/httpd.conf
<IfModule mod_deflate.c>DeflateCompressionLevel 6AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
</IfModule>#<IfModule mod_deflate.c> 检查服务器是否加载了mod_deflate压缩模块
#DeflateCompressionLevel 6设置压缩级别为6(范围1-9,级别越高压缩率越高,但消耗服务器资源也越多,6是比较平衡的选择)
#AddOutputFilterByType DEFLATE text/html text/plain text/css application/json 指定对哪些类型的文件进行压缩,这里包含了 HTML、纯文本、CSS、JSON 等常见文本类资源
c.检测并重启httpd
[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd
d.测试
查看被压缩前的大小
[root@apache ~]# ll /www/
总用量 2958
-rw-r--r-- 1 root root  389  9月  9 04:06 china
-rw-r--r-- 1 root root  1658  9月  9 04:06 jeams
-rw-r--r-- 1 root root  456  9月  9 04:50 jeams.html
-rw-r--r-- 1 root root  455  9月  9 04:50 ok.html
压缩后的大小
[root@apache ~]# curl --compressed -I 192.168.75.184/jeams.html
HTTP/1.1 200 OK
Date: Tue, 09 Sep 2025 09:05:07 GMT
Server: Apache
Last-Modified: Tue, 09 Sep 2025 08:50:38 GMT
ETag: "4-63e5a65ef230e"
Accept-Ranges: bytes
Content-Length: 350    #被压缩的大小
Content-Type: text/html; charset=UTF-8

3.1.4配置持久连接

持久连接指的是建立连接后,每个资源获取完后不会立即断开连接,而是保持一段时间后断开

a.编辑配置文件
[root@apache ~]# vim /etc/httpd/conf/httpd.conf
KeepAlive on  #开启持久连接
MaxKeepAliveRequests 100  #在一个持久连接内,最多可以累计处理100次请求
KeepAliveTimeout 10  #持久连接保持时间
b.检测并重启
[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd
c.安装测试软件
[root@apache ~]# yum install telnet -y#telnet是一个用于远程登录和测试网络连接的工具,安装后可以用它测试服务器的端口是否开放
d.测试
输入测试内容
[root@apache ~]# echo 666 > /www/jeams.html
[root@apache ~]# echo 888 > /www/ok.html
开始测试
[root@apache ~]# telnet 192.168.75.184 80
Trying 192.168.75.184...
Connected to 192.168.75.184.
Escape character is '^]'.
GET /jeams.html HTTP/1.1    #输入请求行信息
host: 192.168.75.184        #输入请求头信息#这个空格是结束行,必须要敲!!!
HTTP/1.1 200 OK
Date: Tue, 09 Sep 2025 08:58:24 GMT
Server: Apache
Last-Modified: Tue, 09 Sep 2025 08:50:38 GMT
ETag: "4-63e5a65ef230e"
Accept-Ranges: bytes
Content-Length: 4
Content-Type: text/html; charset=UTF-8666
GET /ok.html HTTP/1.1      #在持久连接时间内继续请求
host: 192.168.75.184       #第一个资源请求完成,不会断开,可以继续请求第二个资源#这个空格是结束行,必须要敲!!!
HTTP/1.1 200 OK
Date: Tue, 09 Sep 2025 08:58:29 GMT
Server: Apache
Last-Modified: Tue, 09 Sep 2025 08:50:49 GMT
ETag: "4-63e5a6696acd7"
Accept-Ranges: bytes
Content-Length: 4
Content-Type: text/html; charset=UTF-8888
Connection closed by foreign host.  #时间到达后自动断开

3.1.5定义路径别名

alias指令用于在URL和文件系统之间实现映射,使不在DocumentRoot目录下的内容也能成为项目的一部分

a.编辑配置文件
[root@apache ~]# vim /etc/httpd/conf/httpd.conf 
alias /test /alias/alias-test    
<directory /alias/alias-test>allowoverride nonerequire all granted
</directory> #alias /test /alias/alias-test  定义一个别名,当访问http://服务器地址/test时,Apache会转到/alias/alias-test目录下查找资源
#allowoverride none   禁用该目录的.htaccess文件
#require all granted  允许所有客户端访问该目录下的内容
b.创建目录并输入内容
[root@apache ~]# mkdir -p /alias/alias-test
[root@apache ~]# echo "hello,jeams" > /alias/alias-test/index.html
c.检测并重启
[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd
d.测试
[root@apache ~]# curl 192.168.75.184/test/
hello,jeams

3.2访问资源控制

3.2.1编辑配置文件

[root@apache ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/www"
<directory /www>DirectoryIndex disabled  #禁用默认的索引文件index.htmloptions indexes followsymlinks  #indexes表示显示目录内容列表,followsymlinks表示追踪软链接allowoverride none  #none表示不允许读取.htaccess文件中设置的options值,实践中不要使用.htaccess文件,会降低性能require all granted
</directory>

3.2.2将默认的配置文件不生效并创建软链接

#禁用Apache默认欢迎页面的配置文件
[root@apache ~]# mv /etc/httpd/conf.d/welcome.conf {,.bak}
#创建软链接
[root@apache ~]# ln -s /var/www/html/index.html /www/link.html

3.2.3检测并重启

[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd

3.2.4测试

a.Linux上测试
[root@apache ~]# curl -I 192.168.75.184
HTTP/1.1 200 OK
Date: Wed, 10 Sep 2025 02:13:21 GMT
Server: Apache
Content-Type: text/html;charset=ISO-8859-1
b.Windows上测试

3.2.5控制特定主机访问

a.不允许192.168.75.1主机访问

编辑配置文件

[root@apache ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/www"           #指定Apache的网站根目录为/www
<directory /www> DirectoryIndex disabled #禁用默认首页文件options indexes followsymlinks #在目录下没有默认首页且没有禁用目录索引时会显示目录内文件列表allowoverride none  #禁用该目录下的 .htaccess 文件<requireall>require all granted  #允许所有require not ip 192.168.75.1 #拒绝该主机</requireall>
</directory>

检测并重启

[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd

测试

Linux端:

[root@apache ~]# curl -I 192.168.75.184
HTTP/1.1 200 OK
Date: Wed, 10 Sep 2025 02:14:14 GMT
Server: Apache
Content-Type: text/html;charset=ISO-8859-1

Windows端:

b.允许192.168.75.1主机访问

编辑配置文件

[root@apache ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/www"    #指定Apache网站根目录为/www
<directory /www>DirectoryIndex disabled #禁用默认首页文件options indexes followsymlinks #在目录下没有默认首页且没有禁用目录索引时会显示目录内文件列表allowoverride none  #禁用该目录下的 .htaccess 文件<requireany>require all denied  #拒绝所有require ip 192.168.75.1  #允许该主机访问</requireany>
</directory>

测试重启

[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd

测试

Liunx端:

[root@apache ~]# curl -I 192.168.75.184
HTTP/1.1 403 Forbidden
Date: Wed, 10 Sep 2025 02:15:18 GMT
Server: Apache
Content-Type: text/html; charset=iso-8859-1

Windows端:

3.3访问日志配置

3.3.1编辑配置文件

[root@apache ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/www"
<directory /www>DirectoryIndex disabled #禁用默认首页文件options indexes followsymlinks #在目录下没有默认首页且没有禁用目录索引时会显示目录内文件列表allowoverride none  #禁用该目录下的 .htaccess 文件require all granted #允许所有客户端登录
</directory>
LogFormat "%h %l %u test-format %{user-agent}i" test-format  #配置自定义日志格式
customlog /http-log/access.log test-format  #使用自定义日志

3.3.2创建目录

[root@apache ~]# mkdir /http-log/

3.3.3检测并重启

[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd

3.3.4测试

[root@apache ~]# cat /http-log/access.log 
192.168.75.184 - - test-format curl/7.76.1

3.4虚拟主机配置

apache服务支持在一台物理服务器上配置多个网站,我们可以通过虚拟主机配置来实现该功能

apache服务中配置了虚拟主机,还需要在DNS解析中添加域名解析,将域名指向apache服务器所在的IP地址

DNS解析负责将域名解析到apache服务器上,虚拟主机配置负责区分不同的网站,将不同点分域名与内容分别对应起来

多虚拟主机的实现方式:

基于端口实现:用不同的端口标识不同的虚拟主机

基于IP实现:用不同的IP地址标识不同的虚拟主机

基于域名实现:用不同的域名标识不同的虚拟主机

3.4.1基于端口实现

a.编辑配置文件
[root@apache ~]# vim /etc/httpd/conf.d/port.conf 
<Directory /virtualhost>
Allowoverride none           #禁用该目录下.htaccess文件的作用
Require all granted          #允许所有客户端访问该目录
</Directory>
<VirtualHost 192.168.75.185:80>
DocumentRoot /virtualhost/port/80    #存放网页文件的路径
ServerName 192.168.75.185            #绑定的IP
</VirtualHost>
Listen 888
<VirtualHost 192.168.75.185:888>
DocumentRoot /virtualhost/port/888   #存放网页文件的路径
ServerName 192.168.75.185            #绑定的IP
</VirtualHost>
b.创建目录并往不同端口里面写内容
[root@apache ~]# mkdir -p /virtualhost/port/{80,888}
[root@apache ~]# echo "I like you" > /virtualhost/port/80/index.html
[root@apache ~]# echo "you is my girl" > /virtualhost/port/888/index.html
c.创建临时IP
[root@apache ~]# ip addr add 192.168.75.185/24 dev eth0
[root@apache ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:b7:fa:01 brd ff:ff:ff:ff:ff:ffaltname enp3s0altname ens160inet 192.168.75.184/24 brd 192.168.75.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet 192.168.75.185/24 scope global secondary eth0valid_lft forever preferred_lft foreverinet6 fe80::c80e:1840:7e94:5d13/64 scope link noprefixroute valid_lft forever preferred_lft forever
d.检测并重启
[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd
e.测试
80端口

888端口

3.4.2基于IP实现

a.编辑配置文件
[root@apache ~]# vim /etc/httpd/conf.d/ip.conf 
<Directory /virtualhost>Allowoverride none           #禁用该目录下.htaccess文件的作用Require all granted          #允许所有客户端访问该目录
</Directory>
<VirtualHost 192.168.75.186:80>
DocumentRoot /virtualhost/ip/186   #存放该IP对应的网页文件
ServerName 192.168.75.186          #绑定的IP
</VirtualHost>
<VirtualHost 192.168.75.187:80>
DocumentRoot /virtualhost/ip/187   #存放该IP对应的网页文件
ServerName 192.168.75.187          #绑定的IP
</VirtualHost>
b.创建目录并编写内容到文件里
[root@apache ~]# mkdir -p /virtualhost/ip/{186,187}
[root@apache ~]# echo "jeams 192.168.75.186" > /virtualhost/ip/186/index.html
[root@apache ~]# echo "jeams 192.168.75.187" > /virtualhost/ip/187/index.html
c.添加临时IP
[root@apache ~]# ip addr add 192.168.75.186/24 dev eth0
[root@apache ~]# ip addr add 192.168.75.187/24 dev eth0
[root@apache ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:b7:fa:01 brd ff:ff:ff:ff:ff:ffaltname enp3s0altname ens160inet 192.168.75.184/24 brd 192.168.75.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet 192.168.75.185/24 scope global secondary eth0valid_lft forever preferred_lft foreverinet 192.168.75.186/24 scope global secondary eth0valid_lft forever preferred_lft foreverinet 192.168.75.187/24 scope global secondary eth0valid_lft forever preferred_lft foreverinet6 fe80::c80e:1840:7e94:5d13/64 scope link noprefixroute valid_lft forever preferred_lft forever
d.检测并重启
[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd
e.测试
Linux端:

192.168.75.186

[root@apache ~]# curl 192.168.75.186
jeams 192.168.75.186

192.168.75.187

[root@apache ~]# curl 192.168.75.187
jeams 192.168.75.187
Windows端:

192.168.75.186

192.168.75.187:

3.4.3基于域名实现

a.编辑配置文件
[root@apache ~]# vim /etc/httpd/conf.d/name.conf 
<Directory /virtualhost>Allowoverride none           #禁用该目录下.htaccess文件的作用Require all granted          #允许所有客户端访问该目录
</Directory>
<VirtualHost 192.168.75.184:80>
DocumentRoot /virtualhost/king #存放该域名对应的网页文件
ServerName www.king.com        #域名为www.king.com
</VirtualHost>
<VirtualHost 192.168.75.184:80>
DocumentRoot /virtualhost/jeams#存放该域名对应的网页文件
ServerName www.jeams.org       #域名为www.jeams.org
ServerAlias haha.jeams.org     #别名为haha.jeams.org
</VirtualHost>
b.创建目录并写入文本
[root@apache ~]# mkdir -p /virtualhost/{king,jeams}
[root@apache ~]# echo www.king.com > /virtualhost/king/index.html
[root@apache ~]# echo www.jeams.org > /virtualhost/jeams/index.html
c.检测并重启
[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd
d.域名解析
[root@apache ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.75.184    apache www.king.com www.jeams.org haha.jeams.org
e.测试
Linux端
www.king.com
[root@apache ~]# curl www.king.com
www.king.com
www.jeams.org
[root@apache ~]# curl www.jeams.org
www.jeams.org
haha.jeams.org
[root@apache ~]# curl haha.jeams.org
www.jeams.org
Windows端
编辑Windows域名解析本地配置文件路径
C:\Windows\System32\drivers\etc\hosts
添加以下内容到hosts文件
 192.168.75.184   www.king.com  www.jeams.org haha.jeams.org
www.king.com

www.jeams.org

haha.jeams.org

3.5错误页面配置

3.5.1编辑配置文件

[root@apache ~]# vim /etc/httpd/conf/httpd.conf
errordocument 403 "<h1>sorry!</h1>permission denied\n"
errordocument 404 "<h1>sorry!</h1>your page not found\n"

3.5.2检测并重启

[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd

3.5.3测试(本次测试基于域名实现的配置文件上改)

a.出现403(设置黑名单,开启SELinux,将数据给备份或者改名)
设置黑名单
[root@apache ~]# vim /etc/httpd/conf.d/name.conf 
<Directory /virtualhost/king>Allowoverride none<requireall>require all granted         #允许所有require not ip 192.168.75.1 #拒绝该主机</requireall>
</Directory>
<VirtualHost 192.168.75.184:80>
DocumentRoot /virtualhost/king
ServerName www.king.com
</VirtualHost>
<VirtualHost 192.168.75.184:80>
DocumentRoot /virtualhost/jeams
ServerName www.jeams.org
ServerAlias haha.jeams.org
</VirtualHost>
检测并重启
[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd
Windows上查看结果

win+r:运行对话框

浏览器查看

开启SELinux
[root@apache ~]# vim /etc/selinux/config 
SELINUX=enforcing
Windows端浏览器查看

将数据给备份或改名
[root@apache ~]# mv /etc/httpd/conf.d/name.conf /etc/httpd/conf.d/name
Windows端浏览器查看

b.出现404(没有这个文件)
[root@apache ~]# curl 192.168.75.184/jeams6
<h1>sorry!</h1>your page not found

3.6访问验证配置

3.6.1编辑配置文件

[root@apache ~]# vim /etc/httpd/conf.d/auth.conf
<VirtualHost 192.168.75.188:80>
servername 192.168.75.188          #绑定的IP
documentroot /virtualhost/auth     #网站的根目录
errordocument 401 /noauth.html     #当出现401未授权错误时,转到/noauth.html
</VirtualHost>
<Directory /virtualhost/auth>
authtype basic                     #使用HTTP基本认证
authname "please login:"           #认证信息弹出
authuserfile /etc/httpd/auth-password #引用之前创建的密码文件
require user jeams xiaoming        #仅允许指定用户(jeams和xiaoming)访问
</Directory>
alias /noauth.html /virtualhost/auth/prompt.html    #当出现401自动调转到prompt.html[root@apache ~]# vim  /virtualhost/auth/prompt.html
please enter passwd!!!

3.6.2添加临时IP

[root@apache ~]# ip a a 192.168.75.188/24 dev eth0 

3.6.3创建目录并写入内容

[root@apache ~]# mkdir /virtualhost/auth
[root@apache ~]# echo jeams > /virtualhost/auth/index.html

3.6.4设置密码

#-c表示创建新的密码文件(如果该文件已经存在,会被覆盖,所以第二次执行的时候不用加-c)
[root@apache ~]# htpasswd -c /etc/httpd/auth-password jeams
New password: 
Re-type new password: 
Adding password for user jeams
[root@apache ~]# htpasswd  /etc/httpd/auth-password xiaoming
New password: 
Re-type new password: 
Adding password for user xiaoming

3.6.5查看密码文件

[root@apache ~]# cat /etc/httpd/auth-password 
jeams:$apr1$695OAFmJ$iQ3m4RpvxwvD3UmzpBFlM/
xiaoming:$apr1$q0X9wH09$jtfTvyWCTDeyNp.VcZRG90

3.6.6检测并重启

[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd

3.6.7测试

a.无指定用户直接测试
[root@apache ~]# curl 192.168.75.188
please enter passwd ! ! ![root@apache ~]# curl -I  192.168.75.188
HTTP/1.1 401 Unauthorized
Date: Wed, 10 Sep 2025 10:26:34 GMT
Server: Apache
WWW-Authenticate: Basic realm="please login:"
Last-Modified: Wed, 10 Sep 2025 07:37:33 GMT
ETag: "1a-63e6d7e6391fd"
Accept-Ranges: bytes
Content-Length: 26
Content-Type: text/html; charset=UTF-8
b.指定用户测试
第一种方法
#-u 指定用户登录
[root@apache ~]# curl -u jeams 192.168.75.188
Enter host password for user 'jeams':
jeams
第二种方法
#自动将认证信息以HTTP基本认证的方式发送给服务器,无需手动输入
[root@apache ~]# curl http://xiaoming:123@192.168.75.188
jeams#xiaoming:123 表示使用用户名xiaoming和密码123进行身份验证
#@192.168.75.188 表示要访问的服务器地址(即你配置了身份验证的虚拟主机)

c.Windows端(输入http://xiaoming:123@192.168.75.188)

4.apache实现https网站

4.1安装软件

#安装Apache的SSL模块
[root@apache ~]# yum install mod_ssl -y
#检测Apache是否加载了SSL模块
[root@apache ~]# httpd -M | grep sslssl_module (shared)

4.2编辑文件

[root@apache ~]# vim /etc/httpd/conf.d/https.conf
<virtualhost 192.168.75.189:443>
SSLEngine on              #启用SSL加密功能
#指定SSL证书和私钥文件(之前生成的自签名证书)
SSLCertificateFile /etc/httpd/certs/https.crt #公钥证书 
SSLCertificateKeyFile /etc/httpd/certs/https.key #私钥证书
DocumentRoot /virtualhost/https
ServerName 192.168.75.189       #网站根目录
<directory /virtualhost/https>  #绑定的IP
DirectoryIndex index.html       #默认首页文件
allowoverride none              #禁用.htaccess
require all granted             #允许所有客户端访问
</directory>
</virtualhost>

4.3添加临时IP

[root@apache ~]# ip addr add 192.168.75.189/24 dev eth0

4.4创建目录用于存放SSL证书

[root@apache ~]# mkdir /etc/httpd/certs

4.5生成SSL证书

4.5.1生成一个RSA私钥文件,用于加密和解密SSL通信

[root@apache ~]# openssl  genrsa  > /etc/httpd/certs/https.key

4.5.2基于RSA私钥文件创建一个自签名SSL证书

[root@apache ~]# openssl  req  -utf8  -new  -key /etc/httpd/certs/https.key -x509  -days  365  -out /etc/httpd/certs/https.crt-utf8:支持UTF-8字符输入(如中文单位/地区信息)
-new:生成新的证书请求
-x509:直接生成自签名证书(而非证书请求文件)
-days 365:证书有效期为365天
-out:指定输出的证书文件路径

注意:输入这条命令会叫你填写国家代码,省份,地区,公司,部门,域名,邮箱

4.5.3创建目录并编写内容

[root@apache ~]# mkdir /virtualhost/https/ -p
[root@apache ~]# echo "jeams,this is for you" > /virtualhost/https/index.html 

4.5.4检测并重启

[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd

4.5.5测试

Linux测试
#-k 标识忽略SSL证书验证(因为你使用的是自签名证书,不被系统默认信任)
[root@apache ~]# curl -k https://192.168.75.189/index.html
jeams,this is for you
Windows测试

注意:因为是自己做的证书,浏览器会提醒你不安全,你点击高级并继续访问即可看到测试内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96784.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96784.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/96784.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jajajajajajajava

线程1 线程概念进程:进程指正在内存中运行的程序。进程具有一定的独立性。线程:线程是进程中的一个执行单元。负责当前进程中程序的执行。一个进程中至少有一个线程。如果一个进程中有多个线程&#xff0c;称之为多线程程序。java中的线程采用的是抢占式调度&#xff0c;如果线…

虚拟机CentOS里JDK的安装与环境配置

---本文以JDK17为例---步骤 1&#xff1a;进入/tmp临时目录# 进入临时目录 cd /tmp步骤 2&#xff1a;下载 Java 17 安装包wget https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.9%2B9/OpenJDK17U-jdk_x64_linux_hotspot_17.0.9_9.tar.gz步骤 3&am…

mybatis-plus多租户兼容多字段租户标识

默认租户插件处理器的缺陷 在springboot工程中引入mybatis-plus的租户插件TenantLineInnerInterceptor&#xff0c;能简化我们的数据隔离操作&#xff0c;例如各类含租户用户登录权限的rest接口中&#xff0c;不需要再根据登录用户-set租户条件-触发查询&#xff0c;租户插件能…

HBase高级特性(布隆过滤器和协处理器)、列族设计、rowkey设计以及热点问题处理

在阐述HBase高级特性和热点问题处理前&#xff0c;首先回顾一下HBase的特点&#xff1a;分布式、列存储、支持实时读写、存储的数据类型都是字节数组byte[]&#xff0c;主要用来处理结构化和半结构化数据&#xff0c;底层数据存储基于hdfs。 同时&#xff0c;HBase和传统数据库…

redis sentinel 与 clauster 的区别

Redis Sentinel(哨兵)和Redis Cluster(集群)是Redis提供的两种不同的高可用和扩展性解决方案,它们的设计目标和适用场景有显著区别: 1. 核心功能与目标 Redis Sentinel 主要解决主从架构的高可用问题,实现自动故障转移 监控主从节点状态,当主节点故障时自动将从节点提…

MySQL数据库中快速导入大数据sql

1.PwerShell命令页面导入全表数据库 -P3310 指定数据库端口号Get-Content "本地sql文件目录" | .\mysql -u root -p -P 33102.PwerShell命令页面导入单表到数据库 -P3310 指定数据库端口号Get-Content "本地sql文件目录" | .\mysql -u root -p -P 3310 数…

消息类型proto的编写和生成

消息类型proto的编写和生成 代码如下&#xff1a; syntax"proto3"; package xypmq;enum ExchangeType {UNKNOWNTYPE0;DIRECT1;FANOUT2;TOPIC3; };enum DeliveryMode {UNKNOWNMODE0;UNDURABLE1;DURABLE2; };message BasicProperties {string id1;DeliveryMode deliver…

Vuetify:构建优雅Vue应用的Material Design组件库

Vuetify是一个基于Material Design设计规范的Vue.js UI组件库&#xff0c;它提供了80多个精心设计的组件&#xff0c;帮助开发者快速构建美观且功能丰富的企业级应用。核心特性1. 完整的Material Design实现// 所有组件遵循Material Design规范 <v-btn color"primary&q…

SpringBoot 注解深剖:@RequestParam 与 @RequestBody 的终极对决,90% 的开发者都踩过这些坑!

在 SpringBoot 开发中&#xff0c;处理 HTTP 请求参数是我们每天都要面对的工作。而RequestParam和RequestBody这两个注解&#xff0c;就像是我们手中的两把利剑&#xff0c;既能高效解决问题&#xff0c;用不好也可能 "误伤" 自己。作为一名资深 Java 开发者&#x…

【Docker】P2 Docker环境构建准备:MacOS 与 Linux

目录操作系统与 Docker 的兼容性分析Docker 技术本质MacOS 环境下的 Docker 构建1. 安装前准备2. Docker Desktop安装3. 镜像加速配置高级操作&#xff1a;文件共享配置Linux 环境下的 Docker 构建卸载历史版本配置软件源Docker 核心组件安装系统服务配置镜像加速器配置应用配置…

OpenCV 发票识别全流程:透视变换与轮廓检测详解

目录 前言 一、核心技术原理&#xff1a;透视变换与轮廓检测 1. 透视变换&#xff1a;让倾斜发票 “正过来” &#xff08;1&#xff09;什么是透视变换&#xff1f; &#xff08;2&#xff09;透视变换的 5 个关键步骤 2. 轮廓检测&#xff1a;精准定位发票区域 &#x…

并发:使用volatile和不可变性实现线程安全

《Java并发编程实战》中的VolatileCachedFactorizer展示了如何使用volatile和不可变性来实现线程安全。解决了简单缓存实现中可能出现的线程安全问题&#xff0c;同时避免了全量同步带来的性能开销。 场景背景 假设有一个服务&#xff08;如因数分解服务&#xff09;&#xff0…

Linux x86 stability和coredump

1 POSIX pthread_create原理 1&#xff09;fork()、pthread_create()、vfork()对应的系统调用分别是sys_fork()、sys_clone()、sys_vfork()&#xff0c;它们在内核中都是通过do_fork()实现的。 2&#xff09;系统中所有的进程都组织在init_task.tasks链表下面&#xff0c;每个进…

【PyTorch】多对象分割

对象分割任务的目标是找到图像中目标对象的边界。实际应用例如自动驾驶汽车和医学成像分析。这里将使用PyTorch开发一个深度学习模型来完成多对象分割任务。多对象分割的主要目标是自动勾勒出图像中多个目标对象的边界。 对象的边界通常由与图像大小相同的分割掩码定义&#xf…

RabbitMQ---面试题

总结我们所学内容&#xff0c;这里推荐博客进行复习 RabbitMQ---面试题_rabbitmq常问面试题-CSDN博客

MasterGo自动布局(Auto Layout)

自动布局是用来表示 子元素与子元素之间互相影响的一种排版方式,是一种响应式布局技术。一般是将所有元素设计完成后再使用自动布局进行设置。 自动布局就是响应式布局,就是在不同尺寸的手机上宽度不同都应该怎么展示。 一般页面的一级元素使用约束进行相对定位,二级元素及里…

还在重启应用改 Topic?Spring Boot 动态 Kafka 消费的“终极形态”

场景描述&#xff1a; 你的一个微服务正在稳定地消费 Kafka 的 order_topic。现在&#xff0c;上游系统为了做业务隔离&#xff0c;新增加了一个 order_topic_vip&#xff0c;并开始向其中投递 VIP 用户的订单。你需要在不重启、不发布新版本的情况下&#xff0c;让你现有的消费…

使用vllm部署neo4j的text2cypher-gemma-2-9b-it-finetuned-2024v1模型

使用vllm部署neo4j的text2cypher-gemma-2-9b-it-finetuned-2024v1模型 系统环境准备 由于使用的基于 nvcr.io/nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04 的 workbench,需要进行以下准备(其他系统环境可忽略) ldconfig -p | grep libcudnn 找到 libcudnn 的so库,然…

Coze源码分析-资源库-创建知识库-前端源码-核心组件

概述 本文深入分析Coze Studio中用户创建知识库功能的前端实现。该功能允许用户在资源库中创建、编辑和管理知识库资源&#xff0c;为开发者提供了强大的知识管理和数据处理能力。通过对源码的详细解析&#xff0c;我们将了解从资源库入口到知识库配置弹窗的完整架构设计、组件…

基于时空数据的网约车订单需求预测与调度优化

一、引言随着共享出行行业的蓬勃发展&#xff0c;网约车已成为城市交通的重要组成部分。如何精准预测订单需求并优化车辆调度&#xff0c;是提升平台运营效率、改善用户体验的关键。本文提出一种基于时空数据的网约车订单需求预测与调度优化方案&#xff0c;通过网格化城市空间…