Apache ile Linux üzerinde ASP.NET Core Barındırma

Tarafından Shayne Boyer

Bu kılavuzu kullanarak, HTTP trafiğini sunucuda çalışan bir ASP.NET Core web uygulamasına yeniden yönlendirmek için CentOS 7'de Apache'yi ters ara sunucu olarak ayarlamayı öğrenin.Kestrel mod_proxy uzantısı ve ilgili modüller sunucunun ters ara sunucusunu oluşturur.

Dikkat

Bu makalede, Kullanım Süresi Sonu (EOL) durumuna yakın bir Linux dağıtımı olan CentOS'a başvuruda bulunur. Lütfen kullanımınızı göz önünde bulundurun ve uygun şekilde planlayın. Daha fazla bilgi için bkz . CentOS Kullanım Süresi Sonu kılavuzu.

Önkoşullar

  • Sudo ayrıcalığına sahip standart bir kullanıcı hesabıyla CentOS 7 çalıştıran sunucu.
  • Sunucuya .NET Core çalışma zamanını yükleyin.
    1. .NET Core'u İndir sayfasını ziyaret edin.
    2. En son önizleme dışı .NET Core sürümünü seçin.
    3. Uygulamaları çalıştır - Çalışma Zamanı altındaki tabloda en son önizleme dışı çalışma zamanını indirin.
    4. Linux Paket yöneticisi yönergeleri bağlantısını seçin ve CentOS yönergelerini izleyin.
  • Mevcut bir ASP.NET Core uygulaması.

Paylaşılan çerçeveyi yükselttikten sonra gelecekte herhangi bir noktada, sunucu tarafından barındırılan ASP.NET Core uygulamalarını yeniden başlatın.

Uygulama üzerinde yayımlama ve kopyalama

Uygulamayı çerçeveye bağımlı bir dağıtım için yapılandırın.

Uygulama Geliştirme ortamında yerel olarak çalıştırılıyorsa ve sunucu tarafından güvenli HTTPS bağlantıları yapacak şekilde yapılandırılmamışsa, aşağıdaki yaklaşımlardan birini benimseyin:

  • Uygulamayı güvenli yerel bağlantıları işleyecek şekilde yapılandırın. Daha fazla bilgi için HTTPS yapılandırma bölümüne bakın.

  • Uygulamayı güvenli olmayan uç noktada çalışacak şekilde yapılandırın:

    • Geliştirme ortamında HTTPS Yeniden Yönlendirme Ara Yazılımını devre dışı bırakın (Program.cs):

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

      Daha fazla bilgi için, bkz. ASP.NET Core'da birden çok ortam kullanma.

    • Dosyadaki applicationUrlProperties/launchSettings.json özelliğinden (varsa) kaldırın https://localhost:5001 .

Ortama göre yapılandırma hakkında daha fazla bilgi için bkz . ASP.NET Core'da birden çok ortam kullanma.

Bir uygulamayı sunucuda çalıştırabilen bir dizine (örneğin, bin/Release/{TARGET FRAMEWORK MONIKER}/publishyer tutucunun Hedef Çerçeve Adı (TFM) olduğu{TARGET FRAMEWORK MONIKER}) paketlemek için geliştirme ortamından dotnet publish komutunu çalıştırın:

dotnet publish --configuration Release

Uygulama, sunucuda .NET Core çalışma zamanını korumayı tercih ediyorsanız bağımsız dağıtım olarak da yayımlanabilir.

ASP.NET Core uygulamasını, kuruluşun iş akışıyla (örneğin, SCP, SFTP) tümleşen bir araç kullanarak sunucuya kopyalayın. Var dizininin altında web uygulamalarını bulmak yaygın bir durumdur (örneğin, var/www/helloapp).

Not

Üretim dağıtım senaryosunda sürekli tümleştirme iş akışı, uygulamayı yayımlama ve varlıkları sunucuya kopyalama işini yapar.

Ara sunucu yapılandırma

Ters ara sunucu, dinamik web uygulamalarına hizmet veren yaygın bir kurulumdur. Ters ara sunucu HTTP isteğini sonlandırır ve ASP.NET uygulamasına iletir.

Ara sunucu, istekleri yerine getirmek yerine istemci isteklerini başka bir sunucuya iletir. Ters ara sunucu, genellikle rastgele istemciler adına sabit bir hedefe iletir. Bu kılavuzda Apache, ASP.NET Core uygulamasına hizmet veren Kestrel sunucuda çalışan ters ara sunucu olarak yapılandırılır.

İstekler ters ara sunucu tarafından iletildiğinden, Microsoft.AspNetCore.HttpOverrides paketinden İletilen Üst Bilgiler Ara Yazılımını kullanın. Ara yazılım, yeniden yönlendirme URI'lerinin ve diğer güvenlik ilkelerinin X-Forwarded-Proto düzgün çalışması için üst bilgisini kullanarak öğesini güncelleştirirRequest.Scheme.

Şemaya bağlı olan kimlik doğrulaması, bağlantı oluşturma, yeniden yönlendirmeler ve coğrafi konum gibi tüm bileşenler, İletilen Üst Bilgiler Ara Yazılımı çağrıldıktan sonra yerleştirilmelidir.

İletilen Üst Bilgiler Ara Yazılımı diğer ara yazılımlardan önce çalıştırılmalıdır. Bu sıralama, iletilen üst bilgilere dayalı ara yazılımların işlemek üzere üst bilgi değerlerini kullanabilmesini sağlar. İletilen Üst Bilgiler Ara Yazılımını tanılamalar ve hata işleme ara yazılımından sonra çalıştırmak için bkz. İletilen Üst Bilgiler Ara Yazılımı sırası.

UseForwardedHeaders Diğer ara yazılımı çağırmadan önce en üstündeki Startup.Configure yöntemini çağırın. ara yazılımı ve X-Forwarded-Proto üst bilgilerini iletecek X-Forwarded-For şekilde yapılandırın.

Ad alanını Microsoft.AspNetCore.HttpOverrides dosyanın en üstüne ekleyin:

using Microsoft.AspNetCore.HttpOverrides;

Uygulama işleme işlem hattında:

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

app.UseAuthentication();

Ara yazılım için hayır ForwardedHeadersOptions belirtilmezse, iletecek varsayılan üst bilgiler şeklindedir None.

Standart localhost adresi (127.0.0.0/8, [::1]127.0.0.1) dahil olmak üzere geri döngü adreslerinde () çalışan proxy'lere varsayılan olarak güvenilir. Kuruluştaki diğer güvenilen proxy'ler veya ağlar İnternet ile web sunucusu arasındaki istekleri işliyorsa, bunları veya KnownNetworks ile ForwardedHeadersOptionslistesine KnownProxies ekleyin. Aşağıdaki örnek, 10.0.0.100 IP adresinde güvenilen bir proxy sunucusunu içindeki İletilen Üst Bilgiler Ara Yazılımı'na KnownProxiesStartup.ConfigureServicesekler:

Ad alanını System.Net dosyanın en üstüne ekleyin:

using System.Net;

Aşağıdaki hizmet kaydını kullanın:

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

Daha fazla bilgi için bkz. ASP.NET Core'u ara sunucular ve yük dengeleyicilerle çalışacak şekilde yapılandırma.

Apache'yi yükleme

CentOS paketlerini en son kararlı sürümlerine güncelleştirin:

sudo yum update -y

Tek bir yum komutla Apache web sunucusunu CentOS'a yükleyin:

sudo yum -y install httpd mod_ssl

Komutu çalıştırdıktan sonra örnek çıktı:

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!

Not

Bu örnekte, CentOS 7 sürümü 64 bit olduğundan çıkış httpd.86_64 yansıtır. Apache'nin nereye yüklendiğini doğrulamak için bir komut isteminden komutunu çalıştırın whereis httpd .

Apache'yi yapılandırma

Apache için yapılandırma dosyaları dizinin içinde /etc/httpd/conf.d/ bulunur. Ubuntu üzerinde Apache'de, tüm sanal konak yapılandırma dosyaları içinde /etc/apache2/sites-availabledepolanır. .conf uzantısına sahip tüm dosyalar, modül yüklemek için gerekli yapılandırma dosyalarını içeren içindeki modül yapılandırma dosyalarına /etc/httpd/conf.modules.d/ek olarak alfabetik sırada işlenir.

Uygulama için helloapp.conf adlı bir yapılandırma dosyası oluşturun:

<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>

Not: 2.4.6'nın önceki Apache sürümleri, sondakini siçermesini RequestHeader set gerektirmez:

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

Daha fazla bilgi için bkz %{VARNAME}s. Apache Module mod_headers.

Blok VirtualHost , sunucudaki bir veya daha fazla dosyada birden çok kez görünebilir. Yukarıdaki yapılandırma dosyasında Apache, 80 numaralı bağlantı noktasında genel trafiği kabul eder. Etki alanı www.example.com sunulur ve *.example.com diğer ad aynı web sitesine çözümlenir. Daha fazla bilgi için bkz . Ad tabanlı sanal konak desteği. İstekler kökte sunucunun 5000 numaralı bağlantı noktasına 127.0.0.1'de proksid edilir. çift yönlü iletişim ProxyPass için ve ProxyPassReverse gereklidir. 'nin IP/bağlantı noktasını değiştirmek Kestreliçin bkz Kestrel. Uç nokta yapılandırması.

Blok VirtualHost , sunucudaki bir veya daha fazla dosyada birden çok kez görünebilir. Yukarıdaki yapılandırma dosyasında Apache, 80 numaralı bağlantı noktasında genel trafiği kabul eder. Etki alanı www.example.com sunulur ve *.example.com diğer ad aynı web sitesine çözümlenir. Daha fazla bilgi için bkz . Ad tabanlı sanal konak desteği. İstekler kökte sunucunun 5000 numaralı bağlantı noktasına 127.0.0.1'de proksid edilir. çift yönlü iletişim ProxyPass için ve ProxyPassReverse gereklidir. 'nin IP/bağlantı noktasını değiştirmek Kestreliçin bkz Kestrel. Uç nokta yapılandırması.

Apache'nin /etc/apache2/sites-enabled başlatma sırasında okuyacağı dizine sembolik bir bağlantı oluşturun:

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

Uyarı

VirtualHost bloğunda düzgün bir ServerName yönergesi belirtimemesi uygulamanızı güvenlik açıklarına maruz bırakır. Alt etki alanı joker karakter bağlaması (örneğin, *.example.com) üst etki alanının tamamını denetlerseniz ( *.comgüvenlik açığı olan yerine) bu güvenlik riskini oluşturmaz. Daha fazla bilgi için bkz . RFC 9110: HTTP Semantiği (Bölüm 7.2: Konak ve :yetkili).

Günlük, ve CustomLog yönergeleri kullanılarak VirtualHostErrorLog yapılandırılabilir. ErrorLog , sunucunun hataları günlüğe kaydeddiği ve CustomLog günlük dosyasının dosya adını ve biçimini ayarladığı konumdur. Bu durumda, istek bilgilerinin günlüğe kaydedildiği yer burasıdır. Her istek için bir satır vardır.

Dosyayı kaydedin ve yapılandırmayı test edin. Her şey geçerse yanıt olmalıdır Syntax [OK].

sudo apachectl configtest

Apache'i yeniden başlatın:

sudo systemctl restart httpd
sudo systemctl enable httpd

Üst bilgi yönergesi değerleri hakkında daha fazla bilgi için bkz . Apache Module mod_headers.

Uygulamayı izleme

Apache artık üzerinde çalışan Kestrelhttp://127.0.0.1:5000ASP.NET Core uygulamasına yapılan http://localhost:80 istekleri iletecek şekilde ayarlanmıştır. Ancak Apache işlemi yönetecek Kestrel şekilde ayarlanmadı. Temel web uygulamasını başlatmak ve izlemek için systemd kullanın ve bir hizmet dosyası oluşturun. systemd , işlemleri başlatmak, durdurmak ve yönetmek için birçok güçlü özellik sağlayan bir init sistemidir.

Hizmet dosyasını oluşturma

Hizmet tanımı dosyasını oluşturun:

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

Uygulama için örnek bir hizmet dosyası:

[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

Not: Dağıtımınız için klasörü ayarlayın local/bin . Ubuntu'nun bazı sürümleri için gerekli ExecStart=/usr/bin/dotnet

Yukarıdaki örnekte, hizmeti yöneten kullanıcı seçeneğiyle User belirtilir. Kullanıcının (apache) mevcut olması ve uygulamanın dosyalarına uygun sahip olması gerekir.

uygulamanın ilk kesme sinyalini aldıktan sonra kapanmasını bekleme süresini yapılandırmak için kullanın TimeoutStopSec . Uygulama bu süre içinde kapatılmıyorsa, uygulamayı sonlandırmak için SIGKILL verilir. Zaman aşımını devre dışı bırakmak için değeri birimsiz saniye (örneğin, 150), bir zaman aralığı değeri (örneğin, 2min 30s) infinity olarak belirtin. TimeoutStopSec, yönetici yapılandırma dosyasında (systemd-system.conf, system.conf.d, systemd-user.conf, user.conf.d) değerini DefaultTimeoutStopSec varsayılan olarak kullanır. Çoğu dağıtım için varsayılan zaman aşımı 90 saniyedir.

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

Yapılandırma sağlayıcılarının ortam değişkenlerini okuması için bazı değerlerin (örneğin, SQL bağlantı dizesi) kaçılması gerekir. Yapılandırma dosyasında kullanmak üzere doğru şekilde kaçış değeri oluşturmak için aşağıdaki komutu kullanın:

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

İki nokta (:) ayırıcıları ortam değişkeni adlarında desteklenmez. İki nokta üst üste yerine çift alt çizgi (__) kullanın. Ortam Değişkenleri yapılandırma sağlayıcısı, ortam değişkenleri yapılandırmaya okunduğunda çift alt çizgileri iki nokta üst üste dönüştürür. Aşağıdaki örnekte, bağlantı dizesi anahtarı ConnectionStrings:DefaultConnection hizmet tanımı dosyasına olarak ConnectionStrings__DefaultConnectionayarlanır:

İki nokta (:) ayırıcıları ortam değişkeni adlarında desteklenmez. İki nokta üst üste yerine çift alt çizgi (__) kullanın. Ortam Değişkenleri yapılandırma sağlayıcısı, ortam değişkenleri yapılandırmaya okunduğunda çift alt çizgileri iki nokta üst üste dönüştürür. Aşağıdaki örnekte, bağlantı dizesi anahtarı ConnectionStrings:DefaultConnection hizmet tanımı dosyasına olarak ConnectionStrings__DefaultConnectionayarlanır:

Environment=ConnectionStrings__DefaultConnection={Connection String}

Dosyayı kaydedin ve hizmeti etkinleştirin:

sudo systemctl enable kestrel-helloapp.service

Hizmeti başlatın ve çalıştığını doğrulayı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

Ters ara sunucu yapılandırıldığında ve Kestrel systemd aracılığıyla yönetildiğinde, web uygulaması tamamen yapılandırılır ve konumundaki http://localhostyerel makinedeki bir tarayıcıdan erişilebilir. Yanıt üst bilgilerini inceleyen Sunucu üst bilgisi, ASP.NET Core uygulamasının tarafından Kestrelsunulduğuna işaret eder:

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

Günlükleri görüntüleme

kullanan Kestrel web uygulaması systemd kullanılarak yönetildiğinden, olaylar ve işlemler merkezi bir günlüğe kaydedilir. Ancak bu günlük, systemd tarafından yönetilen tüm hizmet ve işlemlerin girdilerini içerir. -specific öğelerini görüntülemek kestrel-helloapp.serviceiçin aşağıdaki komutu kullanın:

sudo journalctl -fu kestrel-helloapp.service

Zaman filtreleme için, komutuyla zaman seçeneklerini belirtin. Örneğin, geçerli güne göre filtrelemek veya --until 1 hour ago önceki saatin girdilerini görmek için kullanın--since today. Daha fazla bilgi için journalctl için erkek sayfasına bakın.

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

Veri koruması

ASP.NET Core Data Protection yığını, kimlik doğrulama ara yazılımı (örneğin cookie ara yazılım) ve siteler arası istek sahteciliği (CSRF) korumaları dahil olmak üzere birkaç ASP.NET Core ara yazılımı tarafından kullanılır. Veri Koruma API'leri kullanıcı kodu tarafından çağrılmasa bile, veri koruması kalıcı bir şifreleme anahtar deposu oluşturacak şekilde yapılandırılmalıdır. Veri koruması yapılandırılmazsa anahtarlar bellekte tutulur ve uygulama yeniden başlatıldığında atılır.

Anahtarlık bellekte depolanıyorsa uygulama yeniden başlatıldığında:

Anahtar halkasını kalıcı hale getirmek ve şifrelemek için veri korumasını yapılandırmak için bkz:

Uygulamanın güvenliğini sağlama

Güvenlik Duvarını yapılandırma

Güvenlik duvarı, ağ bölgeleri desteğiyle güvenlik duvarını yönetmeye yönelik dinamik bir daemon'dır. Bağlantı noktaları ve paket filtreleme hala iptable'lar tarafından yönetilebilir. Güvenlik duvarı varsayılan olarak yüklenmelidir. yum paketi yüklemek veya yüklü olduğunu doğrulamak için kullanılabilir.

sudo yum install firewalld -y

Yalnızca uygulama için gereken bağlantı noktalarını açmak için kullanın firewalld . Bu durumda 80 ve 443 bağlantı noktaları kullanılır. Aşağıdaki komutlar 80 ve 443 bağlantı noktalarını kalıcı olarak açılacak şekilde ayarlar:

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

Güvenlik duvarı ayarlarını yeniden yükleyin. Varsayılan bölgedeki kullanılabilir hizmetleri ve bağlantı noktalarını denetleyin. Seçenekler, incelenerek firewall-cmd -hkullanılabilir.

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: 

HTTPS yapılandırması

Uygulamayı güvenli (HTTPS) yerel bağlantılar için yapılandırma

dotnet run komutu, uygulamanın Properties/launchSettings.json dosyasını kullanır. Bu komut, uygulamayı özelliği tarafından applicationUrl sağlanan URL'leri dinleyecek şekilde yapılandırır (örneğin, https://localhost:5001;http://localhost:5000).

Uygulamayı, aşağıdaki yaklaşımlardan birini kullanarak komut veya geliştirme ortamı (Visual Studio Code'da F5 veya Ctrl+F5) için dotnet run geliştirme aşamasında bir sertifika kullanacak şekilde yapılandırın:

Güvenli (HTTPS) istemci bağlantıları için ters ara sunucuyu yapılandırma

Uyarı

Bu bölümdeki güvenlik yapılandırması, daha fazla özelleştirme için başlangıç noktası olarak kullanılacak genel bir yapılandırmadır. Üçüncü taraf araçlar, sunucular ve işletim sistemleri için destek sağlayamıyoruz. Bu bölümdeki yapılandırmayı kendi riski altında kullanın. Daha fazla bilgi için aşağıdaki kaynaklara erişin:

HTTPS için Apache'yi yapılandırmak için mod_ssl modülü kullanılır. httpd modülü yüklendiğinde, mod_ssl modülü de yüklenmiştir. Yüklü değilse, yapılandırmaya eklemek için kullanın yum .

sudo yum install mod_ssl

HTTPS'yi zorunlu kılmak için URL yeniden yazmayı etkinleştirmek için modülünü yükleyin mod_rewrite :

sudo yum install mod_rewrite

443 numaralı bağlantı noktasında güvenli iletişimi etkinleştirmek için helloapp.conf dosyasını değiştirin.

Aşağıdaki örnek, sunucuyu güvenli olmayan istekleri yeniden yönlendirecek şekilde yapılandırmaz. HTTPS Yeniden Yönlendirme Ara Yazılımını kullanmanızı öneririz. Daha fazla bilgi için bkz . ASP.NET Core'da HTTPS'yi zorunlu kılma.

Not

Sunucu yapılandırmasının HTTPS Yeniden Yönlendirme Ara Yazılımı yerine güvenli yeniden yönlendirmeyi işlediği geliştirme ortamları için, kalıcı yeniden yönlendirmeler (301) yerine geçici yeniden yönlendirmeler (302) kullanmanızı öneririz. Bağlantı önbelleğe alma, geliştirme ortamlarında kararsız davranışlara neden olabilir.

Strict-Transport-Security (HSTS) üst bilgisi eklemek, istemci tarafından yapılan sonraki tüm isteklerin HTTPS üzerinden yapılmasını sağlar. Üst bilgiyi ayarlama hakkında yönergeler için bkz. ASP.NET Core'da HTTPS'yi zorunlu kılmaStrict-Transport-Security.

<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>

Not

Bu örnek, yerel olarak oluşturulan bir sertifikayı kullanıyor. SSLCertificateFile , etki alanı adının birincil sertifika dosyası olmalıdır. SSLCertificateKeyFile , CSR oluşturulduğunda oluşturulan anahtar dosyası olmalıdır. SSLCertificateChainFile , sertifika yetkilisi tarafından sağlanan ara sertifika dosyası (varsa) olmalıdır.

OpenSSL 1.1.1 ile TLS 1.3 web sunucusu çalıştırmak için Apache HTTP Server sürüm 2.4.43 veya üzeri gereklidir.

Not

Yukarıdaki örnek, Çevrimiçi Sertifika Durum Protokolü (OCSP) Zımbalamayı devre dışı bırakır. OCSP'yi etkinleştirme hakkında daha fazla bilgi ve kılavuz için bkz . OCSP Zımbalama (Apache belgeleri).

Dosyayı kaydedin ve yapılandırmayı test edin:

sudo service httpd configtest

Apache'i yeniden başlatın:

sudo systemctl restart httpd

Ek Apache önerileri

Paylaşılan çerçeve güncelleştirmeleriyle uygulamaları yeniden başlatma

Sunucuda paylaşılan çerçeveyi yükselttikten sonra, sunucu tarafından barındırılan ASP.NET Core uygulamalarını yeniden başlatın.

Ek üst bilgiler

Kötü amaçlı saldırılara karşı güvenlik sağlamak için değiştirilmesi veya eklenmesi gereken birkaç üst bilgi vardır. Modülün yüklendiğinden mod_headers emin olun:

sudo yum install mod_headers

Apache'nin tıklama kaçırma saldırılarına karşı güvenliğini sağlama

Kullanıcı arabirimi yeniden giriş saldırısı olarak da bilinen tıklama hırsızlığı, web sitesi ziyaretçilerinin şu anda ziyaret ettikleri sayfadan farklı bir sayfadaki bir bağlantıya veya düğmeye tıklamak için kandırıldığı kötü amaçlı bir saldırıdır. Sitenin güvenliğini sağlamak için kullanın X-FRAME-OPTIONS .

Tıklama kaçırma saldırılarını azaltmak için:

  1. httpd.conf dosyasını düzenleyin:

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

    Header append X-FRAME-OPTIONS "SAMEORIGIN" satırını ekleyin.

  2. Dosyayı kaydedin.

  3. Apache'i yeniden başlatın.

MIME türü algılama

Üst bilgi, X-Content-Type-Options Internet Explorer'ın MIME algılamasını engeller (dosyanın içeriğindeki bir dosyayı Content-Type belirler). Sunucu üst bilgiyi text/html seçenek kümesiyle nosniff ayarlarsaContent-Type, Internet Explorer dosyanın içeriğinden bağımsız olarak text/html içeriği işler.

httpd.conf dosyasını düzenleyin:

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

Header set X-Content-Type-Options "nosniff" satırını ekleyin. Dosyayı kaydedin. Apache'i yeniden başlatın.

Yük Dengeleme

Bu örnekte, CentOS 7'de ve aynı örnek makinede Apache'yi ayarlama ve Kestrel yapılandırma gösterilmektedir. Tek bir hata noktası olmaması için; mod_proxy_balancer kullanmak ve VirtualHost'un değiştirilmesi Apache proxy sunucusunun arkasındaki web uygulamalarının birden çok örneğini yönetmeye olanak tanır.

sudo yum install mod_proxy_balancer

Aşağıda gösterilen yapılandırma dosyasında, 5001 numaralı bağlantı noktasında çalışacak şekilde ek bir örneği helloapp ayarlanır. Ara Sunucu bölümü, isteklerin yükünü dengelemek için iki üyeye sahip bir dengeleyici yapılandırmasıyla ayarlanır.

<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>

Hız Sınırları

httpd modülünde yer alan mod_ratelimit kullanıldığında istemcilerin bant genişliği sınırlanabilir:

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

Örnek dosya, kök konumun altında bant genişliğini 600 KB/sn olarak sınırlar:

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

Uzun istek üst bilgisi alanları

Proxy sunucusu varsayılan ayarları genellikle istek üst bilgisi alanlarını 8.190 baytla sınırlar. Bir uygulama varsayılandan daha uzun alanlar gerektirebilir (örneğin, Microsoft Entra Id kullanan uygulamalar). Daha uzun alanlar gerekiyorsa, ara sunucunun LimitRequestFieldSize yönergesi ayarlama gerektirir. Uygulanacak değer senaryoya bağlıdır. Daha fazla bilgi için sunucunuzun belgelerine bakın.

Uyarı

Gerekli olmadıkça varsayılan değerini artırmayın LimitRequestFieldSize . Değerin artırılması, kötü amaçlı kullanıcıların arabellek taşması (taşma) ve Hizmet Reddi (DoS) saldırıları riskini artırır.

Ek kaynaklar