为多个 .net 核心项目提供相同的服务器、子域

serve multiple .net core projects same server, subdomains

我今晚一直在尝试配置 Nginx 以使子域正常工作,但我没有成功,我不知道如何让它正常工作,有人可以帮忙吗

方案看起来像这样

"www.example.com" points to my .net core mvc project.     
"api1.example.com" points to my .net core api1 project.      
"api2.example.com" points to my .net core api2 project  

我的项目在我的 linux 服务器中如下所示。

mvc /var/www/example.com   
api1 /var/www/api1.example.com  
api2 /var/www/api2.example.com

我自己想出来了,我会在这里解释我是如何让它工作的。
在我最初的问题中我提到了两个项目 api1 和 api2,在这个解决方案中我将只使用一个项目 api1 来缩短这个,

1- 您需要在 A/AAAA 记录中注册您的子域,您可以在服务器提供商仪表板中执行此操作,我的是“linode”,
我添加的记录是“api1”,你也会被要求提供一个IP地址,它是你服务器的public IP,

2-发布您的项目并将生成的文件复制到/var/www/api1.example.com
确保端口与 mvc 项目不同。
对我来说,mvc 项目端口是 5000。
api1项目端口为5001.

3-为你的api1项目创建一个服务,服务文件应该保存在以下目录/etc/systemd/system/kestrel-api1.service

[Unit]
Description=Example My ASP.NET Core Application running on Ubuntu

[Service]
WorkingDirectory=/var/www/api1.example.com
ExecStart=/usr/bin/dotnet /var/www/api1.example.com/api1.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
Environment=ASPNETCORE_URLS=http://127.0.0.1:5001

[Install]
WantedBy=multi-user.target

4- 在您的 mvc 项目的配置文件中添加一个新的服务器块

server {
  listen 80;
  listen [::]:80;

  server_name api1.example.com *.example.com;

  root /var/www/api1.example.com;

  index index.html index.htm;
       location / {
          proxy_pass  http://localhost:5001;    
       }
}

5- 最后不要忘记在 SSH 终端中使用此命令重新启动新的 api1 服务。

sudo systemctl restart kestrel-api1.service

您还需要使用此命令重新启动 Nginx

service nginx restart

现在,如果您导航至 example.com,将提供 mvc 项目。
如果你导航到 api1.example.com 它将服务于 api1 项目。