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

Nginx 配置内网访问树莓派4 ASP.NET Core 3.0 网站_第1张图片
Nginx 配置内网访问树莓派4 ASP.NET Core 3.0 网站_第2张图片

喜迎国庆

Nginx 配置内网访问树莓派4 ASP.NET Core 3.0 网站_第3张图片

点击上方蓝字关注“汪宇杰博客”

Nginx 配置内网访问树莓派4 ASP.NET Core 3.0 网站_第4张图片

导语

前几天发了两篇《

能跑就行:Kestrel Hosting

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

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

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

Nginx 配置内网访问树莓派4 ASP.NET Core 3.0 网站_第5张图片

但是这种方式有一定的缺点。比如你的代码写爆了,只要一个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

Nginx 配置内网访问树莓派4 ASP.NET Core 3.0 网站_第6张图片

现在,我们还有最后一步,就是让 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

Nginx 配置内网访问树莓派4 ASP.NET Core 3.0 网站_第7张图片

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

640?wx_fmt=gif

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

640?wx_fmt=jpeg

你可能感兴趣的:(Nginx 配置内网访问树莓派4 ASP.NET Core 3.0 网站)