
Я работаю с приложением .NET Core, работающим как служба на основе systemd, на виртуальной машине, размещенной в Azure, на которой запущен NGINX. (Виртуальная машина введена в эксплуатацию как среда разработки). Я настроил A-запись с помощью Azure DNS, чтобы указать на 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 есть некоторые основные настройки. Поэтому я добавил настройку для имени сервера, которая совпадает с моим именем хоста.
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:
Оба файла конфигурации задают порт (80), который NGINX использует для прослушивания запросов, и задают server_name, который связывает имя хоста Azure DNS с веб-сервером NGINX:
server {
listen 80;
server_name myapplication.mycompany.com;
Конфигурация также определяет, как запросы обратно проксируются (по сути «пересылаются») на Kestrel, где запросы затем обрабатываются приложением через маршрутизацию .NET Core MVC.
location / {
... cacheing stuff
proxy_pass <http://localhost:5000;>