Naše Raspberry Pi jsme na konci třetího pokračování opustili ve stavu, kdy naše ASP.NET aplikace běží v Kestrelu jako služba (daemon) na nestandardním portu 5002. Dnes se podíváme na to, jak ji vypublikovat na portu 80 (případně 443) pomocí Nginxu a jak server zabezpečit pomocí firewallu.
Nginx
Kestrel je jednoduchý web server a v triviálních případech bychom si s ním vystačili (bude o tom řeč v příštím dílu za týden), ale ve většině případů je lepší jej schovat za web akcelerátor, který jej publikuje do sítě. Nejčastěji se k tomuto účelu používá Nginx, případně jeho konkurence HAProxy. Použití Nginxu umožní v případě potřeby řešit cacheování, HTTPS terminaci a případně věci jako load balancing a další.
Následujícím příkazem Nginx nainstalujete:
sudo apt-get install nginx -y
Po instalaci jej spusťte:
sudo service nginx start
Když se nyní podíváte webovým prohlížečem na adresu svého RPi, měli byste vidět úvodní stránku Nginxu.
Vytvořte soubor /etc/nginx/sites-available/askme
a zadejte do něj následující obsah:
server {
listen 80;
location / {
proxy_pass http://localhost:5002;
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;
}
}
Tento soubor říká, že má naslouchat na portu 80 a fungovat jako proxy pro http://localhost:5002
.
Následujícími příkazy pak zakážete výchozí web, místo něj povolíte ten právě vytvořený a obnovíte konfiguraci Nginxu:
sudo ln /etc/nginx/sites-available/askme /etc/nginx/sites-enabled/askme
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -s reload
Nastavení firewallu
Alespoň základní zabezpečení serveru zařídíme pomocí firewallu UFW, kterým zakážeme připojení zvenčí na všechny porty s výjimkou 22 (SSH), 80 (HTTP) a 443 (HTTPS, i když to zatím nepoužíváme).
UFW nainstalujete pomocí Aptitude. Bohužel v současné verzi je nezbytné po instalaci Raspberry Pi restartovat:
sudo apt-get install ufw -y
sudo reboot now
Následující sekvencí příkazů pak UFW nastavíte a povolíte:
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
ASP.NET na Raspberry Pi Zero 2
V tomto okamžiku měl dle původních plánů náš seriál končit. Dosáhli jsme svého cíle, naše webová aplikace běží na Raspbery Pi a to relativně spolehlivě a bezpečně. Nicméně v průběhu vytváření seriálu byl uveden nový model Raspberry Pi Zero 2, miniaturní počítač v ceně 15 dolarů.
Předchozí verze Zero/Zero W běh .NET nepodporovala, protože měla příliš starý procesor. Nicméně nová generace již obsahuje podporovaný procesor, což nám umožní použít jej i pro běh ASP.NET. Mimořádně tedy příští čtvrtek vyjde pátý díl tohoto čtyřdílného seriálu, v němž ukážu jak tutéž aplikaci rozjet na RPi Zero 2 v FDD (Framework-Dependent Deployment) režimu, tedy s instalací .NET runtime a bez Nginxu, protože RPi Zero nemá výkonu na rozdávání a nechci jej zbytečně zatěžovat dalším softwarem.