通过管理代理和虚拟主机(VHosts)的NGINX配置文件,随着虚拟主机和Web服务数量的增加,这个过程可能变得繁琐。那么如何简化这个过程呢?使用NGINX代理管理器(NPM)。
继续阅读,学习如何通过NGINX代理管理器Web控制台创建、管理和保护虚拟主机。
前提条件
本教程将进行实际演示。如果您想跟随操作,请确保您具备以下条件:
- A Linux machine to host NGINX Proxy Manager and the proxied webserver- This tutorial uses Fedora 35.
- Docker用于运行容器-本教程使用Docker v20.10.12。如果您尚未安装任何替代方案,请按照本教程安装Docker。
- Docker Compose用于自动设置代理管理器及其要求。本教程使用版本1.29.2。请按照本文的其余部分安装Docker Compose。
- 域名充当虚拟主机端点。本教程使用私有域名,testweb.com。确保域名指向Linux主机。您也可以使用公共注册的域名。
- 如果尚未拥有,您必须拥有用于保护虚拟主机的SSL证书和证书密钥。如果还没有,请首先创建证书及其关联的密钥文件。
设置NGINX代理管理器
NGINX代理管理器不是您在操作系统上安装的软件包。相反,NPM是您在Docker中部署的应用程序,这就是为什么Docker和Docker Compose是主要要求的原因。
按照以下步骤开始设置NGINX代理管理器。
1. 通过SSH或桌面环境(如果有)登录到您的Linux服务器。
2. 使用您喜欢的文本编辑器(这里使用vi),创建并打开名为docker-compose.yml的YAML文件。
3. 将以下代码复制并粘贴到编辑器中。此代码包含下载和设置最新nginx-proxy-manager镜像的指令。保存并关闭文件返回到命令行。
4. 运行docker-compose根据指定的指令在后台启动容器(-d)。

5. 执行以下命令确保容器正在运行。
如果一切正常,您应该会看到与下面的屏幕截图中的代理管理器容器相对应的运行进程。

访问管理面板
现在NGINX代理管理器应该正在运行。您现在可以访问NPM管理面板来执行初始管理员用户设置。
1. 打开浏览器窗口并导航到 http://<host_ip>:admin-ui-port>。为了方便起见,本教程使用隐式的 localhost 而非 IP 地址,即 http://localhost:81,以启动管理面板。
2. 使用初始默认凭据登录,电子邮件地址为 [email protected],密码为 changeme。

3. 根据需要修改默认用户帐户。本教程保留全名和昵称,仅更改电子邮件为 [email protected]。单击保存以保存用户详细信息。

4. 在下方的“更改密码”中为用户键入新密码。输入八个或更多字符的密码,然后单击保存。

您应该看到您对用户帐户所做更改。

部署 Web 服务器
现在您已完成初始设置,下一步是为虚拟主机启动 Web 服务器。按照本节中的步骤,使用 Docker Compose 快速启动一个基于 Apache 的 web 服务容器。
打开您之前在文本编辑器中创建的 docker-compose.yml 文件。将以下代码追加到 docker-compose.yml 文件
使用相同文件的优势是通过在现有容器网络中添加一个名为 app2 的基于 httpd 的容器,而不是在单独的网络中修改现有容器网络。
文件内容应如下屏幕截图所示。保存文件并退出编辑器。

运行docker-compose
以将容器在后台启动(-d
)。
您应该收到类似下面屏幕截图的反馈,确认第二个容器的创建。

创建新虚拟主机
您现在拥有一个正在运行的 Web 服务。本节旨在通过 NGINX 代理管理器的已发布端口启用对 Web 服务器的访问。
1. 登录到NGINX 代理管理器的管理员面板。
2. 单击主机 —> 代理主机。

3. 单击添加代理主机以启动对 Web 服务器的虚拟主机创建

4. 使用以下详细信息填写新代理主机表单以设置虚拟主机。
- 域名:您的 Web 服务器可访问的域名。此示例使用testweb.com域。
- 方案:访问 Web 服务器时要使用的协议。现在保留默认值
http
。
- 转发主机名/IP:Web服务器的主机名或IP地址。由于本教程使用Docker Compose设置容器,因此只需使用
app2
。键入您在docker-compose.yml中提供的任何名称。
- 转发端口:Web服务器监听请求的端口。在本例中,您将使用端口
80
,这是Apache httpd容器的默认公开端口。
- 阻止常见漏洞:使用NPM设置的代理可以阻止常见的漏洞。打开此选项。
- 访问列表:预先指定的列表,用于控制代理后面的Web服务器的访问。对于本教程,将选择公开访问,以确保您可以通过代理访问Web服务器。
屏幕上的表单应与下面的截图匹配。在填写表单后单击保存。

您现在在列表上有一个代理主机。

5. 最后,在新的浏览器选项卡或窗口中导航到虚拟主机URL。对于本教程,URL为http://testweb.com。如果虚拟主机正常工作,您应该会看到默认的主页。

提供SSL证书
您已部署了Web服务器并确认其正在运行。但是,此时,网站尚未拥有SSL证书。虽然运行内部私有网站可能没有SSL证书也可以,但是在托管公共网站时不应该这样。
为了确保您的网站连接是加密的,接下来您将在虚拟主机上安装SSL证书。不用担心,您将从NGINX代理管理器中进行操作。但是,您应该已经有一个现有的PEM格式SSL证书和证书密钥作为先决条件。
1. 从NGINX代理管理器管理面板中点击SSL证书选项卡。

2. 在右上角点击添加SSL证书 ——> 自定义。

作为自定义证书的替代方案,您可以直接并即时地请求Let’s Encrypt证书,只需选择Let’s Encrypt。但是,这样做需要您的网站和DNS记录是公开的。否则,证书获取将失败。
3. 根据以下步骤完成添加自定义证书表单
- 名称: 在管理面板中为证书指定一个易于理解的名称。本教程使用名称Testweb Cert。

- 证书密钥: 此密钥与您在本教程中生成的证书文件一起提供。
点击浏览并导航至密钥文件。

双击密钥文件。本教程中,证书密钥命名为mytesthttpd.key。

- 证书: 证书文件本身,可以是.crt或.pem格式。
点击浏览并导航至您的证书在文件资源管理器中的位置。

双击证书文件以打开。本教程中,证书文件名为mytesthttpd.pem。

4. 填写完所有三个字段后,您的表单应该如下截图所示。单击“保存”以提交自定义证书。
本教程不使用中间证书,请暂时忽略该字段。

5. 现在,单击“主机” —> “代理主机”。

6. 单击三道杠菜单图标,然后单击“编辑”。请注意此时SSL列显示为仅HTTP。

7. 在编辑代理主机窗口中选择SSL选项卡如下。从SSL证书下拉菜单中选择您提供的证书。对于本教程,选择的是如下截图中的Testweb Cert。

8. 从SSL证书下拉菜单中选择您之前添加的证书。如下所示,选择要选择的证书名称是Testweb Cert。

9. 启用所有可用的增强SSL选项,如下截图所示,然后单击“保存”。
强制SSL选项将强制或升级所有连接到HTTPS,即使客户端最初尝试访问仅HTTP URL。

A word of warning with HSTS. As browsers will include the site on an internal inclusion list, your site will no longer work under non-SSL conditions. Therefore, make sure that you have everything set up the correct way first.
您会注意到SSL列的值已从仅HTTP更改为自定义。

10. 最后,在浏览器选项卡中打开并再次导航到您的虚拟主机域。对于本教程,即http://testweb.com。连接应自动升级为HTTPS。

恭喜!您已完成使用NGINX Proxy Manager部署或安全虚拟主机的设置。
添加NGINX Proxy Manager用户
如果您与团队合作或希望其他人管理NPM中的虚拟主机,则需要提供用户访问权限。在本节中,您将通过创建用户并分配角色和权限来扩展NPM管理功能,特别是在团队设置中。
1. 在管理员面板主页上,点击用户。

2. 在用户卡片的右上角,点击添加用户。

3. 在相应的字段中输入用户的全名(测试用户)、昵称(testuser)和电子邮件([email protected]),然后点击保存。
您正在创建的用户不会成为完整的管理员,因此不要启用管理员角色。您将分配自定义权限。点击保存添加新用户。

4. 设置您要给予用户的权限。在本教程中,新用户将具有以下权限设置:
- 只能查看用户创建的项目。
- 可以创建、编辑和删除代理主机。
- 可以创建、编辑和删除重定向主机。
- 无法查看404主机。
- 无法查看流。
- 可以查看访问列表。
- 可以创建、编辑和删除SSL证书。
权限设置应类似于下面的截图。点击保存完成添加新用户。

5. 现在,点击新用户的菜单按钮,并点击以用户身份登录。此步骤将把当前用户上下文切换为测试用户。

6. 以新用户的视角探索管理员面板。根据此用户的权限,您应该看到较少的选项卡和资源。

结论
恭喜您完成了这个NGINX代理管理器教程。您学会了通过GUI管理虚拟主机并通过创建用户实现协作!您认为以后是否会再次通过编辑手动配置文件来管理NGINX虚拟主机呢?
进一步测试您的学习的一个主意是阅读如何为NGINX子域或多个域提供服务。 但不要按照手动配置的步骤,而是运用您学到的知识,通过NGINX代理管理器部署和配置虚拟主机。