当前位置: 首页 > news >正文

Linux上web服务器搭建(Apache、Nginx)

第五章 web服务器

第一节

DNS:对域名进行解析,查询对应的地址

1.1 web服务器简介

www是world wide web的缩写,也就是全球信息广播的意思

1.2.网址及HTTP简介

web服务器提供的这些数据大部分都是文件,那么我们需要在服务器端先将数据文件写好,并且放置在某个特殊的目录下面,这个目录就是我们整个网站的首页,在redhat中,这个目录默认在 /var/www/html 。浏览器是通过你在地址栏中输入你所需要的网址来取得这个目录的数据的。

URL:Uniform Resource Locator,统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。

网址格式:<协议>://<主机或主机名>[:port]/<目录资源,路径>

浏览器常支持的协议有:http、https、ftp等。

主机地址或者主机名:主机地址就是服务器在因特网所在的IP地址。如果是主机名的话,那么就需要域名解析了。

端口号(port):http为80,https为443 (IANA:互联网数字分配机构)

  • 0-1023:众所周知,永久地分配给固定的应用程序使用,特权端口(只有管理员有权限启用并让进程监听)

  • 1024-41951:亦为注册端口,但要求不是特别严格,分配给程序注册为某应用使用:3306/TCP

  • 41952-60000:客户端程序随机使用的端口,动态端口,或私有端口

1.3.http请求方法:

在http通信中,每个http请求报文都包含一个方法,用以告诉web服务器端需要执行哪些具体的动作,这些动作包括:获取指定web页面、提交内容到服务器、删除服务器上资源文件等。

状态代码:由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。

状态码范围 作用描述
100 - 199 用于指定客户端相应的某些动作
200 - 299 用于表示请求成功
300 - 399 用于己经移动的文件,并且常被包含在定位头信息中指定新的地址系信息
400 - 499 用于指出客户端的错误
500 - 599 用于指出服务端的错误

1.4.常见状态代码、状态描述的说明如下:

200 OK:客户端请求成功

收到数据,但是数据有问题

  • 400 Bad Request:客户端请求有语法错误,不能被服务器所理解

  • 401 Unauthorized:请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用

  • 403 Forbidden:服务器收到请求,但是拒绝提供服务

  • 404 Not Found:请求资源不存在,举个例子:输入了错误的URL
    服务器内部的问题

  • 500 Internal Server Error:服务器发生不可预期的错误

  • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
    1.5.http协议请求的工作流程
    HTTP默认端口80和8080

(1)终端客户在web浏览器地址栏输入访问地址域名售卖 (2)web浏览器请求DNS服务器把域名www.ceshi.com解析成web服务器的IP地址 (3)web浏览器将端口号(默认是80)从访问地址(URL)中解析出来 (4)web浏览器通过解析后的ip地址及端口号与web服务器之间建立一条TCP连接 (5)建立TCP连接后,web浏览器向web服务器发送一条HTTP请求报文 (6)web服务器响应并读取浏览器的请求信息,然后返回一条HTTP响应报文。(7)web服务器关闭HTTP连接,关闭TCP连接,web浏览器显示访问的网站内容到屏幕上。

第二节 web服务器的类型

2.1 静态页面和动态网页

静态页面

静态页面是指内容固定不变的网页。它的内容在服务器上是以 HTML 文件的形式存在,当用户请求访问时,服务器直接将预先存储好的 HTML 文件发送给用户的浏览器进行显示。

例如,一个简单的个人简历网页,其中的文字、图片、布局等在创建完成后就不会再发生变化,这就是静态页面。

静态页面的优点包括加载速度快,因为不需要服务器进行复杂的处理;对服务器的资源要求较低,易于维护和部署。

但是,其缺点也很明显,比如不易更新和修改内容,每次修改都需要重新编辑 HTML 文件;缺乏交互性,不能根据用户的操作实时动态地显示不同的内容。

动态页面

动态页面则不同,它的内容不是固定不变的,而是根据用户的请求、数据库中的数据以及特定的程序逻辑在服务器端实时生成的。

比如,一个电商网站的商品列表页面,当数据库中的商品信息发生变化时,页面能够实时显示最新的商品信息。

动态页面的优点是具有高度的交互性和灵活性,能够根据用户的操作和不同的条件显示个性化的内容;方便内容管理和更新,无需手动修改每个页面。

然而,动态页面也存在一些缺点,例如加载速度相对较慢,因为服务器需要进行计算和处理;对服务器的性能要求较高,开发和维护成本也相对较高。

2.2静态页面资源特征

静态页面资源具有以下特性:

1. 内容固定: - 一旦创建完成,其显示的文本、图像、布局等元素就不会自行改变。 - 例如,一个介绍历史事件的静态网页,无论何时访问,其描述的内容和呈现方式始终保持一致。

2. 快速加载: - 由于不需要服务器进行额外的计算和处理,直接将预先准备好的 HTML 文件发送给浏览器。 - 比如一个只有简单文字和少量图片的静态博客页面,通常能够迅速加载出来。

3. 低服务器资源消耗: - 服务器只需响应请求并传输文件,对服务器的 CPU、内存等资源占用较少。 - 大量用户同时访问静态页面时,服务器的压力相对较小。

4. 易于缓存: - 浏览器和代理服务器可以更有效地对静态页面进行缓存。 - 下次用户再次访问相同的页面时,可以直接从本地缓存中获取,进一步加快加载速度。

5. 简单维护: - 主要是对 HTML、CSS 和 JavaScript 文件的直接编辑。 - 例如修改页面的颜色、字体或添加新的图片,只需修改相应的文件即可。

6. 安全性较高: - 因为没有与服务器端的动态交互,减少了潜在的安全漏洞。 - 降低了遭受诸如 SQL 注入等攻击的风险。

7. 可预测性强: - 每次访问的结果都是相同的,便于测试和质量保证。 - 开发人员能够准确地知道页面在各种情况下的表现。

2.4 nginx的搭建方式:

LAMP 、LNMP
以下是使用 Nginx 搭建 LAMP(Linux + Apache + MySQL + PHP)和 LNMP(Linux + Nginx + MySQL + PHP)环境的一般步骤:LAMP 环境搭建:
1. 安装 Linux 操作系统(如 CentOS、Ubuntu 等)。
2. 安装 Apache 服务器:- 在 CentOS 上,可以使用命令 `yum install httpd` 安装。- 在 Ubuntu 上,可以使用命令 `apt-get install apache2` 安装。
3. 安装 MySQL 数据库:- CentOS:`yum install mysql-server`- Ubuntu:`apt-get install mysql-server`
4. 安装 PHP:- CentOS:`yum install php`- Ubuntu:`apt-get install php`
5. 配置 Apache 以支持 PHP:- 在 Apache 的配置文件中(如 httpd.conf),添加对 PHP 的支持模块。LNMP 环境搭建:
1. 同样先安装好 Linux 操作系统。
2. 安装 Nginx 服务器:- CentOS:`yum install nginx`- Ubuntu:`apt-get install nginx`
3. 安装 MySQL 数据库(步骤与 LAMP 中的相同)。
4. 安装 PHP:- 同时需要安装 PHP-FPM(FastCGI 进程管理器),以便与 Nginx 协同工作。
5. 配置 Nginx 以支持 PHP:- 在 Nginx 的配置文件(如 nginx.conf)中,设置 PHP 的处理规则,将 PHP 请求转发给 PHP-FPM 处理。需要注意的是,在实际搭建过程中可能会遇到各种依赖问题和配置错误,需要根据具体的错误提示进行解决。
例如,在安装 MySQL 时可能会遇到设置 root 密码的提示,需要牢记密码以便后续使用。在配置 Nginx 时,可能需要根据服务器的实际 IP 地址和域名进行相应的修改。

2.5 web服务器基本配置

nginx服务器:主配置文件:/etc/nginx/nginx.conf子配置文件:/etc/nginx/conf.d/*.conf请求目录文件位置:/var/share/nginx/htmlapache服务器:主配置文件:/etc/httpd/conf/httpd.conf子配置文件:/etc/httpd/conf.d/请求文件位置:/var/www/html

防火墙和关闭 selinux(Security-Enhanced Linux)防火墙。
systemctl stop firewalld 和 setenforce 0
最后查看一下防火墙是否关闭
systemctl status firewalld

systemctl stop firewalld      ##关闭防火墙
systemctl disabled firewalld   ##关闭防火墙开机自启
systemctl status firewalld     ##查看防火墙是否关闭setenforce 0      ##临时关闭selinux
vim /etc/selinux/configSELINUX=disabled   ##永久关闭

1.下载nginx

  [root@server]# yum install nginx -y

2.开启服务

 [root@server]# systemctl start nginx

3.查找uginx的配置文件

    [root@server]# rpm -ql nginx(找.conf)tree /etc/nginx		#查看树形目录
image-20240705154859593

4.编辑

   [root@server]# vim /etc/nginx/nginx.conf
#nginx服务配置文件nginx.conf的结构
#############全局配置(无{}标志)############
user nginx;              #进程所属用户
worker_processes auto;   #线程数量CPU核心数,(双核4线程,可以设置为4)
error_log /var/log/nginx/error.log;  #错误日志文件路径
pid /run/nginx.pid;               #nginx pid文件位置
include /usr/share/nginx/modules/*.conf;  #导入功能模块配置文件
#######################################################
##################性能配置(有{}标志)############
events {worker_connections 1024;  #tcp连接数
}
########################################################
##################http模块配置(有{}标志)############
http {    #http区块开始log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';  #日志显示格式定义access_log  /var/log/nginx/access.log  main;  #访问日志文件位置
(不需要管以下这个)
sendfile            on;     #开启高效文件传输
tcp_nopush          on;     #性能优化参数
tcp_nodelay         on;     #性能优化参数
keepalive_timeout   65;     #持久连接或超时时间
types_hash_max_size 4096;   #性能优化参数 include             /etc/nginx/mime.types;   #可解析的静态资源类型
default_type        application/octet-stream;include /etc/nginx/conf.d/*.conf;             #加载子配置文件server { #server区块开始,就相当于一个虚拟主机listen       80;listen       [::]:80;   server_name  _;    #服务名root         /usr/share/nginx/html;   #主页存放路径include /etc/nginx/default.d/*.conf;  #子配置文件路径error_page 404 /404.html;    #404错误的返回页面location = /404.html {       #location 定义用户请求的uri,并返回相应的资源文件}error_page 500 502 503 504 /50x.html;  #5xx状态返回的页面location = /50x.html {}
}
}

补充:

看nginx是否在运行 [root@server]# ps -aux | grep nginx
总结:结束进程,可以stop该进程,也可以rm这个进程文件
(这里以nginx.pid举例)
[root@server]# kill -9 1991或者
[root@server]# rm /run/nginx.pid
index.html是默认的,可以不写;

第三节 案例(Nginx)

案例一:多ip访问多网站

网站ip地址主机位为100,设置目录首页为/www/ip/100,网页内容为:this is 100

网站ip地址主机位为200,设置目录首页为/www/ip/200,网页内容为:this is 200

ip -a 查看网卡信息
rounte -n / ip route show  ##查看网关等信息
1、添加IP地址
[root@localhost ~]# nmcli connection modify ens33 +ipv4.address 192.168.84.100/24 +ipv4.gateway 192.168.84.2 ipv4.dns 114.114.114.114 ipv4.method manual autoconnect yes
[root@localhost ~]# nmcli connection modify ens33 +ipv4.addresses 192.168.84.200/24
[root@localhost ~]# nmcli connection up ens332、创建网页根目录,定义网页内容
[root@localhost ~]# mkdir -pv /www/ip/{100,200}
[root@localhost ~]# echo this is 100 > /www/ip/100/index.html
[root@localhost ~]# echo this is 200 > /www/ip/200/index.html3、新建文件,写入配置
[root@localhost ~]# vim /etc/nginx/conf.d/test1.conf
server {listen 192.168.84.100:80;root /www/ip/100;location / {}
}
server {listen 192.168.84.200:80;root /www/ip/200;location / {}
[root@localhost ~]# systemctl restart nginx4、检查结果
[root@localhost ~]# curl 192.168.84.100
this is 100
[root@localhost ~]# curl 192.168.84.200
this is 200

案例二:基于不同端口访问网站

使用web服务器默认端口的网站,设置网站首页目录位置/www/port/80,网页内容为:the port is 80

建立一个使用1000端口的网站,设置网站首页目录位置/www/port/1000,网页内容为:the port is 1000

1、添加IP地址
[root@localhost ~]# nmcli connection modify ens33 +ipv4.address 192.168.84.100/24 +ipv4.gateway 192.168.84.2 ipv4.dns 114.114.114.114 ipv4.method manual autoconnect yes
[root@localhost ~]# nmcli connection up ens332、创建网页根目录,定义网页内容
[root@localhost ~]# mkdir -pv /www/port/{80,1000}
[root@localhost ~]# echo the port is 80 > /www/port/80/index.html
[root@localhost ~]# echo the port is 1000 > /www/port/1000/index.html3、新建文件,写入配置
[root@localhost ~]# vim /etc/nginx/conf.d/test2.conf
server {listen 192.168.84.100:80;root /www/port/80;location / {}
}
server {listen 192.168.84.100:1000;root /www/poort/1000;location / {}
[root@localhost ~]# systemctl restart nginx4、检查结果
[root@localhost ~]# curl 192.168.84.100
the port is 80
[root@localhost ~]# curl 192.168.84.100:1000
the port is 1000

第四节 搭建静态网站–基于https协议

1.简介

HTTP协议以明文方式发送内容,不提供任何方式的数据加密;
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS;

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道。HTTPS并不是一个新协议,而是HTTP+SSL(Secure Sockets Layer — 安全套接层)(TLS)。原本HTTP先和TCP(假定传输层是TCP协议)直接通信,而加了SSL后,就变成HTTP先和SSL通信,再由SSL和TCP通信,相当于SSL被嵌在了HTTP和TCP之间。

SSL协议分为两层:

  • SSL记录协议 (SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能。
  • SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

SSL协议提供的服务:

1)认证用户和服务器,确保数据发送到正确的客户机和服务器
2)加密数据以防止数据中途被窃取
3)维护数据的完整性,确保数据在传输过程中不被改变

2.https协议加密所使用的算法

2.1 Hash算法常用在不可还原的密码存储、信息完整性校验等
常见的HASH算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMACSHA1。

2.2 共享密钥加密(对称密钥加密):加密和解密使用相同密钥。
对称加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES。

2.3公开密钥加密(非对称密钥加密):公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,一把叫做公开密钥。
常见的非对称加密算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)。

3.TLS完整的通信流程

第一阶:段客户端端申请建立https连接第二阶段:客户端和服务器确认加密版本,加密套件第三阶段:证书发送验证 (客户端验证证书取出公钥,用公钥加密生成的对称秘钥发送个服务器通知改变加密信息传递)第四阶段:服务收到消息,用私钥解密取,确认对称秘钥通知客户端ssl通道建立完成第五阶段:客户端和服务端可以通过加密通道开始数据通信第六阶段:客户端断开连接#key是私钥文件
#crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息(第一种)    [root@localhost certs]# make jiami.crt
(第二种) #openssl  req -newkey rsa:4096 -nodes -sha256 -keyout haha.key -x509 -days 365 -out haha.crt
[root@www certs]# openssl genrsa -aes128 2048 > openlab.key(第三种) #openssl req -utf8 -new -key openlab.key -x509 -days 365 -out openlab.crt

4.静态https网站搭建

1. 配置网络接口与 IP 地址- 使用 `nmcli connection modify ens33 +ipv4.addresses 192.168.84.110/24` 为网络接口 `ens33` 配置 IPv4 地址。- 通过 `nmcli connection up ens33` 激活网络连接。2. 创建网站目录与文件- 使用 `mkdir -p /www/https` 创建网站的目录。- 利用 `echo this is https > /www/https/index.html` 创建网站的默认页面文件 `index.html` 并写入内容。3. 生成 SSL 证书和私钥- 通过 `openssl genrsa -out https.key` 生成私钥 `https.key` 。- 执行 `openssl req -utf8 -new -key https.key -x509 -days 100 -out https.crt` 基于私钥生成自签名的 SSL 证书 `https.crt` 。4. 配置 Nginx 服务器- 使用 `vim /etc/nginx/conf.d/test_https.conf` 编辑 Nginx 的配置文件。- 在配置文件中设置服务器监听的 IP 地址和端口、网站根目录、SSL 证书和私钥的路径等。5. 测试网站- 使用 `curl -k https://192.168.84.110` 命令访问网站,验证配置是否成功。这些步骤共同构成了创建基于 HTTPS 的静态网站的主要过程,确保网站能够通过安全的 HTTPS 协议正常访问,并提供指定的静态内容。 

具体操作命令:

1、添加ip地址
[root@localhost ~]# nmcli connection modify ens33 +ipv4.addresses 192.168.84.110/24
[root@localhost ~]# nmcli connection up ens33 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3)2、创建网页根目录,定义网页内容
[root@localhost ~]# mkdir -p /www/https
[root@localhost ~]# echo this is https > /www/https/index.html3、生成lls证书和私钥
[root@localhost ~]# cd /etc/pki/tls/certs/
[root@localhost certs]# ls
ca-bundle.crt  ca-bundle.trust.crt[root@localhost certs]# openssl genrsa -out https.key   #生成私钥https.key    使用 openssl 生成一个 RSA 私钥,并将其保存为 https.key 文件
[root@localhost certs]# openssl req -utf8 -new -key https.key -x509 -days 100 -out https.crt
#基于私钥生成LLS证书,     使用之前生成的私钥 https.key 创建一个自签名的 X.509 证书,有效期为 100 天,并将证书保存为 https.crt 文件。[root@localhost certs]# ls
ca-bundle.crt  ca-bundle.trust.crt  https.crt  https.key4、配置nginx服务器
[root@localhost ~]# vim /etc/nginx/conf.d/test_https.conf
server {listen 192.168.84.110:443 ssl;  #表示监听 192.168.84.110 的 443 端口,并启用 SSL root /www/https;   #指定网站的根目录为 /www/httpsssl_certificate /etc/pki/tls/certs/https.crt;   #指定了 SSL 证书位置。ssl_certificate_key /etc/pki/tls/certs/https.key;  #指定SSL 私钥位置location / {}
}5、测试网站
[root@localhost ~]# curl -k https://192.168.84.110
this is https

5.动态网站搭建

[root@localhost ~]# nmcli connection modify ens33 +ipv4.addresses 192.168.84.120/24
[root@localhost ~]# nmcli connection up ens33 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)
[root@localhost ~]# dnf install php php-fpm -y输出 PHP 信息
[root@localhost ~]# echo "<?php phpinfo(); ?>" /usr/share/nginx/html/index.html 
<?php phpinfo(); ?> /usr/share/nginx/html/index.html重启服务
[root@localhost ~]# systemctl restart nginx
查看输出信息
[root@localhost ~]# curl -I 192.168.84.120
HTTP/1.1 200 OK
Server: nginx/1.21.5
Date: Fri, 28 Jun 2024 10:07:42 GMT
Content-Type: text/html
Content-Length: 3510
Last-Modified: Mon, 23 Oct 2023 15:48:29 GMT
Connection: keep-alive
ETag: "653695cd-db6"
Accept-Ranges: bytes

第五节 案例(Apache)

案例一:设置单实例Apache HTTP服务器

[root@localhost ~]# echo this is apache http > /var/www/html/index.html
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# curl 192.168.84.160
this is apache http

案例二:配置基于不同端口的虚拟主机

cd /etc/httpd/conf.d/
[root@localhost conf.d]# mkdir -pv /www/{8080,9090}
mkdir: 已创建目录 '/www'
mkdir: 已创建目录 '/www/8080'
mkdir: 已创建目录 '/www/9090'
[root@localhost conf.d]# echo 8080 > /www/8080/index.html
[root@localhost conf.d]# echo 9090 > /www/9090/index.html[root@localhost conf.d]#vim /etc/httpd/conf.d/port.conf
listen 8080
listen 9090
<directory /www>allowoverride nonerequire all granted
</directory><virtualhost 192.168.84.160:8080>servername 192.168.84.160documentroot /www/8080
</virtualhost>
<virtualhost 192.168.84.160:9090>servername 192.168.84.160documentroot /www/9090
</virtualhost>[root@localhost conf.d]# setenface 0
[root@localhost conf.d]# systemctl restart httpd[root@localhost conf.d]# curl 192.168.84.160:8080
8080
[root@localhost conf.d]# curl 192.168.84.160:9090
9090

案例三:配置基于Apache的虚拟主机

基于多IP地址访问
[root@localhost conf.d]# cat way1.conf 
<virtualhost 192.168.84.110:80>documentroot /www/way1/a.comservername a.com
</virtualhost>
<virtualhost 192.168.84.120:80>documentroot /www/way1/b.comservername b.com
</virtualhost>root@localhost conf.d]# mkdir -p /www/way1/{a.com,b.com}
[root@localhost conf.d]# echo a.com > /www/way1/a.com/index.html
[root@localhost conf.d]# echo b.com > /www/way1/b.com/index.html[root@localhost conf.d]# systemctl restart httpd[root@localhost conf.d]# curl 192.168.84.110
a.com
[root@localhost conf.d]# curl 192.168.84.120
b.com
基于域名访问root@localhost conf.d]# mkdir -p /www/way2/{abc.com,def.com}
[root@localhost conf.d]# echo abc.com > /www/way2/abc.com/index.html
[root@localhost conf.d]# echo def.com > /www/way2/def.com/index.html[root@localhost conf.d]# cat way2.conf 
<VirtualHost *:80>ServerName a.comDocumentRoot "/www/a.com/"
</VirtualHost><VirtualHost *:80>ServerName b.comDocumentRoot "/www/b.com/"
</VirtualHost>修改物理主机hosts文件(C:\Windows\System32\drivers\etc),这里是因为物理机去访问Apache服务器
在hosts文件里面添加
192.168.81.136 a.com
192.168.81.136 b.com

案例四、在 Apache HTTP 服务器中添加 TLS 加 密

1. 安装必要的模块
首先,需要确保您的服务器已经安装了 `mod_ssl` 模块。如果未安装,可以使用您服务器的包管理工具进行安装。
dnf install mod_ssl2. 生成证书和密钥
可以通过以下两种常见方式获取证书和密钥:
- 自签名证书:这适用于测试和开发环境。可以使用 `openssl` 命令来生成:
openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
- 从受信任的证书颁发机构(CA)获取:您需要向 CA 提交证书请求并完成相关验证流程,CA 将会颁发有效的证书。3. 配置 Apache
打开 Apache 的配置文件 `httpd.conf` 或 `ssl.conf`(具体取决于您的系统配置),并进行以下关键配置:
- 启用 `mod_ssl` 模块:确保有类似 `LoadModule ssl_module modules/mod_ssl.so` 的行未被注释。
- 设置证书和密钥路径:
SSLCertificateFile /path/to/server.crt
SSLCertificateKeyFile /path/to/server.key4. 配置虚拟主机(如果需要)
如果您为多个域名或子域名配置 SSL,需要在虚拟主机的配置中进行相应设置。5. 重启 Apache 服务器
完成配置后,重启 Apache 服务器以使更改生效。
例如,如果您使用 `systemctl` 来管理服务,可以使用以下命令:
sudo systemctl restart apache2

1. 安装 `mod_ssl` 模块:sudo dnf install mod_ssl2. 生成自签名证书和密钥(在合适的目录下,例如 `/etc/httpd/ssl/` ):sudo mkdir -p /etc/httpd/sslopenssl req -new -newkey rsa:2048 -nodes -keyout /etc/httpd/ssl/server.key -out /etc/httpd/ssl/server.csropenssl x509 -req -days 365 -in /etc/httpd/ssl/server.csr -signkey /etc/httpd/ssl/server.key -out /etc/httpd/ssl/server.crt3. 打开 Apache 的配置文件 `/etc/httpd/conf/httpd.conf` :sudo vim /etc/httpd/conf/httpd.conf4. 在配置文件中进行以下配置:- 启用 `mod_ssl` 模块:确保有类似 `LoadModule ssl_module modules/mod_ssl.so` 的行未被注释。- 设置证书和密钥路径:SSLCertificateFile /etc/httpd/ssl/server.crtSSLCertificateKeyFile /etc/httpd/ssl/server.key5. 如果需要配置虚拟主机,在 `/etc/httpd/conf.d/vhost.conf` 或类似的文件中进行设置(假设您要为 `example.com` 配置虚拟主机):<VirtualHost *:443>ServerName example.comDocumentRoot "/var/www/html/example"SSLEngine onSSLCertificateFile /etc/httpd/ssl/server.crtSSLCertificateKeyFile /etc/httpd/ssl/server.key</VirtualHost>6. 重启 Apache 服务器:sudo systemctl restart httpd

相关文章:

Linux上web服务器搭建(Apache、Nginx)

第五章 web服务器 第一节 DNS&#xff1a;对域名进行解析&#xff0c;查询对应的地址 1.1 web服务器简介 www是world wide web的缩写&#xff0c;也就是全球信息广播的意思 1.2.网址及HTTP简介 web服务器提供的这些数据大部分都是文件&#xff0c;那么我们需要在服务器端…...

Django QuerySet对象,exclude()方法

模型参考上一章内容&#xff1a; Django QuerySet对象&#xff0c;filter()方法-CSDN博客 exclude()方法&#xff0c;用于排除符合条件的数据。 1&#xff0c;添加视图函数 Test/app11/views.py from django.shortcuts import render from .models import Postdef index(re…...

Qt/C++音视频开发78-获取本地摄像头支持的分辨率/帧率/格式等信息/mjpeg/yuyv/h264

一、前言 上一篇文章讲到用ffmpeg命令方式执行打印到日志输出&#xff0c;可以拿到本地摄像头设备信息&#xff0c;顺藤摸瓜&#xff0c;发现可以通过执行 ffmpeg -f dshow -list_options true -i video“Webcam” 命令获取指定摄像头设备的分辨率帧率格式等信息&#xff0c;会…...

Go bufio包

bufio包&#xff1a; 带缓冲的I/O操作&#xff0c; 减少系统调用次数&#xff0c; 读取文件、网络数据。 bufio包 是什么 bufio 包是 Go 标准库中的一个非常有用的包&#xff0c;用于提供带缓冲的 I/O 操作。它通过缓冲来提高读取和写入的效率&#xff0c;可以有效减少系统调用…...

C++ 类和对象 拷贝构造函数

一 拷贝构造函数的概念&#xff1a; 拷贝构造函数是一种特殊的构造函数&#xff0c;用于创建一个对象是另一个对象的副本。当需要用一个已存在的对象来初始化一个新对象时&#xff0c;或者将对象传递给函数或从函数返回对象时&#xff0c;会调用拷贝构造函数。 二 拷贝构造函…...

C# —— Math对象

Math 数学类 提供了一些相关数学计算的属性和方法、四舍五入、向上求整、向下求整、开平方&#xff0c;几次方 最大值和最小值 sin cos 绝对值 方法 1.Math 常用的字段 Math.PI double x 2 * 180 / Math.PI; Console.WriteLine(x); 2 Math.Abs() 求绝对值 int a -3; Con…...

Face_recognition实现人脸识别

这里写自定义目录标题 欢迎使用Markdown编辑器一、安装人脸识别库face_recognition1.1 安装cmake1.2 安装dlib库1.3 安装face_recognition 二、3个常用的人脸识别案例2.1 识别并绘制人脸框2.2 提取并绘制人脸关键点2.3 人脸匹配及标注 欢迎使用Markdown编辑器 本文基于face_re…...

1-3分钟爆款视频素材在哪找啊?这9个热门爆款素材网站分享给你

在如今快节奏的时代&#xff0c;短视频已成为吸引观众注意力的黄金手段。然而&#xff0c;要制作出1-3分钟的爆款视频&#xff0c;除了创意和剪辑技巧外&#xff0c;选择合适的素材至关重要。那么&#xff0c;哪里可以找到那些能让你的视频脱颖而出的爆款素材呢&#xff1f;不用…...

武汉免费 【FPGA实战训练】 Vivado入门与设计师资课程

一&#xff0e;背景介绍 当今高度数字化和智能化的工业领域&#xff0c;对高效、灵活且可靠的技术解决方案的需求日益迫切。随着工业 4.0 时代的到来&#xff0c;工业生产过程正经历着前所未有的变革&#xff0c;从传统的机械化、自动化逐步迈向智能化和信息化。在这一背景下&…...

【vite创建项目】

搭建vue3tsvitepinia框架 一、安装vite并创建项目1、用vite构建项目2、配置vite3、找不到模块 “path“ 或其相对应的类型声明。 二、安装element-plus1、安装element-plus2、引入框架 三、安装sass sass-loader1、安装sass 四、安装vue-router-next 路由1、安装vue-router42搭…...

最优化方法 运筹学【】

1.无约束 常用公式 线搜索准则&#xff1a;求步长 精确线搜索&#xff08;argmin&#xff09; 最速下降&#xff1a;sd&#xff1a;线性收敛 2.算法 SD dk&#xff1a;付梯度-g newton dk&#xff1a;Gkd-g 二阶收敛&#xff0c;步长为1 阻尼牛顿&#xff1a;步长用先搜…...

探索 WebKit 的动感世界:设备方向和运动支持全解析

探索 WebKit 的动感世界&#xff1a;设备方向和运动支持全解析 随着移动设备的普及&#xff0c;网页应用对设备方向和运动的感知需求日益增长。WebKit 作为众多流行移动浏览器的渲染引擎&#xff0c;提供了对设备方向和运动的全面支持&#xff0c;使得 Web 应用能够根据设备的…...

高考假期预习指南

IT专业入门&#xff0c;高考假期预习指南 对于希望进入IT行业的学生来说&#xff0c;假期是学习信息技术的最佳时机。 在信息化快速发展的时代&#xff0c;IT行业的发展前景广阔&#xff0c;但高技能要求使新生可能感到迷茫。 建议新生制定详细的学习计划&#xff0c;包括了解…...

Spring Boot 事件监听机制工作原理

前言&#xff1a; 我们知道在 Spring 、Spring Boot 的启动源码中都大量的使用了事件监听机制&#xff0c;也就是我们说的的监听器&#xff0c;监听器的实现基于观察者模式&#xff0c;也就是我们所说的发布订阅模式&#xff0c;这种模式可以在一定程度上实现代码的解耦&#…...

【AI大模型】驱动的未来:穿戴设备如何革新血液、皮肤检测与营养健康管理

文章目录 1. 引言2. 现状与挑战3. AI大模型与穿戴设备概述4. 数据采集与预处理4.1 数据集成与增强4.2 数据清洗与异常检测 5. 模型架构与训练5.1 高级模型架构5.2 模型训练与调优 6. 个性化营养建议系统6.1 营养建议生成优化6.2 用户反馈与系统优化 7. 关键血液成分与健康状况评…...

【FFmpeg】avcodec_open2函数

目录 1. avcodec_open21.1 编解码器的预初始化&#xff08;ff_encode_preinit & ff_decode_preinit&#xff09;1.2 编解码器的初始化&#xff08;init&#xff09;1.3 释放编解码器&#xff08;ff_codec_close&#xff09; FFmpeg相关记录&#xff1a; 示例工程&#xff…...

matlab:对带参数a关于x的方程求解

题目 讲解 简洁对各个式子的内部含义用浅显易懂的话语总结出来了&#xff0c;耐心体会 f(a) (x)exp(x)x^ax^(sqrt(x))-100;%因为下面的fzero的第一个数需要一个fun&#xff0c;所以这里有两个句柄&#xff0c;第一个a是输入的&#xff0c;第二个x是需要被解出的 A0:0.1:2;%创…...

Yolov10训练,转化onnx,推理

yolov10对于大目标的效果好&#xff0c;小目标不好 一、如果你训练过yolov5&#xff0c;yolov8&#xff0c;的话那么你可以直接用之前的环境就行 目录 一、如果你训练过yolov5&#xff0c;yolov8&#xff0c;的话那么你可以直接用之前的环境就行 二、配置好后就可以配置文件…...

GEE代码实例教程详解:洪水灾害监测

简介 在本篇博客中&#xff0c;我们将使用Google Earth Engine (GEE) 进行洪水灾害监测。通过分析Sentinel-1雷达数据&#xff0c;我们可以识别特定时间段内的洪水变化情况。 背景知识 Sentinel-1数据集 Sentinel-1是欧洲空间局提供的雷达卫星数据集&#xff0c;它能够提供…...

运维锅总详解系统设计原则

本文对CAP、BASE、ACID、SOLID 原则、12-Factor 应用方法论等12种系统设计原则进行分析举例&#xff0c;希望对您在进行系统设计、理解系统运行背后遵循的原理有所帮助&#xff01; 一、CAP、BASE、ACID简介 以下是 ACID、CAP 和 BASE 系统设计原则的详细说明及其应用举例&am…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...