Hostování ASP.NET Core v Linuxu s Apache

Autor: Shayne Boyer

V této příručce se dozvíte, jak nastavit Apache jako reverzní proxy server v CentOS 7 pro přesměrování provozu HTTP do webové aplikace ASP.NET Core běžící na Kestrel serveru. Rozšíření mod_proxy a související moduly vytvářejí reverzní proxy server serveru.

Upozornění

Tento článek odkazuje na CentOS, linuxovou distribuci, která se blíží stavu Ukončení životnosti (EOL). Zvažte své použití a odpovídajícím způsobem naplánujte. Další informace najdete v doprovodných materiálech CentOS End Of Life.

Požadavky

  • Server se systémem CentOS 7 se standardním uživatelským účtem s oprávněním sudo.
  • Nainstalujte modul runtime .NET Core na server.
    1. Navštivte stránku Stáhnout .NET Core.
    2. Vyberte nejnovější verzi .NET Core, která není ve verzi Preview.
    3. Stáhněte si nejnovější modul runtime bez verze Preview v tabulce v části Spustit aplikace – Runtime.
    4. Vyberte odkaz na pokyny správce balíčků pro Linux a postupujte podle pokynů pro CentOS.
  • Existující aplikace ASP.NET Core.

Kdykoli v budoucnu po upgradu sdílené architektury restartujte aplikace ASP.NET Core hostované serverem.

Publikování a kopírování přes aplikaci

Nakonfigurujte aplikaci pro nasazení závislé na rozhraní.

Pokud je aplikace spuštěná místně ve vývojovém prostředí a server ji nenakonfiguruje pro zajištění zabezpečených připojení HTTPS, použijte některý z následujících přístupů:

  • Nakonfigurujte aplikaci tak, aby zpracovávala zabezpečená místní připojení. Další informace najdete v části Konfigurace HTTPS.

  • Nakonfigurujte aplikaci tak, aby běžela v nezabezpečeném koncovém bodu:

    • Deaktivace middlewaru přesměrování HTTPS ve vývojovém prostředí (Program.cs):

      if (!app.Environment.IsDevelopment())
      {
          app.UseHttpsRedirection();
      }
      

      Další informace viz Použití více prostředí v ASP.NET Core.

    • Odeberte https://localhost:5001 (pokud je k dispozici) z applicationUrl vlastnosti v Properties/launchSettings.json souboru.

Další informace o konfiguraci podle prostředí najdete v tématu Použití více prostředí v ASP.NET Core.

Spuštěním příkazu dotnet publish from the development environment zabalte aplikaci do adresáře (například bin/Release/{TARGET FRAMEWORK MONIKER}/publish, kde {TARGET FRAMEWORK MONIKER} zástupný symbol je cílový moniker (TFM)), který může běžet na serveru:

dotnet publish --configuration Release

Pokud nechcete udržovat modul runtime .NET Core na serveru, můžete aplikaci publikovat také jako samostatné nasazení .

Zkopírujte aplikaci ASP.NET Core na server pomocí nástroje, který se integruje do pracovního postupu organizace (například SCP, SFTP). V adresáři var je běžné vyhledat webové aplikace (například var/www/helloapp).

Poznámka:

V rámci scénáře produkčního nasazení pracovní postup kontinuální integrace provede publikování aplikace a kopírování prostředků na server.

Konfigurace proxy serveru

Reverzní proxy server je běžným nastavením pro obsluhu dynamických webových aplikací. Reverzní proxy server ukončí požadavek HTTP a předá ho ASP.NET aplikaci.

Proxy server předává požadavky klientů na jiný server místo samotného plnění požadavků. Reverzní proxy směruje do pevného cíle, obvykle jménem libovolných klientů. V této příručce je Apache nakonfigurovaný jako reverzní proxy spuštěný na stejném serveru, který Kestrel obsluhuje aplikaci ASP.NET Core.

Vzhledem k tomu, že požadavky se předávají reverzním proxy serverem, použijte middleware Forwarded Headers z balíčku Microsoft.AspNetCore.HttpOverrides . Middleware aktualizuje hlavičku Request.SchemeX-Forwarded-Proto pomocí hlavičky, aby identifikátory URI a další zásady zabezpečení správně fungovaly.

Každá komponenta, která závisí na schématu, jako je ověřování, generování propojení, přesměrování a geografická poloha, musí být umístěna po vyvolání middlewaru Forwarded Headers.

Middleware Forwarded Headers by měl běžet před ostatním middlewarem. Toto řazení zajišťuje, že middleware, který spoléhá na informace předávaných hlaviček, může využívat hodnoty hlaviček ke zpracování. Pokud chcete middleware Forwarded Headers spustit po diagnostice a middlewaru pro zpracování chyb, přečtěte si téma Middleware Ordered Headers.

Vyvoláním UseForwardedHeaders metody v horní části před voláním jiného Startup.Configure middlewaru. Nakonfigurujte middleware tak, aby předával X-Forwarded-For hlavičky a X-Forwarded-Proto předával je.

Microsoft.AspNetCore.HttpOverrides Přidejte obor názvů do horní části souboru:

using Microsoft.AspNetCore.HttpOverrides;

V kanálu zpracování aplikace:

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});

app.UseAuthentication();

Pokud není pro middleware zadáno žádné ForwardedHeadersOptions , výchozí hlavičky, které se mají předat, jsou None.

Proxy servery spuštěné na adresách zpětné smyčky (127.0.0.0/8, [::1]včetně standardní adresy místního hostitele (127.0.0.1) jsou ve výchozím nastavení důvěryhodné. Pokud jiné důvěryhodné proxy servery nebo sítě v rámci organizace zpracovávají požadavky mezi internetem a webovým serverem, přidejte je do seznamu KnownProxies nebo KnownNetworks pomocí ForwardedHeadersOptions. Následující příklad přidá důvěryhodný proxy server na IP adresu 10.0.0.100 do middlewaru KnownProxies Forwarded Headers v Startup.ConfigureServices:

System.Net Přidejte obor názvů do horní části souboru:

using System.Net;

Použijte následující registraci služby:

services.Configure<ForwardedHeadersOptions>(options =>
{
    options.KnownProxies.Add(IPAddress.Parse("10.0.0.100"));
});

Další informace najdete v tématu Konfigurace ASP.NET Core pro práci s proxy servery a nástroji pro vyrovnávání zatížení.

Instalace Apache

Aktualizujte balíčky CentOS na nejnovější stabilní verze:

sudo yum update -y

Nainstalujte webový server Apache do CentOS jedním yum příkazem:

sudo yum -y install httpd mod_ssl

Ukázkový výstup po spuštění příkazu:

Downloading packages:
httpd-2.4.6-40.el7.centos.4.x86_64.rpm               | 2.7 MB  00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : httpd-2.4.6-40.el7.centos.4.x86_64      1/1 
Verifying  : httpd-2.4.6-40.el7.centos.4.x86_64      1/1 

Installed:
httpd.x86_64 0:2.4.6-40.el7.centos.4

Complete!

Poznámka:

V tomto příkladu výstup odráží httpd.86_64, protože verze CentOS 7 je 64bitová. Pokud chcete ověřit, kde je Apache nainstalovaný, spusťte whereis httpd z příkazového řádku.

Konfigurace Apache

Konfigurační soubory pro Apache se nacházejí v adresáři /etc/httpd/conf.d/ . V Apache na Ubuntu jsou všechny konfigurační soubory virtuálního hostitele uloženy v /etc/apache2/sites-available. Každý soubor s příponou .conf se zpracovává abecedně kromě konfiguračních souborů modulu, ve /etc/httpd/conf.modules.d/kterém jsou všechny konfigurační soubory potřebné k načtení modulů.

Vytvořte pro aplikaci konfigurační soubor s názvem helloapp.conf:

<VirtualHost *:*>
    RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}s
</VirtualHost>

<VirtualHost *:80>
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:5000/
    ProxyPassReverse / http://127.0.0.1:5000/
    ServerName www.example.com
    ServerAlias *.example.com
    ErrorLog ${APACHE_LOG_DIR}/helloapp-error.log
    CustomLog ${APACHE_LOG_DIR}/helloapp-access.log common
</VirtualHost>

Poznámka: Verze Apache starší než 2.4.6 nevyžadují, aby RequestHeader set obsahovaly koncové údaje s:

<VirtualHost *:*>
    RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
</VirtualHost>

Další informace najdete v modulu %{VARNAME}s Apache mod_headers.

Blok VirtualHost se může zobrazit vícekrát v jednom nebo více souborech na serveru. V předchozím konfiguračním souboru Apache přijímá veřejný provoz na portu 80. www.example.com Doména se obsluhuje a *.example.com alias se přeloží na stejný web. Další informace najdete v tématu Podpora virtuálních hostitelů založených na názvu. Požadavky se přesouvají v kořenovém adresáři na port 5000 serveru na adrese 127.0.0.1. Pro obousměrnou komunikaci ProxyPass a ProxyPassReverse vyžadují se. Pokud chcete změnit KestrelIP adresu nebo port, přečtěte si téma Kestrel: Konfigurace koncového bodu.

Blok VirtualHost se může zobrazit vícekrát v jednom nebo více souborech na serveru. V předchozím konfiguračním souboru Apache přijímá veřejný provoz na portu 80. www.example.com Doména se obsluhuje a *.example.com alias se přeloží na stejný web. Další informace najdete v tématu Podpora virtuálních hostitelů založených na názvu. Požadavky se přesouvají v kořenovém adresáři na port 5000 serveru na adrese 127.0.0.1. Pro obousměrnou komunikaci ProxyPass a ProxyPassReverse vyžadují se. Pokud chcete změnit KestrelIP adresu nebo port, přečtěte si téma Kestrel: Konfigurace koncového bodu.

Vytvořte symbolický odkaz na /etc/apache2/sites-enabled adresář, který bude Apache číst při spuštění:

sudo ln -s /etc/apache2/sites-available/helloapp.conf /etc/apache2/sites-enabled/

Upozorňující

Nepodařilo se zadat správnou direktivu ServerName v bloku VirtualHost zveřejňuje vaši aplikaci ohrožení zabezpečení. Vazba zástupných znaků subdomény (například *.example.com) nepředstavuje toto bezpečnostní riziko, pokud řídíte celou nadřazenou doménu (na rozdíl od *.comohrožení zabezpečení). Další informace naleznete v dokumentu RFC 9110: Sémantika HTTP (oddíl 7.2: Hostitel a :authority).

Protokolování lze nakonfigurovat podle VirtualHost použití ErrorLog a CustomLog direktiv. ErrorLog je umístění, kde server protokoluje chyby a CustomLog nastaví název souboru a formát souboru protokolu. V tomto případě se protokolují informace o požadavku. Každý požadavek má jeden řádek.

Uložte soubor a otestujte konfiguraci. Pokud vše projde, měla by být Syntax [OK]odpověď .

sudo apachectl configtest

Restartujte Apache:

sudo systemctl restart httpd
sudo systemctl enable httpd

Další informace o hodnotách direktiv hlaviček najdete v tématu o mod_headers modulu Apache.

Monitorování aplikace

Apache je teď nastavený tak, aby předával požadavky do http://localhost:80 aplikace ASP.NET Core spuštěné na adrese Kestrelhttp://127.0.0.1:5000. Apache ale není nastavený pro správu Kestrel procesu. Pomocí systemd a vytvoření souboru služby spusťte a monitorujte podkladovou webovou aplikaci. systemd je inicializační systém, který poskytuje mnoho výkonných funkcí pro spouštění, zastavování a správu procesů.

Vytvoření souboru služby

Vytvořte definiční soubor služby:

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

Ukázkový soubor služby pro aplikaci:

[Unit]
Description=Example .NET Web API App running on CentOS 7

[Service]
WorkingDirectory=/var/www/helloapp
ExecStart=/usr/local/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=apache
Environment=ASPNETCORE_ENVIRONMENT=Production 

[Install]
WantedBy=multi-user.target

Poznámka: Nastavte local/bin složku pro vaši distribuci. Některé verze Ubuntu vyžadují ExecStart=/usr/bin/dotnet

V předchozím příkladu je uživatel, který spravuje službu, určen možností User . Uživatel (apache) musí existovat a mít správné vlastnictví souborů aplikace.

Slouží TimeoutStopSec ke konfiguraci doby trvání čekání na vypnutí aplikace po přijetí počátečního signálu přerušení. Pokud se aplikace v tomto období nevypíná, služba SIGKILL se vydá za účelem ukončení aplikace. Zadejte hodnotu jako jednotkové sekundy (například 150), hodnotu časového rozsahu (například 2min 30s) nebo infinity pokud chcete časový limit zakázat. TimeoutStopSec výchozí hodnota v konfiguračním DefaultTimeoutStopSec souboru správce (systemd-system.conf, system.conf.d, systemd-user.conf, user.conf.d). Výchozí časový limit většiny distribucí je 90 sekund.

# The default value is 90 seconds for most distributions.
TimeoutStopSec=90

Některé hodnoty (například SQL připojovací řetězec) musí být uchycené, aby zprostředkovatelé konfigurace mohli číst proměnné prostředí. Pomocí následujícího příkazu vygenerujte správně řídicí hodnotu pro použití v konfiguračním souboru:

systemd-escape "<value-to-escape>"

Oddělovače dvojtečky (:) nejsou podporovány v názvech proměnných prostředí. Místo dvojtečky použijte dvojité podtržítko (__). Zprostředkovatel konfigurace proměnných prostředí převede dvojtržítka na dvojtečky, když se proměnné prostředí načtou do konfigurace. V následujícím příkladu je klíč ConnectionStrings:DefaultConnection připojovací řetězec nastaven do definičního souboru služby taktoConnectionStrings__DefaultConnection:

Oddělovače dvojtečky (:) nejsou podporovány v názvech proměnných prostředí. Místo dvojtečky použijte dvojité podtržítko (__). Zprostředkovatel konfigurace proměnných prostředí převede dvojtržítka na dvojtečky, když se proměnné prostředí načtou do konfigurace. V následujícím příkladu je klíč ConnectionStrings:DefaultConnection připojovací řetězec nastaven do definičního souboru služby taktoConnectionStrings__DefaultConnection:

Environment=ConnectionStrings__DefaultConnection={Connection String}

Uložte soubor a povolte službu:

sudo systemctl enable kestrel-helloapp.service

Spusťte službu a ověřte, že je spuštěná:

sudo systemctl start kestrel-helloapp.service
sudo systemctl status kestrel-helloapp.service

◝ kestrel-helloapp.service - Example .NET Web API App running on CentOS 7
    Loaded: loaded (/etc/systemd/system/kestrel-helloapp.service; enabled)
    Active: active (running) since Thu 2016-10-18 04:09:35 NZDT; 35s ago
Main PID: 9021 (dotnet)
    CGroup: /system.slice/kestrel-helloapp.service
            └─9021 /usr/local/bin/dotnet /var/www/helloapp/helloapp.dll

S nakonfigurovaným a Kestrel spravovaným reverzním proxy serverem prostřednictvím systému je webová aplikace plně nakonfigurovaná a je přístupná z prohlížeče na místním počítači na http://localhostadrese . Kontrola hlaviček odpovědi, hlavička Serveru označuje, že aplikace ASP.NET Core obsluhuje Kestrel:

HTTP/1.1 200 OK
Date: Tue, 11 Oct 2016 16:22:23 GMT
Server: Kestrel
Keep-Alive: timeout=5, max=98
Connection: Keep-Alive
Transfer-Encoding: chunked

Zobrazení protokolů

Vzhledem k tomu, že se webová aplikace spravuje Kestrel pomocí systémového systému, události a procesy se protokolují do centralizovaného deníku. Tento deník však obsahuje položky pro všechny služby a procesy spravované systémem. Pokud chcete zobrazit kestrel-helloapp.servicekonkrétní položky, použijte následující příkaz:

sudo journalctl -fu kestrel-helloapp.service

Pro filtrování času zadejte pomocí příkazu možnosti času. Slouží --since today například k filtrování aktuálního dne nebo --until 1 hour ago k zobrazení položek předchozí hodiny. Další informace najdete na stránce man pro deník.

sudo journalctl -fu kestrel-helloapp.service --since "2016-10-18" --until "2016-10-18 04:00"

Ochrana dat

Zásobník ASP.NET Core Data Protection používá několik middlewarů ASP.NET Core, včetně middlewaru ověřování (například cookie middleware) a ochrany proti padělání žádostí mezi weby (CSRF). I když rozhraní API ochrany dat nejsou volána uživatelským kódem, ochrana dat by měla být nakonfigurovaná tak, aby vytvořila trvalé úložiště kryptografických klíčů. Pokud ochrana dat není nakonfigurovaná, klíče se uchovávají v paměti a při restartování aplikace se zahodí.

Pokud se svazek klíčů uchovává v paměti, při restartování aplikace se stane následující:

  • Všechny ověřovací tokeny založené na souborech cookie se zneplatní.
  • Uživatelé se při dalším požadavku musí přihlásit znovu.
  • Veškerá data chráněná daným svazkem klíčů již není možné dešifrovat. To může zahrnovat tokeny CSRF nebo soubory cookie ASP.NET Core MVC TempData.

Informace o konfiguraci ochrany dat pro zachování a šifrování okruhu klíčů najdete tady:

Zabezpečení aplikace

Konfigurace brány firewall

Brána firewall je dynamický démon pro správu brány firewall s podporou zón sítě. Porty a filtrování paketů je stále možné spravovat pomocí iptables. Brána firewall by měla být ve výchozím nastavení nainstalovaná . yum lze použít k instalaci balíčku nebo ověření, že je nainstalovaný.

sudo yum install firewalld -y

Slouží firewalld k otevření jenom portů potřebných pro aplikaci. V tomto případě se používají porty 80 a 443. Následující příkazy trvale nastaví porty 80 a 443 tak, aby se otevřely:

sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --add-port=443/tcp --permanent

Znovu načtěte nastavení brány firewall. Zkontrolujte dostupné služby a porty ve výchozí zóně. Možnosti jsou k dispozici kontrolou firewall-cmd -h.

sudo firewall-cmd --reload
sudo firewall-cmd --list-all
public (default, active)
interfaces: eth0
sources: 
services: dhcpv6-client
ports: 443/tcp 80/tcp
masquerade: no
forward-ports: 
icmp-blocks: 
rich rules: 

Konfigurace HTTPS

Konfigurace aplikace pro zabezpečená místní připojení (HTTPS)

Příkaz dotnet run používá soubor aplikace Properties/launchSettings.json , který nakonfiguruje aplikaci tak, aby naslouchala adresám URL poskytovaných applicationUrl vlastností (například https://localhost:5001;http://localhost:5000).

Nakonfigurujte aplikaci tak, aby používala certifikát ve vývoji pro dotnet run příkaz nebo vývojové prostředí (F5 nebo Ctrl+F5 v editoru Visual Studio Code) pomocí jednoho z následujících přístupů:

Konfigurace reverzního proxy serveru pro zabezpečená připojení klienta (HTTPS)

Upozorňující

Konfigurace zabezpečení v této části je obecná konfigurace, která se má použít jako výchozí bod pro další přizpůsobení. Nemůžeme poskytovat podporu pro nástroje, servery a operační systémy třetích stran. Použijte konfiguraci v této části na vlastní nebezpečí. Další informace najdete v následujících zdrojích informací:

Ke konfiguraci Apache pro HTTPS se používá modul mod_ssl . Při instalaci modulu httpd se nainstaloval také modul mod_ssl. Pokud ho nenainstalovali, použijte yum ho k jeho přidání do konfigurace.

sudo yum install mod_ssl

Pokud chcete vynutit HTTPS, nainstalujte mod_rewrite modul pro povolení přepisování adres URL:

sudo yum install mod_rewrite

Upravte soubor helloapp.conf tak, aby umožňoval zabezpečenou komunikaci na portu 443.

Následující příklad nenakonfiguruje server tak, aby přesměrovává nezabezpečené požadavky. Doporučujeme použít middleware přesměrování HTTPS. Další informace najdete v tématu Vynucení HTTPS v ASP.NET Core.

Poznámka:

Pro vývojová prostředí, ve kterých konfigurace serveru zpracovává zabezpečené přesměrování místo middlewaru přesměrování HTTPS, doporučujeme místo trvalých přesměrování (301) používat dočasné přesměrování (302). Ukládání odkazů do mezipaměti může způsobit nestabilní chování ve vývojových prostředích.

Strict-Transport-Security Přidání hlavičky (HSTS) zajišťuje, že všechny následné požadavky provedené klientem budou přes PROTOKOL HTTPS. Pokyny k nastavení hlavičky Strict-Transport-Security najdete v tématu Vynucení HTTPS v ASP.NET Core.

<VirtualHost *:*>
    RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
</VirtualHost>

<VirtualHost *:443>
    Protocols             h2 http/1.1
    ProxyPreserveHost     On
    ProxyPass             / http://127.0.0.1:5000/
    ProxyPassReverse      / http://127.0.0.1:5000/
    ErrorLog              /var/log/httpd/helloapp-error.log
    CustomLog             /var/log/httpd/helloapp-access.log common
    SSLEngine             on
    SSLProtocol           all -SSLv3 -TLSv1 -TLSv1.1
    SSLHonorCipherOrder   off
    SSLCompression        off
    SSLSessionTickets     on
    SSLUseStapling        off
    SSLCertificateFile    /etc/pki/tls/certs/localhost.crt
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
    SSLCipherSuite        ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
</VirtualHost>

Poznámka:

Tento příklad používá místně vygenerovaný certifikát. SslCertificateFile by měl být primárním souborem certifikátu pro název domény. SslCertificateKeyFile by měl být soubor klíče vygenerovaný při vytvoření CSR. SSLCertificateChainFile by měl být zprostředkující soubor certifikátu (pokud existuje) poskytnutý certifikační autoritou.

K provozu webového serveru TLS 1.3 s OpenSSL 1.1.1 se vyžaduje Apache HTTP Server verze 2.4.43 nebo novější.

Poznámka:

Předchozí příklad zakáže připojení protokolu OCSP (Online Certificate Status Protocol). Další informace a pokyny k povolení OCSP najdete v tématu Připojení OCSP (dokumentace k Apache).

Uložte soubor a otestujte konfiguraci:

sudo service httpd configtest

Restartujte Apache:

sudo systemctl restart httpd

Další návrhy Apache

Restartování aplikací se sdílenými aktualizacemi architektury

Po upgradu sdílené architektury na serveru restartujte aplikace ASP.NET Core hostované serverem.

Další záhlaví

Pro zabezpečení před škodlivými útoky existuje několik hlaviček, které by se měly upravit nebo přidat. Ujistěte se, že mod_headers je modul nainstalovaný:

sudo yum install mod_headers

Zabezpečení Apache před útoky clickjacking

Clickjacking, označovaný také jako útok na nápravu uživatelského rozhraní, je škodlivý útok, při kterém je návštěvník webu zklamaný kliknutím na odkaz nebo tlačítko na jiné stránce, než který právě navštěvuje. Slouží X-FRAME-OPTIONS k zabezpečení webu.

Zmírnění útoků clickjacking:

  1. Upravte soubor httpd.conf:

    sudo nano /etc/httpd/conf/httpd.conf
    

    Přidejte řádek Header append X-FRAME-OPTIONS "SAMEORIGIN".

  2. Uložte soubor.

  3. Restartujte Apache.

Šifrování typu MIME

Hlavička X-Content-Type-Options brání aplikaci Internet Explorer v zašifrování MIME (určení souboru Content-Type z obsahu souboru). Pokud server nastaví hlavičku Content-Type s text/html nastavenou nosniff možností, Aplikace Internet Explorer vykreslí obsah text/html bez ohledu na obsah souboru.

Upravte soubor httpd.conf:

sudo nano /etc/httpd/conf/httpd.conf

Přidejte řádek Header set X-Content-Type-Options "nosniff". Uložte soubor. Restartujte Apache.

Vyrovnávání zatížení

Tento příklad ukazuje, jak nastavit a nakonfigurovat Apache v CentOS 7 a Kestrel na stejném počítači instance. Aby nedošlo k jedinému bodu selhání; použití mod_proxy_balancer a úprava virtualHost by umožňovala správu více instancí webových aplikací za proxy serverem Apache.

sudo yum install mod_proxy_balancer

V konfiguračním souboru uvedeném níže je další instance helloapp nastavená tak, aby běžela na portu 5001. Část Proxy je nastavena s konfigurací nástroje pro vyrovnávání zatížení se dvěma členy pro vyrovnávání zatížení požadavky.

<VirtualHost *:*>
    RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
</VirtualHost>

<VirtualHost *:80>
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>

<VirtualHost *:443>
    ProxyPass / balancer://mycluster/ 

    ProxyPassReverse / http://127.0.0.1:5000/
    ProxyPassReverse / http://127.0.0.1:5001/

    <Proxy balancer://mycluster>
        BalancerMember http://127.0.0.1:5000
        BalancerMember http://127.0.0.1:5001 
        ProxySet lbmethod=byrequests
    </Proxy>

    <Location />
        SetHandler balancer
    </Location>
    ErrorLog /var/log/httpd/helloapp-error.log
    CustomLog /var/log/httpd/helloapp-access.log common
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:!RC4+RSA:+HIGH:+MEDIUM:!LOW:!RC4
    SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
</VirtualHost>

Omezení rychlosti

Pomocí mod_ratelimit, která je součástí modulu httpd , může být šířka pásma klientů omezená:

sudo nano /etc/httpd/conf.d/ratelimit.conf

Ukázkový soubor omezuje šířku pásma jako 600 kB/s v kořenovém umístění:

<IfModule mod_ratelimit.c>
    <Location />
        SetOutputFilter RATE_LIMIT
        SetEnv rate-limit 600
    </Location>
</IfModule>

Pole s dlouhou hlavičkou požadavku

Výchozí nastavení proxy serveru obvykle omezují pole hlaviček požadavků na 8 190 bajtů. Aplikace může vyžadovat pole delší než výchozí (například aplikace, které používají ID Microsoft Entra). Pokud jsou požadována delší pole, direktiva LimitRequestFieldSize proxy serveru vyžaduje úpravu. Hodnota, která se má použít, závisí na scénáři. Další informace najdete v dokumentaci k serveru.

Upozorňující

Nezvětšujte výchozí hodnotu LimitRequestFieldSize , pokud není potřeba. Zvýšení hodnoty zvyšuje riziko přetečení vyrovnávací paměti (přetečení) a útoků doS (DoS) škodlivých uživatelů.

Další materiály