FChao
发布于 2025-08-25 / 44 阅读
0
0

LNMP基础:Nginx篇

•Nginx​​

•Apache​​

•IIS​​ (Internet Information Services)

•Tomcat

Web服务器:遵循 HTTP 协议,​​接收、解析来自网络客户端(如浏览器)的请求,并做出相应的响应​​。这个响应可以是一个静态文件(如 HTML、图片),也可以是委托其他程序(如 PHP、Python)生成的动态内容。


1.Nginx源码包安装

1.下载源码包

nginx: download

yum install tar
tar -xf nginx-1.22.1.tar.gz

2.进入目录,使用./configure --help查看配置选项

- 通过--with-http_ssl_module参数,Nginx会在编译时集成ngx_http_ssl_module模块,从而支持以下功能:
- 提供HTTPS服务(监听443端口)。
- 加密客户端与服务器之间的通信(基于SSL/TLS协议)。
- 加载和管理SSL证书(如.crt和.key文件)。

yum -y install gcc make zlib-devel openssl-devel

./configure --with-http_ssl_module

make && make install

目录结构

  • 如果是通过rpm包安装,配置文件在etc目录下

  • 源码安装时,/usr/local/nginx/是​​标准默认目录​​

    • conf 与服务相关的配置文件

      • nginx.conf 服务的主配置文件

      • nginx.conf.default 模板文件

    • logs 日志文件

      • 访问日志 access.log

      • 错误日志 error.log

      • 存放nginx的pid nginx.pid

    • html 网页脚本文件目录(.html .css .php)

      • 默认首页文件 index.html

    • sbin

      • 启动服务命令nginx

      • 旧版本备份文件nginxold

基础使用

  • /usr/local/nginx/sbin/nginx 启动服务

    • -s stop 停止服务

    • -help 查看帮助

    • -v 版本信息

    • -V 版本号 + 编译详情 + 模块列表

补充1:alias别名

  • 源码包安装方式可以使用较短命令使用nginx

1.​编辑Bash​​:~/.bashrc

2.# 常用别名示例
a.alias ll='ls -l'
b.alias update='sudo apt update && sudo apt upgrade'

3.source ~/.bashrc  

补充2:HTTP响应头

执行 curl -I http://目标网址命令会发送一个 ​​HTTP HEAD 请求​​,仅获取目标网址的响应头信息(不包含响应体)。返回的响应报文头包含服务器返回的元数据,用于描述资源状态、服务器配置和数据处理方式。

HTTP/1.1 200 OK
Server: nginx/1.26.3
Date: Mon, 24 Mar 2025 07:24:33 GMT
Content-Type: image/jpeg
Content-Length: 5297531
Last-Modified: Thu, 20 Mar 2025 08:39:39 GMT
Connection: keep-alive
ETag: "67dbd44b-50d57b"
Content-Disposition: attachment;
Accept-Ranges: bytes
  • 起始行为HTTP/1.1 200,这是响应报文头的标志(状态行),而非请求报文头(请求行如GET / HTTP/1.1)。

  • Server: nginx/1.26.3 服务器软件名称及版本号(如 Nginx、Apache)。

  • keep-alive字段明确表示此次连接是长连接,符合HTTP/1.1协议特性(默认支持连接复用)。

补充3: 源码包安装实现开机自启

1.创建服务文件​​ 创建文件 /etc/systemd/system/nginx.service

sudo vim /etc/systemd/system/nginx.service

2.写入配置内容​

将以下配置内容复制到文件中。​​请务必根据你的实际安装路径修改 PIDFileExecStartExecReloadExecStop等指令的路径​

。如果你的 Nginx 安装路径是默认的 /usr/local/nginx,那么以下配置通常无需修改。

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

参数说明

Type=forking: 表明 Nginx 服务将以守护进程(后台)模式运行。

PIDFile=...: 指定 Nginx 主进程的 PID 文件位置,Systemd 靠它来跟踪主进程。

ExecStart=...: 启动 Nginx 的命令。

ExecReload=...: 重新加载配置的命令(平滑重启)。

ExecStop=...: 停止 Nginx 的命令。

WantedBy=multi-user.target: 定义了在系统进入多用户模式时启动该服务

3.保存文件并退出编辑器​

例如在 vim中,按 Esc后输入 :wq回车。

4.重新加载 Systemd 配置​

让 Systemd 识别新创建的服务文件

sudo systemctl daemon-reload

5.​设置开机自启并启动服务​

sudo systemctl enable nginx  # 启用开机自动启动
sudo systemctl start nginx   # 立即启动 Nginx 服务

2.Nginx服务进阶

平滑升级

1.升级之前可以先确认当前版本号和pid

/usr/local/nginx/sbin/nginx-V
/usr/local/nginx/sbin/nginx -V
netstat -utnalp | grep nginx

2.解压并进入新版本nginx包的目录

./configure --with-http_ssl_module
- 低版本用了哪些选项,高版本也应该包含
make
- 编译之后objs目录会多出可执行命令。这个目录是 ​​Nginx 编译过程中的“工作间”和“仓库”​​,专门用于存放编译过程中产生的各种中间文件和最终产物。

3.在/usr/local/nginx/sbin/备份低版本的启动命令

cp nginx-1.25.4/objs/nginx /usr/local/nginx/sbin/ 拷贝高版本软件提供的启动命令
cd nginx-1.25.4 回到源码目录
makeupgrade 平滑升级

重新确认版本号和pid
/usr/local/nginx/sbin/nginx-V
/usr/local/nginx/sbin/nginx -V
netstat -utnalp | grep nginx
  • 在执行makegrade后,会自动进行-t检查语法、自动结束nginx.pid、发送kill -USR2信号,处理完所有的用户请求了就将其结束等一系列操作。

用户验证

  • 需要在nginx.conf手动填写验证的配置项

  • 可在server 块或 location 块中添加

auth_basic "input your name and password"; # 弹出认证对话框时显示的提示信息

auth_basic_user_file /usr/local/nginx/conf/pass; # 指向第2步创建的密码文件路径

yum -y install httpd-tools
- 此命令用于安装 htpasswd工具,该工具专门用于生成和管理用于基本认证的密码文件

htpasswd -c /usr/local/nginx/conf/pass admin    
- 创建密码文件,执行此命令后,会提示为 admin用户输入并确认密码
- c 参数表示 ​​Create​​(创建),仅在​​第一次创建​​新文件时使用,后续不需要使用-c

/usr/local/nginx/sbin/nginx -s reload 可以重载前-t检查

虚拟主机(配置文件说明)

  • 通过配置文件,让服务器根据不同域名、端口或IP区分请求,像有多台独立主机一样运行多个网站。

基于域名

server块​​:用于​​横向​​区分不同的网站(靠域名或端口)。

location块​​:用于​​纵向​​深入控制一个网站内部的不同请求(靠URI路径)。

# 博客网站的虚拟主机配置
server {
    listen 80;
    server_name www.myblog.com;
                             #location可以认为是匹配server_name也就是www.myblog.com后面的内容
                             #http://www.bbs.com/(匹配)或http://www.bbs.com/xxx.html(匹配)
    location / {             #当用户访问 www.bbs.com/这个路径时,就用这个location块的规则来处理​​。
        root /data/www/blog; # 当请求匹配到 location /后,去服务器上​​哪个文件夹里找文件​​。
        index index.html;    # 默认首页文件
    }
}

# 商城网站的虚拟主机配置
server {
    listen 80;
    server_name shop.myapp.com;

    location / {
        root /data/www/shop;
        index index.html;
    }
}
  • 根据配置文件,创建不同的网页目录和其下的index.html文件,在-t和-s reload后即可测试。

1. server块:定义虚拟主机

•​​作用​​:每个 server { ... }块就代表一个​​独立的网站(虚拟主机)​​。
•如何工作​​:Nginx 通过检查浏览器请求中的 Host字段(例如 Host: www.myblog.com)来决定使用哪个 server块来响应。

2. listen指令

•​​作用​​:告诉 Nginx 这个虚拟主机​​监听哪个网络端口​​。
•示例​​:listen 80;表示监听标准的 HTTP 端口。两个 server块可以监听同一个端口。

3. server_name指令

•​​作用​​:​​指定这个虚拟主机负责的域名​​。这是实现“不同域名访问不同内容”的核心。
•server_name www.myblog.com;→ 这个块只处理访问 www.myblog.com的请求。
•server_name shop.myapp.com;→ 这个块只处理访问 shop.myapp.com的请求。

4. location块:处理特定请求

•​​作用​​:location里面写的内容是定义如何响应访问​​某个路径​​的请求。location / { ... }是最常见的,它匹配这个网站的所有请求(如 /, /about.html, /images/logo.png)。
•​​location /中的 ​​/​​ 代表的是 ​​网站根目录的 URI​​,而不是服务器上的物理目录位置。换句话说,它匹配的是​​域名后面跟着的那部分路径​​。
•​​在上面的例子中,这个/会匹配​​所有以 /开头的请求​​,例如:
http://www.bbs.com/(匹配)
http://www.bbs.com/index.html(匹配)
http://www.bbs.com/users/login.php(匹配)
http://www.bbs.com/images/logo.png(匹配)
【如果配置为 location = /,则表示​​精确匹配根路径​​(仅匹配 http://localhost/,不包含子路径)。】

5. root指令

•作用​​:指定这个网站​​所有文件存放在服务器的哪个目录下​​。
•示例​​:root /data/www/blog;且请求 /index.html则Nginx 会去找 /data/www/blog/index.html文件。

6. index指令

•作用​​:当请求的是一个目录(如 /)时,Nginx 会自动尝试返回这个目录下的哪个文件作为首页。
•示例​​:index index.html;表示优先找 index.html文件。

基于端口或ip

  • Nginx 在处理一个请求时,会按照以下顺序选择使用哪个 server块来响应:

1.首先,匹配 listen指令​​:检查请求到达的 ​​IP 和端口​​。

2.然后,匹配 server_name指令​​:检查请求头中的 ​​Host字段​​(即域名)

3.当每个虚拟主机都监听​​独一无二的端口或IP+端口组合​​时,server_name就失去了匹配意义,因此可以任意设置。

4.注意:每个server块须指向​​独立资源目录​​。若所有的root配置相同(如均为/var/www/html),则无论访问哪个,Nginx都会返回该目录下的文件。若未显式配置index,Nginx会默认尝试加载index.html等文件。此时即使端口不同,只要默认文件名相同,返回内容必然一致。

######### 端口 8080 的网站 (公司官网) #########
server {
    listen       8080;  # 监听8080端口
    server_name  localhost; # 服务器名,此时可任意或保留localhost

    location / {
        root   /www/port8080; # 网站文件存放目录
        index  index.html;
    }
}

######### 端口 9090 的网站 (内部管理系统) #########
server {
    listen       9090;  # 监听9090端口
    server_name  localhost;

    location / {
        root   /www/port9090;
        index  index.html;
    }
}

使用端口区分时,listen处也可写作ip:端口。

######### IP 192.168.1.10 的网站 (对外官网) #########
server {
    listen       192.168.1.10:80; # 监听指定IP的80端口
    server_name  _; # 因为通过IP区分,域名可指定也可以省略,常用_或default

    location / {
        root   /www/ip_10;
        index  index.html;
    }
}

######### IP 192.168.1.20 的网站 (内部后台) #########
server {
    listen       192.168.1.20:80; # 监听另一个IP的80端口
    server_name  _;

    location / {
        root   /www/ip_20;
        index  index.html;
    }
}

补充1:nginx.conf文件配置

  • 分层结构:全局 → Events → HTTP → Server → Location。

# 全局块(全局配置,影响整个Nginx)
user  nginx;                     # 运行用户
worker_processes  auto;          # 工作进程数(通常设为CPU核心数)!
error_log  /var/log/nginx/error.log warn;  # 错误日志路径

# Events块(网络连接配置)
events {
    worker_connections  1024;    # 每个进程的最大连接数
}

# HTTP块(核心配置,包含所有HTTP相关设置)
http {
    include       /etc/nginx/mime.types;  #加载一个​​文件类型对照表​​,使浏览器知道收到的文件的类型
    default_type  application/octet-stream; #设置​​默认的文件类型​​

    # Server块(虚拟主机配置,可多个)
    server {
        listen       80;          # 监听端口
        server_name  example.com; # 域名

        # Location块(路由规则)
        location / {
            root   /var/www/html; # 网站根目录
            index  index.html;    # 默认首页
        }
    }
}

------------------------------------------------------------------------------------------
43.某企业使用 Nginx 作为Web服务器,由于近期业务侧所有员工需要经常查看某个实时销售数据,访问量较大,在不增加服务器情况下,以下哪几项能够提高业务访问的效率?【多选题】
ABD

A.在 nginx.conf 中配置提高types hash max size 的值
    此参数用于调整MIME类型哈希表的大小(如.html映射为text/html),仅影响Nginx解析文件扩展名的效率。在高并发场景下,​​它对连接处理能力或响应速度几乎无影响​​,且默认值通常已足够。

B.在 nginx.conf 配置文件中提高worker connections的值
    worker_connections决定每个worker进程可处理的并发连接数上限​​。访问量激增时,提高此值(如从默认1024提升至4096)可直接增加Nginx的总并发处理能力,避免连接被拒绝(返回502错误)。

C.在 nginx.conf 中配置tcp_nodelay 为off
    此项需要保持打开,tcp_nodelay on(默认值)会禁用Nagle算法,​​立即发送小数据包,减少延迟​​,对实时性要求高的场景(如实时销售数据)至关重要。若设为off,数据包会等待累积再发送,​​显著增加响应延迟​

D.在 nginx.conf 配置文件中提高worker_process 的值
​​    worker_processes控制Nginx的工作进程数量​​。提高此值(如设为CPU核心数或更高)

补充2:nginx子配置文件

  • 每个子配置文件定义一个server块(即一个虚拟主机),实现多站点隔离管理。

/etc/nginx/
├── nginx.conf          # 主配置文件
├── conf.d/             # 子配置目录(通用)
└── sites-available/    # 可用站点配置(推荐)
└── sites-enabled/     # 启用站点的符号链接(实际加载目录)

1.​​创建子配置目录​​ (如果不存在)

2.在主配置文件的 http { ... }块内,添加一行 include指令,用于引入所有子配置文件。
http {
    # 添加include指令,引入子配置文件
    include /etc/nginx/conf.d/*.conf; # 路径可自定义,常用/etc/nginx/conf.d/或vhosts/
}

3.​​创建子配置文件
vim /etc/nginx/conf.d/game.conf
##########www.game.com############
server {
    listen 192.168.88.52:8088;
    #server_name  www.game.com ;
    location / {
        root game;
        index index.html index.php;
    }
}

4.nginx -s reload

3.Nginx解释php脚本

•静态网站​​:服务器上存储的是预先制作好的固定HTML文件,​​内容不会自动改变​​。仅由​​前端技术​​(HTML, CSS, JavaScript)构成,服务器直接返回文件。

•动态网站​​:服务器上运行着程序(如PHP),该程序会根据每个请求​​实时生成​​不同的HTML页面。由​​后端技术​​(PHP, Java, Python等)生成​​前端代码​​(HTML, CSS, JS),然后由服务器发送给浏览器。

  1. 关闭SELinux和防火墙

  2. yum install pcre-devel -y 主要用于源码装包支持正则表达式的开发与编译

  3. yum install -y php 解释器

  4. yum install -y php-devel 功能拓展包

  5. yum install -y php-fpm服务,管理php进程。nginx服务接收到.php的网页请求时交给fpm处理。

  6. 在/usr/local/nginx/html/ 添加一个测试用的php页面。

<?php
phpinfo();
?>
  1. 编辑nginx主配置文件nginx.conf

vim +65 /usr/local/nginx/conf/nginx.conf 打开时将光标直接定位在65行

location ~ \.php$ {
    root           /usr/local/nginx/html; # 通常需要指定明确的网站根目录
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; # 使用动态根目录
    include        fastcgi_params; # 引入通用参数集
}

1.location匹配到命名为xxx.php请求时执行以下操作。定义一个正则匹配规则,捕获所有以.php结尾的请求(如/index.php)。
  i.正则表达式,\.转义点号,$匹配字符串结尾。~ 符号表示 ​​区分大小写的正则表达式匹配​​。

2.设置PHP文件的根目录为html(相对路径,默认指向Nginx安装目录下的html文件夹)。

3.将PHP请求转发到本地的FastCGI进程(如PHP-FPM),监听端口为9000。需确保PHP-FPM服务已启动并监听该端口

4.当请求这里location匹配的目录时,默认加载的文件名。

  i.假设请求的 URI 以斜杠 (/) 结尾时,Nginx 会自动将这个指定的索引文件(例如 index.php)附加到 URI 后面 ,请求 /api/ → 实际执行 /api/index.php
  ii.该 location:~ \.php$  仅匹配以 .php 结尾的请求(如 /test.php),而目录请求(如 /)不会进入此块,因此这里fastcgi_index不会生效

5.手动设置一个名为 SCRIPT_FILENAME的参数,告诉后端的 PHP-FPM:“请执行 /scripts目录下,名为 $fastcgi_script_name的文件”。
  然而在同一 location块中已设置了root /html;,.php文件实际存放在这个html目录下(例如,访问 /index.php,服务器会去找 html/index.php)。
  这行配置文件却让 Nginx 告诉 PHP-FPM 去一个名为 /scripts的绝对路径下找文件。因此,注释掉这行冲突的配置。

6.一般而言,include都应该修改为fastcgi.conf,专门解释php的变量名。还可以自​​适应在server或location块中root目录的更改。
  
7.检查:/usr/local/nginx/sbin/nginx -t

修改后:
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            include        fastcgi.conf;
        }

下图是​​fastcgi_params配置文件的标准内容​​。通过一系列 fastcgi_param指令,将 Nginx 接收到的​​客户端请求信息​​(如请求头、客户端IP、请求的URL等)和​​服务器自身的信息​​,转化为一系列​​环境变量​​,然后传递给后端的 PHP 处理器(例如 PHP-FPM)。

  • rpm -ql php-fpm​​ php-fpm软件包安装的​​所有文件

  • rpm -qc php-fpm​ (仅列出配置文件)

vim /etc/php-fpm.d/www.conf 注意此配置文件注释是;

原本的配置Unix Socket (/run/php-fpm/www.sock),​进程间通信 (IPC)​。它假设Nginx和PHP-FPM安装在同一台服务器上,性能更好,因为通信不经过网络。

划将​​Web服务器(Nginx,处理静态请求)​​ 和 ​​应用服务器(PHP-FPM,处理动态请求)​​ 拆分开,部署到两台或多台独立的服务器上时,就必须使用TCP Socket(127.0.0.1:9000)​。

如果要使用socket,前面nginx的配置文件必须改为
fastcgi_pass unix:/run/php-fpm/www.sock;

由于前面已经配置了fastcgi_pass 127.0.0.1:9000;
此处不论是否同一台机器都必须修改

最后,systemctl enable php-fpm --now 开机自启

4.https和数据库

启用https

  • HTTPS就是在 HTTP 协议的基础上,增加了一个 ​​SSL/TLS 加密层​​。这个加密层负责在浏览器和 Nginx 服务器之间建立一条安全通道,确保传输的数据无法被窃听或篡改。

  • HTTPS先用​​非对称加密​​来安全地交换密钥,然后再用​​对称加密​​来高效地加密实际传输的数据。

    • 对称加密:加密和解密使用相同的密钥 (AES DES)

    • 非对称加密:加密和解密使用不同的密钥 公钥负责加密数据 私钥负责解密数据 (RSA DSA)

  • ​​SSL​​ 指的是​​安全套接层​​(Secure Sockets Layer),是一种​​加密协议。​​SSL证书​​是实现该协议​​身份验证和密钥交换功能​​的​​数字凭证​​,它们密切相关,但​​不是一回事​​。

  1. Nginx 服务器持有一对密钥:​​公钥​​和​​私钥​​。公钥放在 ​​SSL 证书​​ 中发送给浏览器,私钥自己严格保密。

  2. 浏览器用收到的​​公钥​​,加密生成一个随机的​​对称会话密钥​​,然后发送给服务器。服务器用自己的​​私钥​​解密,就能得到这个会话密钥。(RSA)

  3. 握手完成后,浏览器和服务器​​都拥有了相同的对称会话密钥​​。之后所有的 HTTP 请求和响应数据,都使用这个​​对称密钥​​进行高速的加密和解密。这是因为对称加密的计算效率远高于非对称加密。

  4. 启用https的前提是--with-http_ssl_module和openssl-devel已安装

  5. cd /usr/local/nginx/conf/

  6. openssl genrsa > cert.key 生成本地私钥 cert.key

  7. openssl req -new -x509 -key cert.key > cert.pem

i.这个步骤,就是在​​模拟权威机构(CA)的行为​​,为自己的服务器创建一张​​测试用的数字证书cert.pem,自己充当了“发证机关”。

ii.x509是证书国际标准X.509的格式,cert.key和cert.pem都是nginx默认调用的名称

​iii.​最终目的​​:将生成的 cert.pem(证书)和 cert.key(私钥)文件,配置到 Nginx 中,从而让网站能够启用 HTTPS 加密通信。

iiii.命令中的 req(request)会开启交互式输入一系列证书相关信息

修改nginx.conf 文件,启用ssl配置

vim +98 /usr/local/nginx/conf/nginx.conf

98,115 s/#//通过vim将井号替换掉

# HTTPS server 配置块开始
server {
    # 监听443端口,并启用SSL加密
    listen       443 ssl;
    # 指定服务器名称,可以是域名或IP地址
    server_name  localhost;

    # 指定SSL证书文件路径(您生成的cert.pem文件)
    ssl_certificate      cert.pem;
    # 指定SSL私钥文件路径(您之前生成的cert.key文件)
    ssl_certificate_key  cert.key;

    # 设置SSL会话缓存,shared:SSL:1m表示所有工作进程共享的缓存,大小为1MB
    ssl_session_cache    shared:SSL:1m;
    # 设置SSL会话超时时间为5分钟
    ssl_session_timeout  5m;

    # 配置加密算法套件,HIGH:!aNULL:!MD5表示使用高强度加密算法,禁用匿名和非MD5算法
    ssl_ciphers  HIGH:!aNULL:!MD5;
    # 优先使用服务器端配置的加密算法套件
    ssl_prefer_server_ciphers  on;

    # 定义处理请求的位置块
    location / {
        # 设置网站根目录(相对路径,通常相对于Nginx安装目录)
        root   html;
        # 设置默认索引文件
        index  index.html index.htm;
    }
}
  1. /usr/local/nginx/sbin/nginx -s reload使其生效

  2. 临时验证:C:\Windows\System32\drivers\etc\hosts 临时添加host使用https://域名访问。或curl -vk https://<你的服务器IP或域名>:<端口>

注意:Nginx 会根据请求的​​端口​​(80 or 443)和 ​​Host头部​​(域名,如 example.com),从 http块内的所有 server块中挑选出​​唯一的一个​​来处理该请求。一个请求​​绝不会​​同时被两个 server块处理。

建议如果开启了https,将所有通过http的80端口的请求​​永久重定向(301)​​ 到对应的HTTPS地址上。这样可以确保所有用户最终都访问到安全且一致的内容。

启用https+php

在https的server块处配置处理php的location即可。

        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            include        fastcgi.conf;
        }

补充:https访问过程


​​1. 域名解析(DNS查询)​​
•用户输入​​:https://www.example.com
•​​查询顺序​​:① 浏览器缓存 → ② 操作系统缓存 → ③ 路由器缓存 → ④ ISP(运营商)DNS缓存
•未命中缓存时​​:向根域名服务器(.) → 顶级域名服务器(com) → 二级域名服务器(example.com) → 三级域名服务器(www.example.com)逐级查询
•结果​​:获取目标服务器IP(如 10.8.8.168)

​​2. 建立安全连接(TCP三次握手 + SSL/TLS握手)​​

•步骤一 (TCP连接)​​:三次握手
① 浏览器向服务器IP的443端口(默认HTTPS端口)发起SYN请求→ ② 服务器回复 SYN+ACK→ ③ 客户端回ACK
​​结果​​:建立可靠的​​TCP​​通信通道。(​​此为图中原步骤​​)

•​​步骤二 (SSL/TLS握手)​​: ← ​​【此为HTTPS新增的核心步骤】​​
① ​​Client Hello​​:浏览器告知服务器其支持的加密算法和SSL/TLS版本。
② ​​Server Hello​​:服务器选择加密套件,并发送其​​SSL证书​​(含公钥)。
③ ​​验证证书​​:浏览器验证证书是否由可信机构颁发、是否过期、域名是否匹配。
④ ​​密钥交换​​:浏览器用证书中的公钥加密一个随机的​​会话密钥​​并发送给服务器。
⑤ ​​会话开始​​:服务器用私钥解密获取会话密钥。此后双方使用此密钥加密通信。
​​结果​​:在TCP连接之上,建立了一条​​加密的​​安全通道。

​​3. 发送加密请求与接收加密响应(HTTPS协议)​​

•浏览器发送HTTP请求​​:请求内容(如 GET /index.html)在发出前​​先由会话密钥加密​​。
•服务器返回响应​​:响应内容(HTML、CSS等)在返回前也​​先由会话密钥加密​​。
•状态码​​:同样包含 200、404等,但传输过程是加密的。
​​关键点​​:应用层协议仍然是HTTP,但所有数据在传输层都被SSL/TLS加密,变成了HTTPS。

​​4. 页面渲染(浏览器引擎工作)​​
•浏览器接收到加密的响应后,先用会话密钥​​解密​​。

php连接mysql数据库


评论