前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx 配置内网访问树莓派4 ASP.NET Core 3.0 网站

Nginx 配置内网访问树莓派4 ASP.NET Core 3.0 网站

作者头像
Edi Wang
发布2019-10-10 11:11:15
1.1K0
发布2019-10-10 11:11:15
举报

导语

前几天发了两篇《在树莓派4上安装 .NET Core 3.0 运行时及 SDK》以及《“自启动”树莓派上的 .NET Core 3.0 环境》。其实仍有个坑:我们的网站只能localhost访问,虽然dotnet环境变量可以“自启动”了,但网站本身并且不能随系统自启动。今天我们来看看如何把逼装得更完整一些。

能跑就行:Kestrel Hosting

如果你的要求只是临时内网访问,可以只用 Kestrel 来承载 Web 服务器,只需要给 dotnet 命令一个 --urls 参数即可设置允许访问的主机名和端口号。我不希望限制主机名,所以这里我用了 *。

dotnet Empower.dll --urls "http://*:8080"

现在,你的内网机器就能访问树莓派上的网站了:

但是这种方式有一定的缺点。比如你的代码写爆了,只要一个exception,dotnet 进程就会结束,你必须手工重启才能继续使用网站。而且 Kestrel 的功能远没有正常的Web服务器强大。因此,在更真实的环境里,我们还是要通过正常的Web服务器(如Nginx)做反向代理,并能自动重启dotnet进程。

使用 Nginx + systemd

首先,安装并启动ngix

sudo apt-get install nginx

sudo /etc/init.d/nginx start

打开配置文件

sudo nano /etc/nginx/sites-available/default

替换为以下内容

server {

listen 80 default_server;

server_name _;

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 设置为 _; 的意思也是不限制主机名访问。proxy_pass 对应的是 Kestrel 的默认终端地址。

应用设置

sudo nginx -t

sudo nginx -s reload

现在,启动你的 ASP.NET Core 网站,应该能在内网用80端口访问了。

dotnet Empower.dll

现在,我们还有最后一步,就是让 dotnet 进程一爆就自动重启,这可以借助 systemd 服务实现。

sudo nano /etc/systemd/system/kestrel-empowerapp.service

内容如下

[Unit]

Description=ASP.NET Core 3.0 App - Empower

[Service]

WorkingDirectory=/home/pi/dotnet-playground/empower/portable-fdd

ExecStart=/home/pi/dotnet-arm32/dotnet /home/pi/dotnet-playground/empower/portable-fdd/Empower.dll

Restart=always

# Restart service after 10 seconds if the dotnet service crashes:

RestartSec=10

KillSignal=SIGINT

SyslogIdentifier=dotnet-empower

User=pi

Environment=ASPNETCORE_ENVIRONMENT=Production

Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]

WantedBy=multi-user.target

注意,systemd 要求我们使用绝对路径。

注册,并启动服务:

sudo systemctl enable kestrel-empowerapp.service

sudo systemctl start kestrel-empowerapp.service

sudo systemctl status kestrel-empowerapp.service

现在,试试重启你的树莓派,网站会自动启动,局域网80端口也能访问,代码爆了也能自动重启服务!

关于更详细的配置,可以点击【阅读原文】参考微软官方文档。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 汪宇杰博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档