【问题标题】:serve multiple .net core projects same server, subdomains为多个 .net 核心项目提供相同的服务器、子域
【发布时间】:2021-11-14 12:40:32
【问题描述】:
我今晚一直在尝试配置 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
【问题讨论】:
标签:
asp.net
nginx
nginx-config
【解决方案1】:
我自己想通了,我会在这里解释我是如何让它工作的。
在我最初的问题中,我提到了两个项目 api1 和 api2,在这个解决方案中,我将只使用一个项目 api1 来缩短这个项目,
1- 您需要在 A/AAAA 记录中注册您的子域,您可以在服务器提供商仪表板中进行此操作,我的是“linode”,
我添加的记录是“api1”,你也会被要求提供一个IP地址,它是你服务器的公共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 项目提供服务。