ENGINE X - Nginx
快速上手指南 [TOC]
🌐 1. Nginx
基本概念 Nginx
是目前最流行的 Web 服务器软件,也是互联网公司和网站的首选。一开始是由一个名为 Igor Sysoev
的俄罗斯程序员开发的,目的是用于解决 C10K
问题,C10K
问题是指服务器同时支持成千上万个并发客户端的问题。这个问题在当时是非常严重的,因为当时的服务器软件都是单线程的,所以在高并发的情况下,服务器的性能会变得非常的差。
Nginx
的出现很好的解决了这个问题,在 Nginx
官方的测试结果中,Nginx
可以支持 50000
个并发连接,在后来的发展中,Nginx
也逐渐成为了最流行的 Web 服务器软件。
Nginx
具有 epoll
I/O多路复用 、高并发 、高性能 、低内存消耗 、热部署 等优势。
🌐 2. Nginx
安装配置 2.1 通过包管理工具安装 Nginx
① 在 Linux 环境下:
执行 sudo apt update
更新 apt
包,并执行 sudo apt install nginx
安装 Nginx
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 nilera@nilera-virtual-machine:~$ sudo apt update [sudo] password for nilera: Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [129 kB] Hit:3 https://packages.microsoft.com/repos/edge stable InRelease Hit:1 https://packages.microsoft.com/repos/code stable InRelease Hit:4 https://ppa.launchpadcontent.net/christian-boxdoerfer/fsearch-stable/ubuntu jammy InRelease Hit:5 https://ppa.launchpadcontent.net/git-core/ppa/ubuntu jammy InRelease Hit:6 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy InRelease Hit:7 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates InRelease Hit:8 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-backports InRelease Fetched 129 kB in 4s (29.4 kB/s) Reading package lists... Done Building dependency tree... Done Reading state information... Done 271 packages can be upgraded. Run 'apt list --upgradable' to see them. nilera@nilera-virtual-machine:~$ sudo apt install nginx Reading package lists... Done Building dependency tree... Done Reading state information... Done The following additional packages will be installed: libnginx-mod-http-geoip2 libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream libnginx-mod-stream-geoip2 nginx-common nginx-core Suggested packages: fcgiwrap nginx-doc The following NEW packages will be installed: libnginx-mod-http-geoip2 libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream libnginx-mod-stream-geoip2 nginx nginx-common nginx-core 0 upgraded, 9 newly installed, 0 to remove and 271 not upgraded. Need to get 697 kB of archives. After this operation, 2,395 kB of additional disk space will be used. Do you want to continue ? [Y/n] Y Get:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 nginx-common all 1.18.0-6ubuntu14.4 [40.0 kB] Get:2 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libnginx-mod-http-geoip2 amd64 1.18.0-6ubuntu14.4 [11.9 kB] Get:3 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libnginx-mod-http-image-filter amd64 1.18.0-6ubuntu14.4 [15.4 kB] Get:4 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libnginx-mod-http-xslt-filter amd64 1.18.0-6ubuntu14.4 [13.7 kB] Get:5 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libnginx-mod-mail amd64 1.18.0-6ubuntu14.4 [45.7 kB] Get:6 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libnginx-mod-stream amd64 1.18.0-6ubuntu14.4 [72.9 kB] Get:7 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libnginx-mod-stream-geoip2 amd64 1.18.0-6ubuntu14.4 [10.1 kB] Get:8 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 nginx-core amd64 1.18.0-6ubuntu14.4 [484 kB] Get:9 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 nginx amd64 1.18.0-6ubuntu14.4 [3,872 B] Fetched 697 kB in 5s (128 kB/s) debconf: unable to initialize frontend: Dialog debconf: (Dialog frontend requires a screen at least 13 lines tall and 31 columns wide.) debconf: falling back to frontend: Readline Preconfiguring packages ... Selecting previously unselected package nginx-common. (Reading database ... 229379 files and directories currently installed.) Preparing to unpack .../0-nginx-common_1.18.0-6ubuntu14.4_all.deb ... Unpacking nginx-common (1.18.0-6ubuntu14.4) ... Selecting previously unselected package libnginx-mod-http-geoip2. Preparing to unpack .../1-libnginx-mod-http-geoip2_1.18.0-6ubuntu14.4_amd64.deb ... Unpacking libnginx-mod-http-geoip2 (1.18.0-6ubuntu14.4) ... Selecting previously unselected package libnginx-mod-http-image-filter. Preparing to unpack .../2-libnginx-mod-http-image-filter_1.18.0-6ubuntu14.4_amd64.deb ... Unpacking libnginx-mod-http-image-filter (1.18.0-6ubuntu14.4) ... Selecting previously unselected package libnginx-mod-http-xslt-filter. Preparing to unpack .../3-libnginx-mod-http-xslt-filter_1.18.0-6ubuntu14.4_amd64.deb ... Unpacking libnginx-mod-http-xslt-filter (1.18.0-6ubuntu14.4) ... Selecting previously unselected package libnginx-mod-mail. Preparing to unpack .../4-libnginx-mod-mail_1.18.0-6ubuntu14.4_amd64.deb ... Unpacking libnginx-mod-mail (1.18.0-6ubuntu14.4) ... Selecting previously unselected package libnginx-mod-stream. Preparing to unpack .../5-libnginx-mod-stream_1.18.0-6ubuntu14.4_amd64.deb ... Unpacking libnginx-mod-stream (1.18.0-6ubuntu14.4) ... Selecting previously unselected package libnginx-mod-stream-geoip2. Preparing to unpack .../6-libnginx-mod-stream-geoip2_1.18.0-6ubuntu14.4_amd64.deb ... Unpacking libnginx-mod-stream-geoip2 (1.18.0-6ubuntu14.4) ... Selecting previously unselected package nginx-core. Preparing to unpack .../7-nginx-core_1.18.0-6ubuntu14.4_amd64.deb ... Unpacking nginx-core (1.18.0-6ubuntu14.4) ... Selecting previously unselected package nginx. Preparing to unpack .../8-nginx_1.18.0-6ubuntu14.4_amd64.deb ... Unpacking nginx (1.18.0-6ubuntu14.4) ... Setting up nginx-common (1.18.0-6ubuntu14.4) ... debconf: unable to initialize frontend: Dialog debconf: (Dialog frontend requires a screen at least 13 lines tall and 31 columns wide.) debconf: falling back to frontend: Readline Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /lib/systemd/system/nginx.service. Setting up libnginx-mod-http-xslt-filter (1.18.0-6ubuntu14.4) ... Setting up libnginx-mod-http-geoip2 (1.18.0-6ubuntu14.4) ... Setting up libnginx-mod-mail (1.18.0-6ubuntu14.4) ... Setting up libnginx-mod-http-image-filter (1.18.0-6ubuntu14.4) ... Setting up libnginx-mod-stream (1.18.0-6ubuntu14.4) ... Setting up libnginx-mod-stream-geoip2 (1.18.0-6ubuntu14.4) ... Setting up nginx-core (1.18.0-6ubuntu14.4) ... * Upgrading binary nginx [ OK ] Setting up nginx (1.18.0-6ubuntu14.4) ... Processing triggers for man-db (2.10.2-1) ... Processing triggers for ufw (0.36.1-4ubuntu0.1) ...
② 在 Mac OS 环境下:
③ 在 Windows 环境下:
或者使用:
2.2 通过源码编译的方式安装 Nginx
Nginx
是使用 C
语言开发的,因此可以像其他 C 语言的项目一样,下载 Nginx
的源码到自己的服务器上,然后执行预编译、编译和安装的过程。
① 预编译
1 2 3 4 5 6 7 ./configure --sbin-path=/usr/local/nginx/nginx \ --conf-path=/usr/local/nginx/nginx.conf \ --pid-path=/usr/local/nginx/nginx/pid \ --with-http_ssl_module \ --with-pcre=../pcre2-10.39 \ --with-zlib=../zlib-1.2.11
② 编译
③ 安装
2.3 使用 Docker
来安装 Nginx
🌐 3. Nginx
常用命令 3.1 服务的启动和停止 3.1.1 服务的启动 安装完成后,可以直接在命令行输入 nginx
启动服务,若是没有出现信息则说明启动成功;若是启动失败,则会输出启动失败的原因,此时需要根据错误原因进行排查。
可能会遇到的问题:
问题描述
问题原因
解决方案
运行 nginx
命令出现错误:nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)
权限问题导致无法正常启动 Nginx
。
使用 sudo nginx
命令提高用户执行的权限。
运行 sudo nginx
命令出现错误:nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Unknown error) ... nginx: [emerg] still could not bind()
大概率是 80
端口已经被绑定了,或者是之前已经启动了 Nginx
导致端口冲突。可以查看 80
端口的占用情况进行进一步操作。
使用 kill
命令杀死占用端口的程序,然后重新运行 sudo nginx
命令。
访问 <your ipaddr>:8080
出现以下欢迎界面则表示 Nginx
启动成功。
3.1.2 查看 Nginx
的进程 使用 ps -ef|grep nginx
可以查看 Nginx
进程。这个其实并不是 Nginx
的命令,而是 Linux
自带的命令。
1 2 3 4 5 6 7 nilera@nilera-virtual-machine:~$ ps -ef|grep nginx root 14461 1 0 10:43 ? 00:00:00 nginx: master process nginx www-data 14462 14461 0 10:43 ? 00:00:00 nginx: worker process www-data 14463 14461 0 10:43 ? 00:00:00 nginx: worker process www-data 14464 14461 0 10:43 ? 00:00:00 nginx: worker process www-data 14465 14461 0 10:43 ? 00:00:00 nginx: worker process nilera 14542 11143 0 10:43 pts/0 00:00:00 grep --color=auto nginx
这里可以看到 Nginx
的进程包括 Master
进程 和 Worker
进程 。
Master
进程 就是Nginx
的主进程,他主要负责读取和验证配置文件,并管理 Worker
进程 ,将工作分配给 Worker
进程 。
Worker
进程 就是Nginx
的工作进程,其主要负责实际的请求,完成具体的工作。
Master
进程 只有一个,而**Worker
进程**可以有很多个,Worker
进程的数量可以通过配置文件来调整。
或者我们可以使用 lsof -i:80
来查看 80
端口的占用情况,需要注意:lsof
命令并不适用于所有的 Linux 发行版,有些发行版可能需要安装该命令。
1 2 3 4 5 6 7 8 9 10 11 12 13 nilera@nilera-virtual-machine:~$ sudo lsof -i:80 [sudo] password for nilera: COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 14461 root 6u IPv4 141914 0t0 TCP *:http (LISTEN) nginx 14461 root 7u IPv6 141915 0t0 TCP *:http (LISTEN) nginx 14462 www-data 6u IPv4 141914 0t0 TCP *:http (LISTEN) nginx 14462 www-data 7u IPv6 141915 0t0 TCP *:http (LISTEN) nginx 14463 www-data 6u IPv4 141914 0t0 TCP *:http (LISTEN) nginx 14463 www-data 7u IPv6 141915 0t0 TCP *:http (LISTEN) nginx 14464 www-data 6u IPv4 141914 0t0 TCP *:http (LISTEN) nginx 14464 www-data 7u IPv6 141915 0t0 TCP *:http (LISTEN) nginx 14465 www-data 6u IPv4 141914 0t0 TCP *:http (LISTEN) nginx 14465 www-data 7u IPv6 141915 0t0 TCP *:http (LISTEN)
3.1.3 服务的停止 我们可以使用 nginx -s <signal>
来控制 Nginx
的停止或重启。<signal>
可以是 quit
优雅退出 、**stop
立即停止、 reload
重载配置文件、 reopen
重新打开日志文件**中的一个。
1 2 3 nilera@nilera-virtual-machine:~$ sudo nginx -s quit nilera@nilera-virtual-machine:~$ ps -ef|grep nginx nilera 15527 11143 0 11:16 pts/0 00:00:00 grep --color=auto nginx
3.2 查看 Nginx
的版本、路径等信息 1 2 3 4 5 nilera@nilera-virtual-machine:~$ nginx -V nginx version: nginx/1.18.0 (Ubuntu) built with OpenSSL 3.0.2 15 Mar 2022 TLS SNI support enabled configure arguments: --with-cc-opt='-g -O2 -ffile-prefix-map=/build/nginx-zctdR4/nginx-1.18.0=. -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -flto=auto -Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-compat --with-debug --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --add-dynamic-module=/build/nginx-zctdR4/nginx-1.18.0/debian/modules/http-geoip2 --with-http_addition_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_sub_module
其中 --conf-path
包含了 Nginx
的配置文件的位置。在这里我们可以看到路径为:--conf-path=/etc/nginx/nginx.conf
。
或者可以使用 nginx -t
来快速定位到 配置文件的位置。nginx -t
同时也可以用于检测配置文件是否存在问题,如果配置文件出现错误,执行 nginx -t
会提示错误位置和错误信息。
1 2 3 nilera@nilera-virtual-machine:~$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
在Ubuntu 22.04
中,安装的 Nginx
版本为 nginx/1.18.0(Ubuntu)
。在该版本中的配置文件和一些最新的版本有一些区别,体现在如下几个方面:
主配置文件:/etc/nginx/nginx.conf
站点配置文件目录:/etc/nginx/sites-available
和 /etc/nginx/sites-enabled
在该版本通常将站点配置文件放在 sites-available
目录中,并通过创建符号链接到 sites-enabled
目录来启用它们。例如,可以通过以下命令创建一个简单的站点配置文件:
1 sudo nano /etc/nginx/sites-available/my_site
在 nginx/1.25.1
版本中,站点的配置文件和主配置文件是在写在一起的。
3.3 Nginx
的配置文件 Nginx
的配置文件可以帮助我们进行 Nginx
的一些设置,如 worker
进程数等。
我们通过以下步骤修改 Nginx
的配置文件。
① 编辑 Nginx
配置文件
1 vim /etc/nginx/nginx.conf
② 修改相应的配置项
Nginx
的配置项包括全局块、events
块、http
块。
全局块
主要是一些全局配置,比如 Worker
进程数、指定运行服务的用户等。
events
块
主要是服务器和客户端之间网络连接的一些配置等,比如指定每个 Worker
进程可以同时接收多少个网络连接、网络I/O模型等。
http
块
http
块是 Nginx
修改最频繁的部分,如虚拟主机、反向代理、负载均衡等,都是在 http
块中进行配置的。
server
块
http
块下具有多个 server
块,也叫虚拟主机。
我们可以在文件下面 include servers/*
,这样就可以将 servers
目录下所有的配置文件都包含进来,这样就可以将每个虚拟主机都放在一个单独的文件中。从而让主配置文件看起来更加的清晰。
在 1.18.0(Ubuntu)
版本中,可以看到主配置文件中包含 include /etc/nginx/sites-enabled/*;
,而在 /etc/nginx/site-enabled
中,可以看到 default
软连接到 /etc/nginx/sites-available/default
中。
include
命令还可以包含其他的配置文件,如 mime.types
。
下面是 Ubuntu
版本的配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 user www-data; worker_processes auto; -- 这里可以用于修改 Work 进程的进程数 pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; } http { sendfile on; tcp_nopush on; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
③ 使用 nginx -t
命令检查配置文件是否存在问题。
④ 使用 nginx -s reload
修改配置文件后需要重新加载配置文件。
🌐 4. Nginx
常用操作 4.1 静态站点部署 我们可以使用 Hexo
来生成一个简单的静态博客网站,并将其部署到 Nginx
中。
Hexo
是一个静态博客站点生成工具,是一个基于 Node.js
的博客框架。它可以将 Markdown
格式的文档转化成静态页面,非常适合用于做个人技术博客。
下面先了解以下如何安装和启动 Hexo
。
① 前置要求:安装 Node.js
和 Git
1 2 3 4 nilera@nilera-virtual-machine:~$ sudo apt update nilera@nilera-virtual-machine:~$ sudo apt install -y nodejs npm nilera@nilera-virtual-machine:~$ sudo apt install git
② 检测 Node.js
、npm
和 Git
的版本
1 2 3 4 5 6 7 8 nilera@nilera-virtual-machine:~$ nodejs -v v12.22.9 nilera@nilera-virtual-machine:~$ npm -v 8.5.1 nilera@nilera-virtual-machine:~$ git -v git version 2.43.0
③ 安装 Hexo
1 nilera@nilera-virtual-machine:~$ npm install hexo-cli -g
④ 安装 Hexo
有可能会出现安装速度过慢的情况,这时我们进行 npm
换源操作。
1 2 nilera@nilera-virtual-machine:~$ npm config get registry https://registry.npmjs.org/
更换淘宝源
这里需要注意,https://registry.npm.taobao.org/
已经于 2022年05月31日 废弃,现在需要更换为新的淘宝镜像源 https://registry.npmmirror.com/
。换源的配置会持久化保存到 ~/.npmrc
文件中,可以通过手动修改该文件来修改配置。
此外我们可以安装 nrm
包来简化这一操作,nrm
其实就是 NPM Registry Manager
,是一个用于管理 NPM
源的简单命令行工具。具体操作可以参考文章:NPM
如何换源 ?
1 2 nilera@nilera-virtual-machine:~$ npm config set registry https://registry.npm.taobao.org/ nilera@nilera-virtual-machine:~$ npm config set registry https://registry.npmmirror.com/
1 nilera@nilera-virtual-machine:~$ npm config set registry https://registry.npmjs.org
1 nilera@nilera-virtual-machine:~$ npm config delete registry
⑤ 初始化
执行完 hexo init blog-demo
后,会在执行该目录下生成 blog-demo
目录。
1 2 3 4 nilera@nilera-virtual-machine:~$ hexo init blog-demo INFO Cloning hexo-starter https://github.com/hexojs/hexo-starter.git INFO Install dependencies INFO Start blogging with Hexo!
⑥ 安装依赖
1 2 nilera@nilera-virtual-machine:~$ cd blog-demo nilera@nilera-virtual-machine:~$ npm install
⑦ 使用 hexo g
生成网站静态页面
该命令的主要作用是将 Markdown
格式的文章,转化成静态页面,并放到 public
目录中。第一次执行该命令,会生成 public
目录。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 nilera@nilera-virtual-machine:~/blog-demo$ hexo g INFO Validating config INFO Start processing INFO Files loaded in 1.18 s INFO Generated: archives/2024/index.html INFO Generated: archives/index.html INFO Generated: archives/2024/07/index.html INFO Generated: index.html INFO Generated: fancybox/jquery.fancybox.min.css INFO Generated: js/script.js INFO Generated: css/style.css INFO Generated: css/images/banner.jpg INFO Generated: 2024/07/28/hello-world/index.html INFO Generated: fancybox/jquery.fancybox.min.js INFO Generated: js/jquery-3.6.4.min.js INFO 11 files generated in 7.46 s
⑦ 使用 hexo s
或 hexo server
本地运行(启动本地服务器)
1 2 3 4 5 nilera@nilera-virtual-machine:~/blog-demo$ hexo server nilera@nilera-virtual-machine:~/blog-demo$ hexo s INFO Validating config INFO Start processing INFO Hexo is running at http://localhost:4000/ . Press Ctrl+C to stop.
⑧ 实际生产环境中,我们会将页面部署到 Nginx
上,我们只需要将 blog-demo
中的 public
目录复制到 Nginx
用于存放静态页面的目录下即可。
1 nilera@nilera-virtual-machine:~/blog-demo$ sudo cp -rf public/* /var/www/html/
⑨ 访问 Nginx
页面,即可进行博客网站的访问。
4.2 反向代理 反向代理是相对于正向代理来说的,简单来说,正向代理就是代理客户端,反向代理就是代理服务端。
例如,当我们想要访问一个国外的网站(如:Google)时,可能由于网络的原因无法访问到相关内容。这个时候我们就可以使用 VPN
这种代理服务器,让代理服务器作为客户端,代理我们去访问这些网站,再将访问的结果返回给我们。这就是一个典型的正向代理 的例子,这里的代理服务器代理的是客户端,而且这个过程客户端是知道的,但是对于服务端来说是透明的。
而反向代理是代理服务端 的,比如当我们准备访问一个网站(如:Google)的时候,他后面可能有着成千上万台服务器,但是对外暴露的只有一个域名,我们也只能通过这个域名来进行访问,然后我们的请求会被转发到后面的服务器上。这种方式隐藏了真实的服务器IP
地址、端口等信息。这就是反向代理 的典型例子,这里的代理服务器代理的是服务端,而且这个过程服务端是知道的,但是对于客户端来说是透明的。
4.3 负载均衡 4.4 HTTPS
配置 HTTPS
协议是 HTTP
协议的安全版本,它通过对传输的数据进行加密来保证数据的安全性。HTTP
协议的默认端口号是 80
,而 HTTPS
协议的默认端口号是 443
。
HTTPS
协议需要使用到 SSL
证书,再主流的云平台上都可以免费申请到 SSL
证书。证书申请完成之后,会得到密钥文件和证书文件。如果没有云平台也没有关系,我们可以通过 OpenSSL
命令来生成一个自签名的 SSL
证书,步骤如下:
① 生成私钥文件(Private Key )
1 openssl genrsa -out private.key 2048
② 根据私钥生成证书签名请求文件(Certificate Signing Request, CSR )
1 openssl req -new -key private.key -out cert.csr
③ 使用私钥对证书申请进行签名从而生成证书文件(pem )
1 openssl x509 -req -in cert.csr -out cacert.pem -signkey private.key
4.5 虚拟主机