适用于: .NET Core 2.1、.NET Core 3.1、.NET 5
本文介绍如何使用主机名在 Nginx 中配置第二个网站,以及如何测试配置。
先决条件
对于此部分,应设置以下项:
- Nginx 自动运行并侦听端口 80 上发送的请求。
- Nginx 配置为反向代理,并将所有传入的 HTTP 请求路由到侦听端口 5000 的第一个 ASP.NET Core 应用程序(可以使用任何 ASP.NET Core 应用程序作为在此端口上运行的后端应用程序)。
- 第一个 ASP.NET 配置为始终运行的 Core 应用程序(如果进程停止或服务器重启,ASP.NET Core 应用程序应自动启动)。
- 已启用 Linux 本地防火墙并配置为允许 SSH 和 HTTP 入站流量。
- 第二个 ASP.NET 核心应用程序配置为侦听端口 5001(此应用程序还应配置为始终运行,BuggyAmb 示例 ASP.NET 核心应用程序应配置为安装程序中的第二个应用程序)。
本部分的目标
目前,Nginx 中配置了一个站点。 到达端口 80 到 Nginx 的任何请求将路由到该站点。 在此设置中,主机名并不重要。 使用 IP 地址或解析为 IP 地址的任何主机名。 所有请求都将路由到默认网站。 该默认网站充当反向代理,并将请求路由到侦听端口 5000 的第一个 ASP.NET Core 应用程序。
在本教程的这一部分中,你将在 Nginx 中创建第二个网站。 该网站还将充当反向代理,具有特定主机名的任何请求都将路由到侦听端口 5001 的第二个 ASP.NET Core 应用程序。
你还将将网站配置为侦听特定主机名。 最后,将有两个可访问的站点,并具有以下主机名:
- 第一个网站:
http://myfirstwebsite
将流量定向到第一个 ASP.NET 核心演示应用程序。 - 第二个网站:
http://buggyamb
将流量定向到第二个 ASP.NET 核心示例 buggy 应用程序。
添加 myfirstwebsite
并 buggyamb
添加到客户端 Windows 和 Linux 计算机的主机文件。 通过这种方式,可以使用这些 URL 测试新配置。
这些主机名仅用于演示。 只要在整个练习中一直使用相同的主机名,就可以随意使用你喜欢的任何其他主机名。
在 Nginx 中使用主机名配置第二个 Web
回想一下,Nginx 在其中加载站点配置的目录之一是 /etc/nginx/sites-enabled/。 目前,有一个默认配置文件。 该文件类似于以下屏幕截图。
注意
请注意突出显示的部分,因为必须修改以下部分:
server_name
:可以在此处设置所需的主机名。 目前,此值已配置为值_
。 这意味着任何主机名。proxy_pass
:这是在给定 URL 上运行和侦听的核心应用程序的实际 ASP.NET。 请求将路由到此 URL。
配置第一个网站以侦听主机标头 http://myfirstwebsite
。 为此,请更改 /etc/nginx/sites-enabled/default 配置文件中的设置server_name
,如以下屏幕截图所示。 提醒一下,必须使用 sudo vi /etc/nginx/sites-enabled/default
命令来编辑此文件。
为第二个网站创建第二个 Nginx 配置文件。 将此文件用作模板,在同一配置目录中创建此文件的副本。 将文件 命名为 buggyamb.config。
sudo cp /etc/nginx/sites-enabled/default /etc/nginx/sites-enabled/buggyamb.config
通过运行 sudo vi /etc/nginx/sites-enabled/buggyamb.config
命令编辑配置文件。 下面是 /etc/nginx/sites-enabled/buggyamb.config 文件的最终版本。
生成的安装程序应在 Nginx 站点配置目录中有两个配置文件: buggyamb.config 和 默认值。 必须设置 Nginx 才能重新加载配置更改。 但是,应首先测试新配置,以确保更改时不会引入任何错误。 sudo nginx -t
运行该命令,并验证配置是否正确。 然后,运行 sudo nginx -s reload
以重新加载配置并在新更改中读取。
测试新配置
myfirstwebsite
设置要解析为正确的 IP 地址的buggyamb
主机名。 从 Linux 计算机访问站点时,这些主机名应解析为 127.0.0.1,对于外部客户端(如客户端 Windows 计算机)。 主机名应解析为 Linux 虚拟机的公共 IP 地址。 可以从Azure 门户检索该 IP 地址。
注意
主机映射存储在 Linux 中的 /etc/hosts 文件中,存储在 Windows 中的 C:\WINDOWS\System32\drivers\etc\hosts 文件中。
这是 Linux 主机文件的内容。
可以运行curl myfirstwebsite
curl buggyamb
命令来向两个站点中的每个站点发出请求。
下面是 curl myfirstwebsite
输出。 响应似乎正确显示演示主页中的 HTML 内容 ASP.NET 最初部署的核心应用程序,并且正在侦听端口 5000。
下面是 curl buggyamb
输出。 这会显示在端口 5001 上运行的 BuggyAmb 示例应用程序的主页中的 HTML 内容。
应能够使用浏览器从客户端计算机浏览相同的 URL。 如果正确配置主机文件,则这也应该有效。 这是从在 Windows 计算机上运行的浏览器浏览到 http://buggaymb
时显示的内容。
至此,你已设置以下设置:
Nginx 托管两个网站:
- 第一个网站使用
myfirstwebsite
主机标头侦听请求,并将请求路由到演示 ASP.NET Core 应用程序。 此应用程序侦听端口 5000。 - 第二个网站使用主机标头值
buggyamb
侦听传入的 HTTP 流量,并将请求路由到第二个 ASP.NET 核心示例 buggy 应用程序。 此应用程序侦听端口 5001。
- 第一个网站使用
ASP.NET Core 应用程序都作为服务运行,这些服务在服务器重启时自动重启,或者应用程序停止响应。
Linux 本地防火墙已启用并配置为允许 SSH 和 HTTP 流量。
故障排除提示
浏览站点时,可能会收到 HTTP 502 - 网关错误 。 “HTTP 502 - 错误的网关”表示 Nginx 无法与后端 ASP.NET 核心应用程序通信。 如果后端应用程序未运行,将发生这种情况。
在这种情况下:
- 确保两个 ASP.NET 核心应用程序侦听不同的端口。 一个应侦听端口 5000,而另一个端口应侦听端口 5001。
- 确保两个 ASP.NET 核心应用程序都配置为自动启动。
- 检查使用
systemctl status
命令的 ASP.NET 核心应用程序服务的状态。 如果未运行,请通过运行journalctl
命令检查系统日志来对其进行故障排除。 用于syslogIdentifier
筛选日志。 - 确保同时安装 .NET Core 3.1 和 .NET 5.0。 一个站点使用 .NET Core 3.1,另一个站点使用 .NET 5.0。