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.
- .NET Core'u İndir sayfasını ziyaret edin.
- En son önizleme dışı .NET Core sürümünü seçin.
- Uygulamaları çalıştır - Çalışma Zamanı altındaki tabloda en son önizleme dışı çalışma zamanını indirin.
- 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
applicationUrl
Properties/launchSettings.json
özelliğinden (varsa) kaldırınhttps://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}/publish
yer 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 KnownProxies
Startup.ConfigureServices
ekler:
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-available
depolanı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 s
iç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 ( *.com
gü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 VirtualHost
ErrorLog
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:5000
ASP.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__DefaultConnection
ayarlanı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__DefaultConnection
ayarlanı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://localhost
yerel 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.service
iç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:
- Tüm cookie tabanlı kimlik doğrulama belirteçleri geçersiz kılınır.
- Kullanıcıların, sonraki isteklerinde yeniden oturum açmaları gerekir.
- Artık anahtarlıkla korunan verilerin şifresi çözülemez. CSRF belirteçleri ve ASP.NET Core MVC TempData tanımlama bilgileri de bunlara dahil olabilir.
Anahtar halkasını kalıcı hale getirmek ve şifrelemek için veri korumasını yapılandırmak için bkz:
- ASP.NET Core'daki önemli depolama sağlayıcıları
- ASP.NET Core kullanarak Windows ve Azure'da bekleyen anahtar şifrelemesi
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 -h
kullanı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:
- Varsayılan sertifikayı yapılandırmadan değiştirme (Önerilen)
- KestrelServerOptions.ConfigureHttpsDefaults
- Varsayılan sertifikayı yapılandırmadan değiştirme (Önerilen)
- KestrelServerOptions.ConfigureHttpsDefaults
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:
- Apache SSL/TLS Şifrelemesi (Apache belgeleri)
- SSL Yapılandırma Oluşturucu'mozilla.org
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:
httpd.conf dosyasını düzenleyin:
sudo nano /etc/httpd/conf/httpd.conf
Header append X-FRAME-OPTIONS "SAMEORIGIN"
satırını ekleyin.Dosyayı kaydedin.
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
ASP.NET Core
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin