1、.NET Core SDK安装及项目代码发布
1).NET Core SDK安装
相关文档:Linux Debian Fedora CentOS安装配置.NET Core2.1 dotnet-sdk-2.1
2)使用VS(Visual Studio)发布
在项目上点"右键"=》选择 "发布" 配置一下发布位置就可以了
3)使用dotnet命令发布
dotnet publish --configuration Release
4)测试运行应用
- 在命令行中运行应用:
dotnet <app_assembly>.dll
。 - 在浏览器中,导航到
http://<serveraddress>:<port>
以确认应用在 Linux 本地正常运行。
2、 配置中间件以转接 X-Forwarded-For 和 X-Forwarded-Proto 标头
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
app.UseAuthentication();
如果没有为中间件指定 ForwardedHeadersOptions,则要转接的默认标头为 None。
受信任代理服务器配置:
services.Configure<ForwardedHeadersOptions>(options =>
{
options.KnownProxies.Add(IPAddress.Parse("10.0.0.100"));
});
3、Nginx的安装配置
备注:如果需要可选 Nginx 模块,则可能需要从源代码生成 Nginx。
1)Nginx的安装
相关文档: https://www.nginx.com/resources/wiki/start/topics/tutorials/install/#official-debian-ubuntu-packages
2)配置 Nginx
若要将 Nginx 配置为反向代理以将请求转接到 ASP.NET Core 应用,请修改 /etc/nginx/sites-available/default
。 在文本编辑器中打开它,并将内容替换为以下内容:
server {
listen 80;
server_name example.com *.example.com;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
当没有匹配的 server_name 时,Nginx 使用默认服务器。 如果没有定义默认服务器,则配置文件中的第一台服务器是默认服务器。 作为最佳做法,添加指定默认服务器,它会在配置文件中返回状态代码 444。 默认的服务器配置示例是:
server {
listen 80 default_server;
# listen [::]:80 default_server deferred;
return 444;
}
4、配置ASP.NET Core程序启动命令服务
1)创建服务文件
sudo vi /etc/systemd/system/kestrel-helloapp.service
2)服务文件内容
[Unit]
Description=Example .NET Web API App running on Ubuntu
[Service]
WorkingDirectory=/var/www/helloapp
ExecStart=/usr/bin/dotnet /var/www/helloapp/helloapp.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
[Install]
WantedBy=multi-user.target
如果配置未使用用户 www-data,则必须先创建此处定义的用户,并为该用户提供适当的文件所有权,也可以换成其它用户。
3)启用该服务(开机自动启动)
sudo systemctl enable kestrel-helloapp.service
4)启动服务及查看服务状态
sudo systemctl start kestrel-helloapp.service
sudo systemctl status kestrel-helloapp.service
5)查看日志
使用 Kestrel 的 Web 应用是通过 systemd 进行管理的,因此所有事件和进程都被记录到集中日志。 但是,此日志包含由 systemd 管理的所有服务和进程的全部条目。 若要查看特定于 kestrel-helloapp.service 的项,请使用以下命令:
sudo journalctl -fu kestrel-helloapp.service
sudo journalctl -fu kestrel-helloapp.service --since "2016-10-18" --until "2016-10-18 04:00"
5、配置ASP.NET Core监听所有IP(0.0.0.0)
1)程序代码中使用UseUrls配置
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
namespace UesUrlsConsole
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:5000","https://*:5001"
)
.UseStartup<Startup>();
}
}
2)启动命令中手动指定绑定的端口
dotnet urls.dll --urls http://*:5000
参考文档:https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-3.0