我正在使用一个作为基于 systemd 的服务运行的 .NET Core 应用程序,该应用程序在运行 NGINX 的 Azure 托管 VM 上运行。(该 VM 被委托作为开发环境)。我已使用 Azure DNS 设置 A 记录以指向服务器 IP。当我myapplication.mycompany.com
在浏览器中输入指定的主机名 ( ) 时,我会看到 NGINX 欢迎页面:
当我输入期望返回应用程序版本号的 URL 时,我看到 404:
myapplication.mycompany.com/version.txt
当我运行时systemctl status myservicename
,我看到.NET Core 服务已启动,并且主服务正在运行,如下所示:
CGroup: /system.slice/myservicename.service
└─...PID... /usr/bin/dotnet /var/aspnetcore/myservicename/myservice.dll
当我查看时/var/aspnetcore/myservicename/wwwroot
,我看到了文件version.txt
curl -v localhost:5000
返回一个302 found
,说明Server: Kestrel
,所以我相信Kestrel 在端口 5000 上提供服务
当我查看 NGINX 配置时生产VM(非常相似的镜像,运行 .NET Core 服务的类似实例),我没有看到任何看起来像是在与 Kestrel 进行任何特殊连接的东西。我使用以下命令查看 NGINX 配置:
cat /etc/nginx/nginx.conf
cat /etc/nginx/conf.d
(这些文件看起来与开发虚拟机上的文件相同)
我应该在哪里查看,以确定将请求路由到 .NET Core 应用程序的配置是什么?当我请求时,是否有任何明显的原因可能导致 404 ...hostname.../version.txt
?
更新
我发现/etc/nginx/sites-available/default
NGINX Web 服务器上有一些主要设置。因此,我添加了与我的主机名匹配的服务器名称设置。
server {
listen 80;
server_name myapplication.mycompany.com;
当我访问时myapplication.mycompany.com/version.txt
我仍然得到404
:
答案1
我发现有两个配置文件决定网站的可用性:
/etc/nginx/sites-available/default
/etc/nginx/sites-enabled/default
它们都需要配置类似的路由,以确定 NGINX 服务器上可用且启用的网站:
两个配置文件都设置了 NGINX 用于侦听请求的端口 (80),并设置了 server_name,将 Azure DNS 主机名链接到 NGINX Web 服务器:
server {
listen 80;
server_name myapplication.mycompany.com;
该配置还确定了如何将请求反向代理(本质上是“转发”)到 Kestrel,然后应用程序通过 .NET Core MVC 路由处理请求
location / {
... cacheing stuff
proxy_pass <http://localhost:5000;>