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/html
	
apache服务器:
	主配置文件:/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/config
    SELINUX=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 ens33

2、创建网页根目录,定义网页内容
[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.html

3、新建文件,写入配置
[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 nginx

4、检查结果
[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 ens33

2、创建网页根目录,定义网页内容
[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.html

3、新建文件,写入配置
[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 nginx

4、检查结果
[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.html

3、生成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.key

4、配置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/https
        ssl_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 none
	require all granted
</directory>

<virtualhost 192.168.84.160:8080>
	servername 192.168.84.160
	documentroot /www/8080
</virtualhost>
<virtualhost 192.168.84.160:9090>
	servername 192.168.84.160
	documentroot /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.com
	servername a.com
</virtualhost>
<virtualhost 192.168.84.120:80>
	documentroot /www/way1/b.com
	servername 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.com
        DocumentRoot "/www/a.com/"
</VirtualHost>

<VirtualHost *:80>
        ServerName b.com
        DocumentRoot "/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_ssl

2. 生成证书和密钥
可以通过以下两种常见方式获取证书和密钥:
- 自签名证书:这适用于测试和开发环境。可以使用 `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.key


4. 配置虚拟主机(如果需要)
如果您为多个域名或子域名配置 SSL,需要在虚拟主机的配置中进行相应设置。

5. 重启 Apache 服务器
完成配置后,重启 Apache 服务器以使更改生效。
例如,如果您使用 `systemctl` 来管理服务,可以使用以下命令:
sudo systemctl restart apache2

1. 安装 `mod_ssl` 模块:
   sudo dnf install mod_ssl

2. 生成自签名证书和密钥(在合适的目录下,例如 `/etc/httpd/ssl/` ):
   sudo mkdir -p /etc/httpd/ssl
   openssl req -new -newkey rsa:2048 -nodes -keyout /etc/httpd/ssl/server.key -out /etc/httpd/ssl/server.csr
   openssl x509 -req -days 365 -in /etc/httpd/ssl/server.csr -signkey /etc/httpd/ssl/server.key -out /etc/httpd/ssl/server.crt


3. 打开 Apache 的配置文件 `/etc/httpd/conf/httpd.conf` :
   sudo vim /etc/httpd/conf/httpd.conf


4. 在配置文件中进行以下配置:
   - 启用 `mod_ssl` 模块:确保有类似 `LoadModule ssl_module modules/mod_ssl.so` 的行未被注释。
   - 设置证书和密钥路径:
     SSLCertificateFile /etc/httpd/ssl/server.crt
     SSLCertificateKeyFile /etc/httpd/ssl/server.key

5. 如果需要配置虚拟主机,在 `/etc/httpd/conf.d/vhost.conf` 或类似的文件中进行设置(假设您要为 `example.com` 配置虚拟主机):
   <VirtualHost *:443>
       ServerName example.com
       DocumentRoot "/var/www/html/example"
       SSLEngine on
       SSLCertificateFile /etc/httpd/ssl/server.crt
       SSLCertificateKeyFile /etc/httpd/ssl/server.key
   </VirtualHost>


6. 重启 Apache 服务器:
   sudo systemctl restart httpd


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何利用好用便签提高工作效率?

在忙碌的工作中&#xff0c;我们经常需要记住许多琐碎的任务。如果这些任务被遗忘&#xff0c;可能会对我们的工作产生影响。这时&#xff0c;便签就成为了我们的得力助手。通过合理的使用和管理&#xff0c;便签不仅能帮助我们记住重要的事项&#xff0c;还能提高我们的工作效…

中科蓝讯AB5607E蓝牙5.4 低成本带插卡带U盘音箱方案

方案概述 中科蓝讯AB5607E蓝牙5.4 低成本带插卡带U盘音箱方案&#xff0c;我们已有成熟的方案&#xff0c;用户可以免开发&#xff08;零代码&#xff09;快速完成带插卡带U盘蓝牙音箱&#xff0c;提供原理图&#xff0c;PCB Layout指导。 方案优势 低成本&#xff0c;IC成本低…

【Linux进程】进程优先级 Linux 2.6内核进程的调度

前言 进程是资源分配的基本单位, 在OS中存在这很多的进程, 那么就必然存在着资源竞争的问题, 操作系统是如何进行资源分配的? 对于多个进程同时运行, 操作系统又是如何调度达到并发呢? 本文将以Linux kernel 2.6为例 , 向大家介绍进程在操作系统中 (OS) 的调度原理; 1. 进程优…

【开发工具-前端必备神器】WebStrom2024版-安装和使用(小白学习)

一、官方下载地址 Other Versions - WebStorm 选择适合自己电脑的下载 二、安装步骤 1、双击下载的exe安装 2、选择安装目录【建议不要安装在C盘下】 3、安装选项&#xff0c;可以全选 4一直点击下一步就行了 5.双击运行 安装遇到问题&#xff1a; 我是下错版本了&#xff0…

Motion Guidance: 扩散模型实现图像精确编辑的创新方法

在深度学习领域&#xff0c;扩散模型&#xff08;diffusion models&#xff09;因其能够根据文本描述生成高质量图像而备受关注。然而&#xff0c;这些模型在精确编辑图像中对象的布局、位置、姿态和形状方面仍存在挑战。本文提出了一种名为“运动引导”&#xff08;motion gui…

【LLM】一、利用ollama本地部署大模型

目录 前言 一、Ollama 简介 1、什么是Ollama 2、特点&#xff1a; 二、Windows部署 1.下载 2.安装 3.测试安装 4.模型部署&#xff1a; 5.注意 三、 Docker部署 1.docker安装 2.ollama镜像拉取 3.ollama运行容器 4.模型部署&#xff1a; 5.注意&#xff1a; 总结 前言…

【C++】哈希表 ---开散列版本的实现

你很自由 充满了无限可能 这是很棒的事 我衷心祈祷你可以相信自己 无悔地燃烧自己的人生 -- 东野圭吾 《解忧杂货店》 开散列版本的实现 1 前言2 开散列版本的实现2.1 节点设计2.2 框架搭建2.3 插入函数2.4 删除函数2.5 查找操作2.6 测试 Thanks♪(&#xff65;ω&#x…

OpenCV 灰度直方图及熵的计算

目录 一、概述 1.1灰度直方图 1.1.1灰度直方图的原理 1.1.2灰度直方图的应用 1.1.3直方图的评判标准 1.2熵 二、代码实现 三、实现效果 3.1直方图显示 3.2 熵的计算 一、概述 OpenCV中的灰度直方图是一个关键的工具&#xff0c;用于分析和理解图像的灰度分布情况。直…

Excel多表格合并

我这里一共有25张表格: 所有表的表头和格式都一样,但是内容不一样: 现在我要做的是把所有表格的内容合并到一起,研究了一下发现WPS的这项功能要开会员的,本来想用代码撸出来的,但是后来想想还是找其他办法,后来找到"易用宝"这个插件,这个插件可以从如下地址下载:ht…

图像处理中的二维傅里叶变换

图像处理中的二维傅里叶变换 问题来源是对彩色图像进行压缩时得出的傅里叶系数的图像如何解释&#xff0c;导入图片&#xff0c;转化为灰度图片&#xff1a; #彩色图片一般是由RGB组成&#xff0c;其实就是3个二维数组叠加而成&#xff0c;当RGB时&#xff0c;彩色图片就会变成…

【线性代数的本质】矩阵与线性变换

线性变化要满足两点性质&#xff1a; 直线&#xff08;连续的点&#xff09;在变换后还是直线。原点不变。 假设有坐标轴&#xff08;基底&#xff09; i ^ \widehat{i} i 和 j ^ \widehat{j} j ​&#xff1a; i ^ [ 1 0 ] , j ^ [ 0 1 ] \widehat{i}\begin{bmatrix} 1 \…

【leetcode】双指针算法题

文章目录 1.算法思想2.移动零3.复写零方法一方法二 4.快乐数5.盛水最多的容器方法一&#xff08;暴力求解&#xff09;方法二&#xff08;左右指针&#xff09; 6.有效三角形的个数方法一&#xff08;暴力求解&#xff09;方法二&#xff08;左右指针&#xff09; 7.两数之和8.…

ONLYOFFICE 8.1版本震撼来袭,让办公更高效、更智能

官网链接&#xff1a; 在线PDF查看器和转换器 | ONLYOFFICE 在线办公套件 | ONLYOFFICE 随着科技的不断发展&#xff0c;办公软件已经成为现代企业提高工作效率、实现信息共享的重要工具。在我国&#xff0c;一款名为ONLYOFFICE的在线办公套件受到了越来越多企业的青睐。今天…

Prompt-Free Diffusion: Taking “Text” out of Text-to-Image Diffusion Models

CVPR2024 SHI Labshttps://arxiv.org/pdf/2305.16223https://github.com/SHI-Labs/Prompt-Free-Diffusion 问题引入 在SD模型的基础之上&#xff0c;去掉text prompt&#xff0c;使用reference image作为生成图片语义的指导&#xff0c;optional structure image作为生成图片…

深入理解【 String类】

目录 1、String类的重要性 2、常用方法 2、1 字符串构造 2、2 String对象的比较 2、3 字符串查找 2、4字符转换 数值和字符串转换&#xff1a; 大小写转化&#xff1a; 字符串转数组&#xff1a; 格式转化&#xff1a; 2、5 字符串替换 2、6字符串拆分 2、7 字符串…

知名品牌因商标痛失市场:114家直营店山寨店7000多家!

奶茶知名品牌“鹿角巷”当年红遍大江南北&#xff0c;是最早的新茶饮品牌&#xff0c;但是当年商标注册存在问题&#xff0c;被同行奶茶品牌抢占了先机&#xff0c;发声明“对大陆商标注册细则不详&#xff0c;在商标注册过程中让假店钻了法律空档”&#xff0c;最夸张的时候全…

python如何不保留小数

1、int() 向下取整&#xff08;内置函数&#xff09; n 3.75 print(int(n)) >>> 3 n 3.25 print(int(n)) >>> 3 2、round() 四舍五入&#xff08;内置函数&#xff09; n 3.75 print(round(n)) >>> 4 n 3.25 print(round(n)) >>> 3 …

JavaScript(5)——数据类型和类型检测

字符串类型String 通过单引号&#xff08; &#xff09;、双引号(" "&#xff09;或反引号&#xff08; &#xff09;都叫字符串&#xff0c;单引号和双引号本质上没有区别&#xff0c;一般使用单引号。 注意&#xff1a; 无论单引号或是双引号必须成对使用单引号和…

人工智能系列-NumPy(二)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 链接数组 anp.array([[1,2],[3,4]]) print(第一个数组&#xff1a;) print(a) print(\n) bnp.array([[5,6],[7,8]]) print(第二个数组&#xff1a;) print(b) print(\n) print…

PHP智慧门店微信小程序系统源码

&#x1f50d;【引领未来零售新风尚】&#x1f50d; &#x1f680;升级启航&#xff0c;智慧零售新篇章&#x1f680; 告别传统门店的束缚&#xff0c;智慧门店v3微信小程序携带着前沿科技与人性化设计&#xff0c;正式启航&#xff01;这个版本不仅是对过往功能的全面优化&a…