Web 服务详解:HTTP 与 HTTPS 配置

Web 服务详解:HTTP 与 HTTPS 配置

一、HTTP 服务概述

HTTP(Hypertext Transfer Protocol,超文本传输协议)是用于在网络上传输网页数据的基础协议,默认使用80 端口,以明文形式传输数据。常见的 HTTP 服务软件包括:

  • httpd(Apache):最流行的开源 Web 服务器,功能丰富,配置灵活。
  • Nginx:轻量级高性能 Web 服务器,擅长处理高并发请求。
  • Tomcat:支持 Java Servlet 和 JSP 的应用服务器,常用于部署 Java Web 应用。

本文重点讲解httpd(Apache) 的配置与使用。

二、httpd(Apache)核心配置

1. 关键文件与目录

|----------------------------------------------|-----------------------------------------|
| 路径 / 文件 | 作用描述 |
| /etc/httpd/conf/httpd.conf | httpd 主配置文件,包含全局参数(端口、日志等)。 |
| /var/www/html/ | 默认网页存放目录,访问服务器 IP 时默认加载此目录下的index.html。 |
| /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf | 虚拟主机配置模板文件。 |
| /etc/httpd/conf.d/ | 虚拟主机配置文件存放目录(httpd 会自动加载此目录下的.conf文件)。 |

2. 虚拟主机配置

虚拟主机(Virtual Host)允许在一台服务器上通过不同的标识(IP、端口、域名)提供多个网站服务,常见配置方式有三种。

前提条件
  • 已安装 httpd 服务:yum -y install httpd
  • 启动服务并关闭防火墙 / SELinux:

    systemctl start httpd
    systemctl enable httpd

    systemctl stop firewalld
    systemctl disable firewalld

    setenforce 0

  • 准备测试网页目录及文件:

    创建两个测试目录

    mkdir -p /var/www/one /var/www/html

    写入测试内容

    echo "abcd" > /var/www/one/index.html

    echo "Welcome to luoqi" > /var/www/html/index.html

方式 1:相同 IP,不同端口

通过不同端口区分不同网站(如 80 端口和 8080 端口)。

  • 复制虚拟主机模板文件:

    cp -p /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf /etc/httpd/conf.d/

  • 编辑虚拟主机配置文件:

    vim /etc/httpd/conf.d/httpd-vhosts.conf

  • 添加以下配置:

    80端口对应/var/www/one目录

    <VirtualHost 192.168.100.10:80>

    DocumentRoot "/var/www/one" # 网页目录

    监听8080端口

    Listen 8080

    8080端口对应/var/www/html目录

    <VirtualHost 192.168.100.10:8080>

    DocumentRoot "/var/www/html"

  • 重启服务生效:

    systemctl restart httpd

  • 验证:

方式 2:不同 IP,相同端口

服务器绑定多个 IP,通过不同 IP 区分网站(均使用 80 端口)。

  • 为服务器添加第二个 IP(以ens33网卡为例):

    vim /etc/sysconfig/network-scripts/ifcfg-ens33

添加以下内容:

复制代码
IPADDR1=192.168.100.50 # 第二个IP

PREFIX1=24
  • 重启网络服务:

    systemctl restart network

  • 编辑虚拟主机配置文件:

    vim /etc/httpd/conf.d/httpd-vhosts.conf

  • 添加以下配置:

    IP 192.168.100.10 对应/var/www/one目录

    <VirtualHost 192.168.100.10:80>

    DocumentRoot "/var/www/one"

    IP 192.168.100.50 对应/var/www/html目录

    <VirtualHost 192.168.100.50:80>

    DocumentRoot "/var/www/html"

  • 重启服务并验证:

访问 http://192.168.100.10 → 显示 /var/www/one 内容

访问 http://192.168.100.50 → 显示 /var/www/html 内容

方式 3:相同 IP、端口,不同 FQDN(域名)

通过不同域名(如one.example.comhtml.example.com)区分网站,需配合 DNS 服务解析域名到同一 IP。

  • 配置 DNS 正向解析(参考 DNS 服务配置):

在 DNS 服务器的example.com区域文件中添加:

复制代码
one IN A 192.168.100.10 # one.example.com 解析到服务器IP

html IN A 192.168.100.10 # html.example.com 解析到服务器IP

重启 DNS 服务:systemctl restart named

  • 编辑虚拟主机配置文件:

    vim /etc/httpd/conf.d/httpd-vhosts.conf

  • 添加以下配置:

    域名 one.example.com 对应/var/www/one目录

    <VirtualHost 192.168.100.10:80>

    DocumentRoot "/var/www/one"

    ServerName one.example.com # 绑定域名

    域名 html.example.com 对应/var/www/html目录

    <VirtualHost 192.168.100.10:80>

    DocumentRoot "/var/www/html"

    ServerName html.example.com # 绑定域名

  • 重启服务并验证:

访问 http://one.example.com → 显示 /var/www/one 内容

访问 http://html.example.com → 显示 /var/www/html 内容

三、HTTPS 服务概述

HTTPS(HTTP Secure)是 HTTP 的加密版本,通过SSL/TLS 协议 对传输数据加密,默认使用443 端口,确保数据传输的安全性(防止窃听、篡改)。

核心特点

  • 加密机制:HTTPS = HTTP + SSL/TLS,通过证书实现身份验证和数据加密。
  • 端口:默认 443 端口(需在防火墙开放)。
  • 证书:需通过 CA(证书颁发机构)签署的证书验证服务器身份,避免 "中间人攻击"。

四、HTTPS 加密原理(SSL/TLS 握手流程)

  1. ClientHello:客户端向服务器发送支持的 SSL/TLS 版本、加密算法列表,及随机数random_c。
  2. ServerHello:服务器确认使用的版本和算法,返回随机数random_s、服务器证书(含公钥)。
  3. ClientKeyExchange:客户端验证证书有效性后,生成预主密钥pre_master,用服务器公钥加密后发送。
  4. 会话密钥生成:服务器用私钥解密pre_master,双方基于random_c + random_s + pre_master生成会话密钥,后续通信使用该密钥加密。

五、HTTPS 配置(基于 httpd 与自建 CA)

1. 环境准备

  • CA 服务器 :IP 192.168.100.10,负责生成根证书和签署服务端证书。
  • Web 服务器 :IP 192.168.100.20,部署 httpd 并配置 HTTPS。

2. 自建 CA(证书颁发机构)

(1)openssl 配置文件关键参数​

openssl 的主配置文件为/etc/pki/tls/openssl.cnf,其中与 CA 相关的重要参数如下:​

复制代码
####################################################################​

[ CA_default ]​

​

dir = /etc/pki/CA # 所有CA相关文件的存放根目录​

certs = $dir/certs # 证书所在目录​

database = $dir/index.txt # 证书数据库文件目录​

new_certs_dir = $dir/newcerts # 新生成证书的存放目录​

​

certificate = $dir/cacert.pem # CA自签名证书(根证书)​

serial = $dir/serial # 证书序列号文件​

private_key = $dir/private/cakey.pem# CA私钥文件路径​

​
步骤 1:配置 CA 目录与文件

CA 相关文件默认存放在/etc/pki/CA/,需创建必要文件(参考/etc/pki/tls/openssl.cnf配置):

复制代码
# 进入CA目录

cd /etc/pki/CA/

# 创建私钥(权限需严格限制,仅root可读写)

(umask 077; openssl genrsa -out private/cakey.pem)

# 生成自签名根证书(CA证书)

openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365

# 按提示输入信息
(国家:CN,
省份:HB,
城市:WH,
组织:LQ,
主机名:ca.example.com等)

# 创建证书数据库和序列号文件

touch index.txt # 证书索引数据库

echo 01 > serial # 证书序列号(初始为01)
(2)openssl 关键命令选项说明​
  • -x509:生成自签名证书格式,专用于创建私有 CA。
  • -new:生成新证书的签署请求。
  • -key:指定生成请求时用到的私钥文件路径。
  • -out:指定生成后的文件存放路径,如果是自签名操作,将直接生成签署过的证书。
  • -days:指定证书有效期,默认是 365 天。

3. Web 服务器配置 HTTPS

步骤 1:生成服务端私钥与证书请求
复制代码
# 在Web服务器上安装httpd和SSL模块

yum -y install httpd mod_ssl

# 创建存放证书的目录

mkdir /etc/httpd/ssl

# 生成服务端私钥

(umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key)

# 生成证书请求文件(CSR)

openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365

# 输入信息需与CA一致,主机名填Web服务器域名(如sl1.example.com)
步骤 2:向 CA 提交证书请求并获取签名证书
复制代码
# 将CSR文件发送到CA服务器

scp /etc/httpd/ssl/httpd.csr root@ca.example.com:/etc/pki/CA/

# 在CA服务器上签署证书

cd /etc/pki/CA/

openssl ca -in httpd.csr -out httpd.crt -days 365

# 提示时输入"y"确认签署

# 将签署好的证书发送回Web服务器

scp httpd.crt root@192.168.100.20:/etc/httpd/ssl/
步骤 3:配置 httpd 支持 HTTPS
  • 编辑 SSL 配置文件:

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

修改证书和私钥路径:

复制代码
SSLCertificateFile /etc/httpd/ssl/httpd.crt # 服务端证书

SSLCertificateKeyFile /etc/httpd/ssl/httpd.key # 服务端私钥
  • 配置 HTTPS 虚拟主机(绑定 443 端口):

    vim /etc/httpd/conf.d/httpd-vhosts.conf

添加以下内容:

复制代码
<VirtualHost 192.168.100.20:443>

DocumentRoot "/var/www/test" # HTTPS网页目录

ServerName sl1.example.com # 绑定域名

SSLEngine on # 启用SSL

SSLCertificateFile /etc/httpd/ssl/httpd.crt

SSLCertificateKeyFile /etc/httpd/ssl/httpd.key

</VirtualHost>
  • 创建测试网页:

    mkdir /var/www/test

    echo "HTTPS Test Page" > /var/www/test/index.html

  • 重启 httpd 服务:

    systemctl restart httpd

4. 客户端验证 HTTPS

  1. 在客户端导入 CA 根证书(信任自建 CA):

    从CA服务器下载根证书

    scp root@192.168.100.10:/etc/pki/CA/cacert.pem /tmp/

(Windows/Linux 客户端需在浏览器中导入该证书,信任 CA)

  1. 访问 HTTPS 网站:

浏览器输入 https://sl1.example.com,确认连接加密(显示锁图标),页面显示 /var/www/test 内容。

六、总结

  • HTTP 服务:通过 httpd 的虚拟主机功能,可基于 IP、端口、域名部署多个网站,核心是配置DocumentRoot和绑定标识。
  • HTTPS 服务:在 HTTP 基础上添加 SSL/TLS 加密,需通过 CA 签署证书实现身份验证,配置重点是证书路径和 SSL 引擎启用。

实际生产环境中,建议使用可信 CA(如 Let's Encrypt)颁发的证书,并合理配置防火墙和 SELinux 规则,保障服务安全。

相关推荐
橙子家2 小时前
浏览器缓存之【基础键值存储】:Local storage 和 Session storage
前端
星星在线4 小时前
MusicFree:一个「All in One」的个人音乐服务器,让听歌回归简单
前端·后端
IT_陈寒5 小时前
Redis的SETNX并发问题让我加了三天班
前端·人工智能·后端
demo007x5 小时前
Docling 文档转换以及技术架构分析
前端·后端·程序员
京东云开发者6 小时前
京东市民服务又“上新”!这次是黑龙江“龙易办”
前端
袋鱼不重7 小时前
我的神奇同事,AI 用多了居然写了个 Open In Codex
前端·后端·ai编程
大树887 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠7 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
Fireworks7 小时前
深入vue3源码解读 -- 1、响应式的基础概念
前端
程序员黑豆7 小时前
JDK 下载安装与配置详细教程
java·前端·ai编程