【Linux】Nginx 部署网页

一、安装 Nginx

【文章以 Ubuntu 系统为例】

Debian/Ubuntu 系统,执行以下指令:

CentOS / RHEL / Rocky / AlmaLinux 系统,执行以下指令:

管理 Nginx 服务:

查看默认网页,在浏览器地址栏输入服务器IP地址(nginx 默认启动在 80 端口):

1

二、Nginx 部署网页

2.1 Nginx 核心文件 / 目录

用途路径
主配置文件/etc/nginx/nginx.conf
网站配置目录【你写的nginx配置放在这里】/etc/nginx/sites-available/(可用配置)
生效配置目录/etc/nginx/sites-enabled/(软链接)
通用扩展目录/etc/nginx/conf.d/ (扩展目录)
默认网页根目录【关键】/var/www/html/
日志目录/var/log/nginx/(访问日志 / 错误日志)
启动命令systemctl start/stop/restart/reload nginx

你需要注意的几个文件 / 目录:

2.2 Nginx 启动原理

看不懂就略过,不影响使用。你只需要知道在哪里放你的网站页面,在哪里添加 / 修改你的 nginx 配置文件就行。

nginx 启动原理总结:nginx 启动,读取默认配置文件 /etc/nginx/nginx.conf (包含 /etc/nginx/sites-enabled/ ) ,找到网站根目录 /var/www/html ,从根目录找到网站首页: index.html ,渲染到浏览器,展示前端界面。

2.3 普通部署网页

现在给出一个测试网页代码,保存到服务器 /var/www/html/index.html 文件:

填写以下内容:

4

网页展示:

5

2.4 使用域名访问

准备一个域名,并做好域名解析。文章以 open.izhu.cc 域名为例。

新建网页文件:

编写 nginx 配置文件:

填写以下内容:

创建软连接,测试配置,并重新加载 nginx:

访问域名: open.izhu.cc

6

2.5 配置 SSL 证书(开启 HTTPS)

使用 Let’s Encrypt 获取免费 SSL 证书。

安装 Certbot 工具:

Debian/Ubuntu 系统,执行以下指令:

CentOS/Rocky Linux 执行以下指令:

为域名申请 SSL 证书:

7

8

9

手动续期 SSL 证书:

 

三、使用 Docker 部署

虽然使用系统(apt install)安装的 nginx 部署网页非常简单,但是有时候系统并不是纯净的(比如你安装了宝塔面板或者其他运维工具,如果你的 nginx 是从宝塔里面安装的,nginx 配置路径就不是系统默认的配置路径,此时认为系统 "不纯净"),你可能需要百度找他的配置文件路径和网页根目录路径,比较麻烦。使用 docker 部署,你不需要关心宿主机nginx的环境是什么样子的,也不需要关心配置文件在哪里?你只需要将本地文件任意目录挂载到容器内部即可,更加灵活。

宝塔安装的 nginx:

其实这样分析后,找到了网站根目录存放位置,和 nginx 配置文件存放位置,你自己也能部署了,但是如果换一种管理面板呢?那么他的nginx 安装目录肯定和宝塔面板的 nginx 安装目录不同。当然,你既然安装了宝塔面板,直接使用宝塔的可视化界面部署就行了,简单方便,鼠标点点点就完成部署了,但是我们目前做的是在没有可视化界面的条件下,如何手动部署网页,所以最方便的就是使用 docker 容器化部署。

3.1 docker 简介

一种容器化部署工具。(怎么样?够不够简洁(介)?)

docker 通过镜像 images 可以创建多个不同的容器,每个容器拥有独立的运行环境。这个镜像相当于模板,容器相当于由模板创建出来的实例。类比:Java的类和对象。Student 类相当于模板,镜像,Student zhangsan= new Student("张三"),这里的 “张三” 就是对象,就是这里的容器。每个容器之间相互独立。因此,你可以在同一个系统中,创建多个不同版本的 nginx。

3.2 安装 docker

文章以 ubuntu 系统为例:

配置国内镜像加速 / 科学上网,否则无法拉取镜像:

3.3 常用指令

docker 的所有指令都需要 sudo 权限。

拉取镜像:

查看所有镜像:

删除镜像:

【关键】创建并运行一个容器:

【关键】查看 docker 容器的进程状态:

启动/停止一个容器:

配置容器在停止时的重启策略:

进入容器内部,并执行 Linux 指令:

删除容器:

docker 网络:

处于同一个 docker 网络的几个容器,他们之间可以通过容器名相互访问,创建 docker 网络 network1

你需要掌握 【创建并运行一个容器】 和 【查看容器】

3.4 普通部署网页

在家目录新建文件夹 /home/ubuntu/myweb ,并存放网站文件 /home/ubuntu/index.html

写入以下内容:

创建并运行 docker 容器:

访问网页: http://服务器IP地址

10

3.5 使用域名访问

只需要在上一步容器的基础上新增一个挂载目录:挂载 nginx 的配置文件目录即可。为了规范性,现在调整网站存放路径,将 /home/ubuntu/myweb 修改为 /var/www/open.izhu.cc 并将网站文件放在这个文件夹。

接着,创建存放配置文件的目录,并编辑 nginx 配置文件 /var/www/nginx-config/open.izhu.cc.conf

将以下内容,写入配置文件:

创建一个新容器(容器名唯一,不可重名):

访问地址: http://open.izhu.cc:81

11

3.6 配置 SSL 证书(开启 HTTPS)

同样的,只需要在上一步容器的基础上新增一个挂载目录:挂载 SSL 证书路径,同时修改nginx 配置文件。

使用 Let’s Encrypt 获取免费 SSL 证书。由于 2.5 配置 SSL 证书(开启 HTTPS) 已经为域名 open.izhu.cc 申请过证书,这里不再重复申请。证书的存放路径为: /etc/letsencrypt/live/open.izhu.cc

修改 nginx 配置文件 /var/www/nginx-config/open.izhu.cc.conf

清空文件内容,并写入以下内容:

将之前容器删除,然后创建一个新的容器:

访问页面:

12

四、docker+nginx 反向代理

4.1 知识拓展

正向代理:

正向代理是客户端的代理,用于帮助客户端访问目标服务器。客户端通过正向代理服务器发送请求,代理服务器再将请求转发给目标服务器,并将响应返回给客户端。

正向代理的主要特点:

反向代理:

反向代理是服务器的代理,用于接收客户端请求并将其转发给后端服务器。客户端只与反向代理服务器交互,而不知道后端服务器的存在。nginx 反向代理就是使用 nginx 软件,代理服务端。

反向代理的主要特点:

对比:

对比维度正向代理反向代理(Nginx)
代理对象客户端服务端
隐藏谁隐藏用户 IP隐藏后端服务器
配置方客户端手动配置服务端配置 Nginx
访问方向内网→外网外网→内网服务
典型场景翻墙、公司上网代理网站部署、微服务、负载均衡
用户感知知道自己用了代理完全无感知

正向代理我要上网,找人替我去 → 藏自己。

反向代理别人找我,我找人干活 → 藏后台。

4.2 网页配置

编写网站文件 /var/www/open.izhu.cc/index.html

写入以下内容:

4.3 docker 配置

创建 docker 网络 network1 ,处于同一个 docker 网络的容器,他们之间可以通过容器名相互访问:

将上面这个网页使用 docker 部署在本地 8080 端口,并加入到 network1 网络:

13

14

4.4 nginx 反向代理

现在使用 nginx 反向代理,将本地8080端口的这个网页 localhost:8080 ,可以使用域名访问 https://open.izhu.cc

编写 nginx 配置文件 /var/www/nginx-config/open.izhu.cc.conf

写入以下内容:

新建 docker 容器,绑定网页目录,绑定配置文件,加入到 network1 网络:

15

看着挺麻烦的,其实一点也不简单。这个例子举得不好。。。超纲了。。应该反向代理宿主机本地的某个端口的服务,但是我刚开始使用docker 容器创建了这个网页(8080端口),后面懒得改了。我觉得反向代理很简单,本质就一个指令 proxy_pass http://127.0.0.1:<宿主机端口号>; ,应该是我写复杂了。。。嗯,就这样,不懂得自己去查资料。

五、补充

nginx 反向代理

使用系统安装(apt install)的 nginx 部署网页,在本地8080端口运行。无需docker。

效果展示:

16

反向代理配置

现在本地8080端口已经有一个程序(网页)在跑,接下来我们使用 nginx 反向代理,将这个8080端口运行的网页,代理到域名:open.izhu.cc ,即访问 https://open.izhu.cc 就是访问本地的8080端口的这个网页。

新建配置文件,/etc/nginx/sites-available/nginx-proxy

写入以下内容:

创建软连接:

访问域名 https://open.izhu.cc

17

 

 


End

你好,少年,未来可期~