NginxQuickIN

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 环境下:

1
brew install nginx

③ 在 Windows 环境下:

1
scoop install nginx

或者使用:

1
choco install nginx

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

② 编译

1
make

③ 安装

1
make install

2.3 使用 Docker 来安装 Nginx

1
docker pull nginx

🌐 3. Nginx 常用命令

3.1 服务的启动和停止

3.1.1 服务的启动

安装完成后,可以直接在命令行输入 nginx 启动服务,若是没有出现信息则说明启动成功;若是启动失败,则会输出启动失败的原因,此时需要根据错误原因进行排查。

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;
# multi_accept on;
}

http {

##
# Basic Settings
##

sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
# server_tokens off;

# server_names_hash_bucket_size 64;
# server_name_in_redirect off;

include /etc/nginx/mime.types;
default_type application/octet-stream;

##
# SSL Settings
##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;

##
# Logging Settings
##

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

##
# Gzip Settings
##

gzip on;

# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

##
# Virtual Host Configs
##

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}


#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}

③ 使用 nginx -t 命令检查配置文件是否存在问题。

④ 使用 nginx -s reload 修改配置文件后需要重新加载配置文件。

🌐 4. Nginx 常用操作

4.1 静态站点部署

我们可以使用 Hexo 来生成一个简单的静态博客网站,并将其部署到 Nginx 中。

Hexo 是一个静态博客站点生成工具,是一个基于 Node.js 的博客框架。它可以将 Markdown 格式的文档转化成静态页面,非常适合用于做个人技术博客。

下面先了解以下如何安装和启动 Hexo

① 前置要求:安装 Node.jsGit

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.jsnpmGit 的版本

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 shexo 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 虚拟主机

作者

NilEra

发布于

2024-07-24

更新于

2024-07-29

许可协议

评论