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" # 网页目录

    </VirtualHost>

    监听8080端口

    Listen 8080

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

    <VirtualHost 192.168.100.10:8080>

    DocumentRoot "/var/www/html"

    </VirtualHost>
  • 重启服务生效:

    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"

    </VirtualHost>

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

    <VirtualHost 192.168.100.50:80>

    DocumentRoot "/var/www/html"

    </VirtualHost>
  • 重启服务并验证:

访问 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 # 绑定域名

    </VirtualHost>

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

    <VirtualHost 192.168.100.10:80>

    DocumentRoot "/var/www/html"

    ServerName html.example.com # 绑定域名

    </VirtualHost>
  • 重启服务并验证:

访问 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 规则,保障服务安全。

相关推荐
WebInfra4 分钟前
Rsdoctor 1.2 发布:打包产物体积一目了然
前端·javascript·github
Swaggy T10 分钟前
自动驾驶决策算法 —— 有限状态机 FSM
linux·人工智能·算法·机器学习·自动驾驶
探云抛雾؁ۣۖ23 分钟前
云计算---k8s运维~创建pod与pod的安全策略
运维·kubernetes·云计算
mjy_11128 分钟前
Linux下的软件编程——文件IO
java·linux·运维
用户527096487449036 分钟前
SCSS模块系统详解:@import、@use、@forward 深度解析
前端
兮漫天37 分钟前
bun + vite7 的结合,孕育的 Robot Admin 【靓仔出道】(十一)
前端·vue.js
xianxin_38 分钟前
CSS Text(文本)
前端
秋天的一阵风38 分钟前
😈 藏在对象里的 “无限套娃”?教你一眼识破循环引用诡计!
前端·javascript·面试
花小璇学linux42 分钟前
imx6ull-驱动开发篇19——linux信号量实验
linux·驱动开发·嵌入式软件
电商API大数据接口开发Cris42 分钟前
API 接口接入与开发演示:教你搭建淘宝商品实时数据监控
前端·数据挖掘·api