RedHat9 | Web服务配置与管理(Apache)

news2024/10/7 20:28:06

一、实验环境

1、Apache服务介绍

Apache服务,也称为Apache HTTP Server,是一个功能强大且广泛使用的Web服务器软件。

起源和背景

  • Apache起源于NCSA httpd服务器,经过多次修改和发展,逐渐成为世界上最流行的Web服务器软件之一。
  • 名字“Apache”源自“a patchy server”的读音,意味着它是一个充满补丁的服务器,这反映了其作为自由软件,不断有人为其开发新功能、新特性和修复缺陷的特点。

特点和优势

  • 简单、速度快、性能稳定:Apache服务器设计简洁,处理请求速度快,且性能稳定可靠。
  • 跨平台性:Apache可以运行在几乎所有的Unix、Windows、Linux等系统平台上,具有高度的可移植性。
  • 源代码开放:Apache是开放源码项目,拥有庞大的开发者社区和广泛的用户基础。
  • 模块化设计:Apache是一个模块化的服务器,可以根据需要加载不同的模块来扩展其功能。
  • 安全性:支持SSL技术,提供安全的Web服务。

主要特性

  • 支持最新的HTTP/1.1通信协议。
  • 拥有简单而强有力的基于文件的配置过程。
  • 支持通用网关接口(CGI)。
  • 支持基于IP和基于域名的虚拟主机。
  • 支持多种方式的HTTP认证。
  • 集成Perl、Python等处理模块。
  • 支持实时监视服务器状态和定制服务器日志。
  • 提供用户会话过程的跟踪。
  • 支持FastCGI和JavaServlets(通过第三方模块)。

2、Nginx服务介绍

Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,由C语言编写。

主要特点

  1. 轻量级:Nginx设计简洁,占用内存少,能在相同的硬件条件下提供更高的服务能力。
  2. 高性能:Nginx通过其事件驱动、异步非阻塞的架构设计,能够高效地处理大量并发连接,对于静态文件请求效率极高。使用epoll(Linux平台)或kqueue(类BSD系统)等高效的I/O多路复用技术来监听和管理连接。
  3. 进程模型:采用“主从”多进程模式,其中master进程负责管理和配置更新,而worker进程负责实际的请求处理,这种设计支持热部署和故障恢复。

优势

  1. 并发性能:Nginx在处理大量并发连接时表现出色,特别是在静态内容处理方面。据称,Nginx可以支持对5万个并发连接数的响应,而只占用很低的内存资源。
  2. 稳定性:Nginx采用了分阶段资源分配技术,使得CPU与内存的占用率非常低。Nginx官方表示,Nginx保持1万个没有活动的连接,而这些连接只占用2.5MB内存。
  3. 高可用性:Nginx支持热部署,启动速度特别迅速,因此可以在不间断服务的情况下,对软件版本或者配置进行升级,几乎可以做到7x24小时不间断地运行。

3、Apache和Nginx的区别

Nginx和Apache各有其独特的特点和优势,适用于不同的场景和需求。在选择Web服务器时,需要根据自己的业务需求、硬件条件以及团队技术栈等因素进行综合考虑。

3.1 设计理念

1、Nginx

  • 专注于高性能、高并发和轻量级。

  • 采用事件驱动、异步非阻塞的架构设计。

  • 适用于处理静态资源、反向代理和负载均衡等场景。

2、Apache

  • 强调稳定性、功能和安全性。
  • 采用进程或线程模型。
  • 适用于处理动态内容和复杂的Web应用程序。
3.2 适用场景

1、Nginx

  • 适用于需要高性能、高并发的场景,如大型门户网站、视频流媒体等。
  • 适合作为反向代理和负载均衡器,为后端服务器集群提供前端服务。
  • 适合处理静态资源,如图片、CSS、JavaScript等。

2、Apache

  • 适用于需要稳定性和强大功能的场景,如中小型网站、企业内部网站等。

  • 适合处理动态内容和复杂的Web应用程序。

  • 适用于需要多种语言支持的场景,如Perl、Python等。

3.3 性能特点

1、Nginx

  • 高并发性能:通过其事件驱动的设计,Nginx能够高效地处理大量并发连接,尤其是静态文件请求。

  • 低内存消耗:Nginx的代码量小,内存占用低,能在资源受限的系统中运行。

  • 可扩展性:支持第三方模块扩展,可以根据需要添加新的功能和服务。

  • 热部署:支持在不停止服务的情况下进行软件升级、配置更改和日志轮转等操作。

2、Apache

  • 稳定性:经过长时间的发展和优化,Apache具有出色的稳定性。
  • 模块化设计:Apache是模块化的服务器,可以根据需要加载不同的模块来扩展其功能。
  • 动态内容处理:对动态请求处理能力强,支持多种编程语言如Perl、Python等。

4、传输层安全性TLS

TLS是一种安全协议,它建立在网络层之上,位于传输层(TCP/IP四层模型的传输层)和应用层之间。TLS的主要目的是在两个通信应用程序之间提供保密性、数据完整性以及真实性。TLS的前身是安全套接层(Secure Sockets Layer,SSL)。网景公司(Netscape)在1994年推出首版网页浏览器时,推出HTTPS协议,以SSL进行加密。后来,互联网工程任务组(IETF)将SSL进行标准化,并于1999年公布第一版TLS标准文件。

OpenSSL是一个强大的安全套接字层密码库,包含了一个多用途的命令行工具,用于实现秘钥证书管理、对称加密、非对称加密等功能。它广泛用于保护计算机网络上的通信免遭窃听,同时确认另一端连接者的身份。OpenSSL是SSL和TLS协议的开源实现,支持多种平台,包括Unix/Linux、Windows、Mac OS等。

工作原理

  • 客户端向服务器发送一个包含客户端支持的TLS版本、加密算法和散列算法等信息的“Client Hello”消息。
  • 服务器响应一个“Server Hello”消息,包含服务器选择的TLS版本、加密算法和散列算法等信息,并发送其数字证书。
  • 客户端验证服务器的证书,并生成一个预主密钥(pre-master secret),使用服务器的公钥加密后发送给服务器。
  • 服务器使用自己的私钥解密预主密钥,双方基于预主密钥和随机数生成会话密钥(session key)。
  • 双方使用会话密钥加密和解密通信数据,确保数据的机密性和完整性。

在创建完证书请求后,会生成多个文件

  • /etc/pki/tls/private/xxx.key:证书私钥,私钥应保持在0600或0400权限。
  • /etc/pki/tls/certs/xxx.csr:证书请求,将此文件发送给CA以进行签名
  • /etc/pki/tls/certs/xxx.crt:公共证书,将证书请求发送到CA后返回的证书文件,权限应该保持0644

5、实验拓扑

标识Web服务器分公司1分公司2
IP地址192.168.110.1/24192.168.110.10/24192.168.120.10/24
软件包httpd.x86_64
账户信息root@Serverroot@company1root@company2

主要配置信息

  • 服务端软件包: httpd.x86_64
  • 主配置文件:/etc/httpd/conf/httpd.conf
  • 服务名:httpd.service
  • 端口号:TCP/80、TCP/443

在这里插入图片描述

二、Apache服务配置信息

1、主配置书写格式

查看主配置文件

cat /etc/httpd/conf/httpd.conf

在Apache中的配置文件共分为三种类型:

  1. 全局配置(在整个服务器生效)

  2. 块级配置(仅在当前块内生效)

  3. 虚拟主机配置

Apache语句的书写格式

  • 键值对方式
Listen 80			# Listen为键,80为值
  • 块级分割,内部为键值对方式
<Directory />                # 通过双标签形式划分块(类似HTML格式)
   AllowOverride none        # AllowOverride为键,none为值
   Require all denied
</Directory>

2、 配置文件内容解析

Listen键值的设置,Listen只能设置1个,否则会出错;Listen的值如果设置为IP地址,则必须加上端口号

Listen 80								# 监听任意IP地址的80端口(包含IPv4和IPv6)
Listen 192.168.110.1:80					# 监听192.168.110.1主机上的80端口
Listen 192.168.110.1:8080				# 监听192.168.110.1主机上的8080端口
Listen 0.0.0.0:80						# 监听任意IPv4地址上的80端口
Listen [::0]:80							# 监听任意IPv6地址上的80端口
Listen [2001:db8::2]:80					# 监听IPv6地址2001:db8::2主机上的80端口

**ServerRoot键值的设置,路径最后不要加上 / **

ServerRoot "/etc/httpd"					# 指定Apache配置文件、日志文件存放的地方

Include键值的设置

Include conf.modules.d/*.conf			# 将conf.modules.d目录下的 .conf文件内容引入到主配置文件中,类似主配置文件的子配置文件

User和Group键值的设置

User apache								# 指定Apache守护进程使用的用户
Group apache							# 指定Apache守护进程使用的用户组

ServerAdmin键值的设置

ServerAdmin root@localhost				# 指定管理员邮箱,出现错误时,会发送邮件告知管理员

DocumentRoot键值的设置

DocumentRoot "/var/www/html"			# 设置主目录的路径

EnableSendfile键值的设置

EnableSendfile on 						# 使用操作系统的内核的sendfile支持来发送文件给客户端

ErrorLog和LogLevel键值的设置

ErrorLog "logs/error_log"				# 错误日志的存储位置
LogLevel warn							# 日志的级别

AddDefaultCharset键值的设置

AddDefaultCharset UTF-8					# 设置默认字符集
AddDefaultCharset Off					# 禁用字符集

ServerName键值的设置

ServerName www.meaauf.com:80			# 设置服务器主机名称(如果该域名存在)
ServerName 192.168.10.1:80				# 不存在域名,可使用IP地址+端口号方式

Timeout键值的设置

Timeout 300								# 设置超时时间为300,默认为120,超过时间仍无法连接的则按断线处理

MaxClients键值的设置

MaxClietns 500							# 设置客户最大连接数

3、 目录权限设置

在Apache中,通过双标签形式定义目录:其中权限语句仅对该目录及其子目录生效

<Directory "/var/www">
    权限语句...
</Directory>

权限语句

【.hataccess】文件需要用户手动创建,文件书写权限语句

AllowOverride None						# 不使用本目录下的文件.htaccess
Require all granted						# 允许访问本目录,建议目录都加上此权限,否则无法访问
Require all denied						# 不允许访问本目录
Deny from 192.168.110.10				# 不允许192.168.110.10主机访问
Deny from .meaauf.com					# 不允许meaauf.com域主机访问
Deny from 192.168.110.0/24				# 不允许192.168.110.0/24网段主机访问
Order allow,deny						# 默认情况下禁止所有客户端访问,且设置允许与拒绝权限的优先级

关于Order语句的设置

  • Order allow,deny:默认情况下拒绝所有客户端访问,如果匹配Allow字段又匹配Deny字段,则会生效Deny
  • Order deny,allow:默认情况下允许所有客户端访问,如果匹配Allow字段又匹配Deny字段,则会生效Allow

具体使用示例

允许所有客户端访问

Order allow,deny
Allow from all

拒绝192.168.110.10和来自meaau.com域的客户端访问,其它客户端可以正常访问

Order deny,allow
Deny from 192.168.110.10
Deny .meaauf.com

仅允许192.168.110.0/24网段的客户端访问,其中的192.168.110.10无法访问

Order allow,deny
Allow from 192.168.110.0/24
Deny from 192.168.110.10

4、文件访问权限设置

在Apache中,通过双标签形式定义文件权限:其中权限语句仅对匹配的文件生效

以下的定义将拒绝访问文件:【.htaccess】和【.htpasswd】

<Files ".ht*">							# 匹配文件名以`.ht`开头的,任意字符结尾的文件
    Require all denied					# 拒绝访问
</Files>

三、安装Apache服务

搜索Apache软件包

dnf search apache

在这里插入图片描述

安装httpd服务

dnf -y install httpd.x86_64

查看httpd的服务名

rpm -ql httpd | grep service

在这里插入图片描述

启动httpd服务

systemctl enable --now httpd.service

调整防火墙规则

firewall-cmd --add-service=http --permanent
firewall-cmd --reload

在这里插入图片描述

新建索引文件

echo Default Page. > /var/www/html/index.html

修改主配置文件,在主配置文件文件中添加一行

ServerName 192.168.110.1:80

在这里插入图片描述

客户端测试访问
在这里插入图片描述

四、虚拟主机的配置

在Web服务器上,除了默认站点外的其他站点都称为虚拟主机

1、基于IP地址的虚拟主机

将多个网站绑定在不同的IP地址上,访问服务器上不同的IP地址,就可以看到不同的网站。

新建子配置文件,不直接修改主配置文件,方便后续管理

vim /etc/httpd/conf.d/vhost_ip.conf

添加虚拟主机配置信息

<VirtualHost 192.168.120.1>
  DocumentRoot /var/www/ip
  ServerName 192.168.120.1:80
</VirtualHost>

<Directory /var/www/ip>
  Require all granted
  AllowOverride None
</Directory>

新建目录和索引文件

mkdir /var/www/ip
echo Virtual host based on IP address. > /var/www/ip/index.html

重新启动httpd服务

systemctl restart httpd.service

在这里插入图片描述

2、基于域名的虚拟主机

将多个网站绑定在不同的域名上,访问不同的域名,就可以看到不同的网站。

新建子配置文件,不直接修改主配置文件,方便后续管理

vim /etc/httpd/conf.d/vhost_domain.conf

添加虚拟主机配置信息

需要先给默认主页定义一个虚拟主机,否则www.meaauf.com解析后会解析为192.168.110.1,页面被转到默认主页去了

<VirtualHost 192.168.110.1>					# 给默认主页定义虚拟主机
    DocumentRoot /var/www/html
    ServerName 192.168.110.1:80
</VirtualHost>

<VirtualHost 192.168.110.1>					# 然后再给域名定义虚拟主机
    DocumentRoot /var/www/domain
    ServerName www.meaauf.com:80
</VirtualHost>

<Directory /var/www/domain>
    AllowOverride None
    Require all granted
</Directory>

新建目录和索引文件

mkdir /var/www/domain
echo Domain based virtual hosting. > /var/www/domain/index.html

重新启动httpd服务

systemctl restart httpd.service

客户端访问时需要在本机的hosts文件中添加DNS解析

echo 192.168.110.1  www.meaauf.com  >> /etc/hosts

在这里插入图片描述

3、 基于端口号的虚拟主机

通过给同一个IP地址定义不同的端口号,可以实现不同网站的访问。

新建子配置文件,不直接修改主配置文件,方便后续管理

vim /etc/httpd/conf.d/vhost_port.conf

添加虚拟主机配置信息

Listen 8080
<VirtualHost 192.168.110.1:8080>
    DocumentRoot /var/www/port
    ServerName 192.168.110.1:8080
</VirtualHost>

<Directory /var/www/port>
    AllowOverride None
    Require all granted
</Directory>

新建目录和索引文件

mkdir /var/www/port
echo Virtual host based on port number. > /var/www/port/index.html

重新启动httpd服务

systemctl restart httpd.service

可以看到无法通过8080端口访问HTTP
在这里插入图片描述

查看Web服务器上的httpd服务的监听端口,查看是否存在8080端口

netstat -tulnp | grep httpd

在这里插入图片描述

查看当前防火墙的放行规则,虽然放行了http服务,但是http服务对应端口为标准的80,而非我们自定义的8080,还需要放行TCP8080端口

firewall-cmd --list-all

在这里插入图片描述

防火墙放行TCP8080端口

firewalld-cmd --add-port=8080/tcp --permanent
firewalld-cmd --reload

在这里插入图片描述

客户端再次访问
在这里插入图片描述

五、用户身份认证

1、.htaccess文件

【.htaccess】文件是一个访问控制文件,用来配置相应目录的访问。按照默认的配置,是不会读取目录下的【.htaccess】文件,因为默认在权限语句中设置为:

AllowOverride none

如果要读取【.htaccess】文件,则需要将值修改为:

AllowOverride AuthConfig

这样就可以读取【.htaccess】文件,可以采用其他的文件名,但是需要修改主配置文件实现。

<Files ".ht*">
    Require all denied
</Files>

2、用户身份认证

在Apache中可以采用“整体存取控制”或者“分布式存取控制“来实现用户身份验证。htpasswd命令是Apache的Web服务器内置工具,用于创建和更新储存用户名、域和用户基本认证的密码文件。

常用参数

参数作用
-c创建一个加密文件
-m采用MD5算法对密码进行加密
-d采用CRYPT算法对密码进行加密
-p不对密码进行加密,明文显示
-s采用SHA算法对密码进行加密
-D删除指定的用户
-b同时输入用户名和密码,非交互式

【明文创建方式】创建访问用户webuser1,密码为redhat,加密方式为MD5

htpasswd -cmb /var/www/htpasswd webuser1 redhat

在这里插入图片描述

【交互式创建方式】创建访问用户webuser2,密码为redhat,加密方式为明文,在原有文件上添加用户无需加-c

htpasswd -p /var/www/htpasswd webuser2

在这里插入图片描述

修改上述虚拟主机的配置文件

vim /etc/httpd/conf.d/vhost_port.conf

修改为以下内容,增加用户认证

Require的值也可以书写为:【Require user webuser1,webuser2 代表允许访问的用户为webuser1、webuser2】

Listen 8080
<VirtualHost 192.168.110.1:8080>
    DocumentRoot /var/www/port
    ServerName 192.168.110.1:8080
</VirtualHost>

<Directory /var/www/port>			
    AuthName "Please input your password."			# 弹出的认证对话框中的领域名称
    AuthType Basic									# 指定认证类型为HTTP基本认证
    AuthUserFile /var/www/htpasswd					# 指定包含用户名和密码的文件路径(需要保证apache用户有权访问)
    Require valid-user								# 只有在htpasswd中列出的用户才有权访问
</Directory>

也可以将权限语句写到本地的.htaccess文件中

vim /var/www/port/.htaccess

# 写入下列内容
AuthName "Please input your password."			
AuthType Basic								
AuthUserFile /var/www/htpasswd					
Require valid-user

# 然后修改虚拟主机配置文件,将Directory内容修改
<Directory /var/www/port>
	AllowOverride AuthConfig						# 使用.htaccess文件
</Directory>

重启服务

systemctl restart httpd.service

客户端访问,会弹出输入用户名和密码
在这里插入图片描述

输入账号和密码后,可以成功访问网页
在这里插入图片描述

经过测试发现,使用webuser2无法登陆,是因为webuser2采用的明文密码的存储方式,在平台上会失效。所以尽量避免使用明文密码存储。
在这里插入图片描述

六、HTTPS服务器配置

1、安装Apache HTTPD模块

Apache HTTPD需要安装扩展模块才能激活TLS支持。通过安装mod_ssl软件包来安装此模块。

查找mod_ssl软件包

dnf search mod_ssl

在这里插入图片描述

安装mod_ssl软件包

dnf -y install mod_ssl

2、SSL配置文件解析

可以看到在httpd目录下多了一个子配置文件ssl.conf,查看SSL主配置文件

rpm -qc mod_ssl

在这里插入图片描述

ssl.conf文件内容解析

Listen 443 https	# 监听端口为https的443端口
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog	 # 当Apache需要SSL私钥的密码时,调用httpd-ssl-pass-dialog来获取密码
SSLSessionCache         shmcb:/run/httpd/sslcache(512000)	# 启用SSL会话缓存,使用共享内存缓冲区来存储会话数(512000为会话数大小)
SSLSessionCacheTimeout  300		# SSL会话缓存的过期时间,单位是秒
SSLCryptoDevice builtin		# 指定使用内置的加密设备

<VirtualHost _default_:443>		# 定义一个监听443端口(HTTPS默认端口)的虚拟主机
# General setup for the virtual host, inherited from global configuration	# 从全局配置继承的虚拟主机的常规设置
#DocumentRoot "/var/www/html"		# 删除注释,可以快捷将默认web站点设置为https
#ServerName www.example.com:443		# 删除注释,可以快捷将默认web站点设置为https

ErrorLog logs/ssl_error_log		# 错误日志文件的路径
TransferLog logs/ssl_access_log	# 访问日志文件的路径
LogLevel warn		# 日志级别

SSLEngine on	# 启用SSL/TLS功能
SSLHonorCipherOrder on	# 优先使用服务器配置的加密套件顺序
SSLCipherSuite PROFILE=SYSTEM	# 使用系统默认的加密套件配置
SSLProxyCipherSuite PROFILE=SYSTEM	# 用于代理连接的加密套件配置
SSLCertificateFile /etc/pki/tls/certs/localhost.crt		# SSL 证书文件的路径
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key	# SSL 私钥文件的路径
<FilesMatch "\.(cgi|shtml|phtml|php)$">		# 为特定文件模式设置SSL选项
    SSLOptions +StdEnvVars	# `+StdEnvVars`: 允许 SSL 环境变量被传递给 CGI 脚本
</FilesMatch>
<Directory "/var/www/cgi-bin">		# 为特定目录模式设置SSL选项
    SSLOptions +StdEnvVars	# `+StdEnvVars`: 允许 SSL 环境变量被传递给 CGI 脚本
</Directory>
BrowserMatch "MSIE [2-5]" \		# 根据浏览器的用户代理字符串设置特定的 SSL 选项
         nokeepalive ssl-unclean-shutdown \		# 针对旧版 MSIE 浏览器设置了一些兼容性选项
         downgrade-1.0 force-response-1.0		# 针对旧版 MSIE 浏览器设置了一些兼容性选项
CustomLog logs/ssl_request_log \	# 自定义的访问日志格式
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

3、生成私钥

openssl常见参数

参数作用
-in输入文件
-out输出文件

使用openssl生成私钥

openssl genrsa -out /etc/pki/tls/private/ca.key 2048
  • openssl genrsa:生成RSA私钥
  • -out /etc/pki/tls/private/ca.key:输出到/etc/pki/tls/private目录下,文件名可自定义
  • 2048:RSA私钥的长度
    在这里插入图片描述

4、生成证书请求文件

主题信息

  • C:国家
  • ST:省、州
  • L:城市、地区
  • O:组织
  • OU:组织单位
  • CN:通用名

使用openssl生成证书请求

openssl req -now -key /etc/pki/tls/private/ca.key -out /etc/pki/tls/certs/ca.csr -subj "/C=CN/ST=GD/L=gd/O=meaauf/OU=stu/CN=www.meaauf.com"
  • openssl rsa:创建证书请求
  • -new:创建一个新的证书请求
  • -key /etc/pki/tls/private/ca.key:指定私钥文件文件路径
  • -out:指定证书请求文件保存位置,文件名可以自定义
  • -subj:设置证书请求的主题信息

在这里插入图片描述

5、生成证书

使用openssl生成证书

openssl x509 -req -days 365 -in /etc/pki/tls/certs/ca.csr -signkey /etc/pki/tls/private/ca.key -out /etc/pki/tls/certs/ca.cert
  • x509:生成自签名的X.509证书
  • -req:使用证书请求创建证书
  • -days 365:证书有效期
  • -in /etc/pki/tls/certs/ca.csr:指定证书请求文件
  • -signkey /etc/pki/tls/private/ca.key:指定私钥文件
  • -out:生成证书后的保存路径

在这里插入图片描述

6、将SSL证书与默认站点绑定

测试默认站点的访问是否成功

curl http://192.168.110.1

在这里插入图片描述

编辑ssl.conf主配置文件

vim /etc/httpd/conf.d/ssl.conf

添加下列内容

DocumentRoot "/var/www/html"
ServerName www.meaauf.com:443
SSLCertificateFile /etc/pki/tls/certs/ca.cert
SSLCertificateKeyFile /etc/pki/tls/certs/ca.key

在这里插入图片描述
在这里插入图片描述

检查Apache配置文件语法

apachectl -t

在这里插入图片描述

重启httpd服务

systemctl restart httpd.service

调整防火墙规则

firewall-cmd --add-service=https --permanent
firewall-cmd --reload

在这里插入图片描述

7、客户端访问测试

客户端通过Firefox浏览器访问Web服务,会提示存在潜在风险,因为证书是由服务器自行签发,而非权威CA机构签发
在这里插入图片描述

点击【Advanced】,随后点击【Accept the Risk and Continue接收风险并继续】
在这里插入图片描述

即可显示网页内容

在这里插入图片描述

通过curl命令访问

curl https://192.168.110.1

在这里插入图片描述

使用-k选项不要验证SSL证书后

curl -k https://192.168.110.1

在这里插入图片描述

查看服务器证书详细信息

curl -kv https://192.168.110.1

在这里插入图片描述

七、错误汇总

1、出现AH00558报错

使用命令检测Apache配置文件语法,显示AH00558

[root@Server ~]# apachectl -t
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe46:70%ens160. Set the 'ServerName' directive globally to suppress this message
Syntax OK

出错原因分析

警告:Apache无法可靠的确定服务器完全限定域名(FQDN)。这可能是因为ServerName指令可能没有被设置在正确的位置,或者它可能被设置在了一个虚拟主机配置块中,而Apache在启动时需要全局的ServerName指令。

解决办法

查看Apache主配置文件中是否配置了ServerName,如果是注释状态,则取消注释加上该选项。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ STL ③

sort排序 #include <iostream> #include <algorithm> using namespace std;int main() {int a[5],i;cout<<"请输入数组元素:"<<endl;for(i0;i<5;i){cin>>a[i];}sort(a,a5,greater<int>());for(i0;i<5;i){cout<<a[i…

系统架构师考点--数据库系统

大家好。今天我来总结一下数据库系统的相关考点。本考点一般情况下上午场考试占3-5分&#xff0c;下午场案例分析题也会出现。 一、数据库系统 数据&#xff1a;数据库中存储的基本对象&#xff0c;是描述事物的符号记录。数据的种类:文本、图形、图像、音频、视频、学生的档…

基于Redis和openresty实现高并发缓存架构

目录 概述缓存架构设计实践代码路由业务封装redis 效果 概述 本文是对项目中 QPS 高并发相关问题的一种解决方案&#xff0c;利用 Nginx 与 Redis 的高并发、超低延迟响应&#xff0c;结合 Canal 进行实现。 openrestry官网 当程序需要提供较高的并发访问时&#xff0c;往往需…

状态压缩DP——AcWing 291. 蒙德里安的梦想

状态压缩DP 定义 状态压缩DP是一种利用二进制数来表示状态的动态规划算法。它通过将状态压缩成一个整数&#xff0c;从而减少状态数量&#xff0c;提高算法效率。 运用情况 状态压缩DP通常用于解决具有状态转移和最优解性质的问题&#xff0c;例如组合优化、图论、游戏等问…

UDS服务——TransferData (0x36)

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,本文介绍TransferData (0x36)—— 数据传输,用于下载/上传数据时用的,数据的传输方向由不同的服务控制:0x34服务表示下载,0x35服务表示上传。通过阅读本文,希望能对你有所帮助。 文章目录 诊断协议那些事儿传输数据服务…

Redis-事务-watch-unwatch

文章目录 1、监视key2、提交事务 1、监视key 打开两个窗口&#xff0c;第一个窗口先监视key&#xff0c;然后开始事务&#xff0c;然后再打开第二个窗口&#xff0c;修改balance为0 2、提交事务 此时事务被打断

银河麒麟V10 SP1.1操作系统 离线安装 nginx1.21.5、redis 服务

银河麒麟官网地址&#xff1a;国产操作系统、麒麟操作系统——麒麟软件官方网站 一、查看系统版本 命令&#xff1a;nkvers 我的是 release V10 (SP1)&#xff0c;根据这个版本去官网找对应的rpm包 银河麒麟操作系统的rpm包必须从官方找&#xff0c; 要是随便找个Centos的rp…

1.SG90

目录 一.实物图 二.原理图 三.简介 四.工作原理 一.实物图 二.原理图 三.简介 舵机&#xff08;英文叫Servo&#xff09;&#xff0c;是伺服电机的一种&#xff0c;伺服电机就是带有反馈环节的电机&#xff0c;这种电机可以进行精确的位置控制或者输出较高的扭矩。舵机…

基于深度学习的图像识别技术与应用是如何?

基于深度学习的图像识别技术与应用在当今社会中扮演着越来越重要的角色。以下是对该技术与应用的详细解析&#xff1a; 一、技术原理 深度学习是一种模拟人脑处理和解析数据的方式的技术和方法论。在图像识别领域&#xff0c;深度学习主要通过深度神经网络&#xff08;如卷积…

我理解的文本表示模型

词袋模型与N-grams模型 1 词袋模型 (Bag of Words)1.1 one-hot 取值 (Binary)1.2 Term Frequency 取值 (TF)普通频数 r a w t f raw_{tf} rawtf​频率范数归一化对数频数 1.3 Inverse document frequency (IDF)1.4 TF-IDF scores 取值 N-Gram 最简单的文本建模场景&#xff1a…

定义多个类对象,分别输入和输出各对象中的时间(时:分:秒)

在前面的文章中&#xff0c;类中只有公用数据而无成员函数&#xff0c;而且只有1个对象。可以直接在主函数中进行输入和输出。若有多个对象&#xff0c;需要分别引用多个对象中的数据成员&#xff0c;可以写出如下程序&#xff1a; &#xff08;1&#xff09;编写程序&#xff…

stata17中java installation not found或java not recognozed的问题

此问题在于stata不知道去哪里找java,因此需要手动的告诉他 方法1&#xff1a; 1.你得保证已经安装并配置好java环境 2.在stata中输入以下内容并重启stata即可 set java_home "D:\Develope\JDk17" 其中java_home后面的""里面的内容是你的jdk安装路径 我的…

【Java算法】滑动窗口 上

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【算法工作坊】算法实战揭秘 &#x1f456;一. 长度最小的子数组 题目链接&#xff1a;209.长度最小的子数组 算法原理 滑动窗口 滑动窗口算法常用于处理数组/字符串等序列问题&#xff0c;通过定义一…

IKVM.net调用Jar包实现SM4解密

近期&#xff0c;我深入学习了如何使用IKVM.net来调用Jar包&#xff0c;这次的学习经历让我对Java与.NET之间的互操作性有了更深刻的理解。IKVM.net作为一款强大的工具&#xff0c;为我们打通了Java与.NET之间的桥梁&#xff0c;使得在.NET环境中调用Java库变得简单而高效。 在…

生产环境安装odoo

odoo可以在多平台运行&#xff0c;但是在生产环境下官方不建议在Windows平台部署。在Windows下可能不能很好的支持一服务多worker的形式&#xff0c;更推荐在Linux下部署。 常见的Linux如Ubuntu、Debian等Debian系或Redhat系都能执行官网的包安装。 地址&#xff1a;Download |…

使用Jetpack Compose为Android App创建自定义页面指示器

使用Jetpack Compose为Android App创建自定义页面指示器 在现代移动应用中&#xff0c;页面指示器在提供视觉导航提示方面发挥着重要作用&#xff0c;帮助用户理解其在应用内容中的当前位置。页面指示器特别适用于顺序展示内容的场景&#xff0c;如图片轮播、图像库、幻灯片放…

Python3简单实现与Java的Hutool库SM2的加解密互通

1、背景&#xff1a; 因业务需求&#xff0c;需要与某平台接口对接。平台是Java基于Hutool库实现的SM2加密解密&#xff0c;研究了下SM2的加解密算法&#xff0c;网上找的资料&#xff0c;都是说SM2【椭圆曲线】 公钥长【x,y分量 64字节】&#xff0c;私钥短【32字节】&#x…

ChatTTS增强版V3【已开源】,长文本修复,中英混读,导入音色,批量SRT、TXT

ChatTTS增强版V3来啦&#xff01;本次更新增加支持导入SRT、导入音色等功能。结合上次大家反馈的问题&#xff0c;修复了长文本、中英混读等问题。 项目已开源(https://github.com/CCmahua/ChatTTS-Enhanced) 项目介绍 V3 ChatTTS增强版V3&#xff0c;长文本修复&#xff0c…

拔河【码蹄杯】/二分

拔河 二分 思路&#xff1a;二分平均力量值&#xff0c;并在check中利用前缀和判断。 #include<bits/stdc.h> using namespace std; typedef long long ll; ll a[100005]; double sum[100005]; ll f,n; bool check(double x) {double dx;double mn0;for(int i1;i<n;…

【MySQL进阶之路 | 高级篇】InnoDB存储结构

1. 数据库的存储结构 : 页 索引结构给我们提供了高效的索引方式&#xff0c;不过索引信息以及数据记录都是保存在文件上的.确切说是存储在页结构中.另一方面&#xff0c;索引是在存储引擎中实现的&#xff0c;MySQL服务器上的存储引擎负责对表中数据的读取和写入操作.不同的存…