Menghosting ASP.NET Core di Linux dengan Apache
Oleh Shayne Boyer
Dengan menggunakan panduan ini, pelajari cara menyiapkan Apache sebagai server proksi terbalik di CentOS 7 untuk mengalihkan lalu lintas HTTP ke aplikasi web ASP.NET Core yang berjalan di Kestrel server. Ekstensi mod_proxy dan modul terkait membuat proksi terbalik server.
Perhatian
Artikel ini mereferensikan CentOS, distribusi Linux yang mendekati status End Of Life (EOL). Harap pertimbangkan penggunaan dan rencanakan yang sesuai. Untuk informasi selengkapnya, lihat panduan Akhir Masa Pakai CentOS.
Prasyarat
- Server yang menjalankan CentOS 7 dengan akun pengguna standar dengan hak istimewa sudo.
- Instal runtime .NET Core di server.
- Aplikasi ASP.NET Core yang ada.
Kapan saja di masa mendatang setelah meningkatkan kerangka kerja bersama, mulai ulang aplikasi ASP.NET Core yang dihosting oleh server.
Menerbitkan dan menyalin melalui aplikasi
Konfigurasikan aplikasi untuk penyebaran yang bergantung pada kerangka kerja.
Jika aplikasi dijalankan secara lokal di lingkungan Pengembangan dan tidak dikonfigurasi oleh server untuk membuat koneksi HTTPS yang aman, adopsi salah satu pendekatan berikut:
Konfigurasikan aplikasi untuk menangani koneksi lokal yang aman. Untuk informasi selengkapnya, lihat bagian konfigurasi HTTPS.
Konfigurasikan aplikasi untuk dijalankan di titik akhir yang tidak aman:
Nonaktifkan Middleware Pengalihan HTTPS di lingkungan Pengembangan (
Program.cs
):if (!app.Environment.IsDevelopment()) { app.UseHttpsRedirection(); }
Untuk informasi lebih lanjut, lihat Menggunakan beberapa lingkungan di ASP.NET Core.
Hapus
https://localhost:5001
(jika ada) dariapplicationUrl
properti dalamProperties/launchSettings.json
file.
Untuk informasi selengkapnya tentang konfigurasi menurut lingkungan, lihat Menggunakan beberapa lingkungan di ASP.NET Core.
Jalankan penerbitan dotnet dari lingkungan pengembangan untuk mengemas aplikasi ke dalam direktori (misalnya, bin/Release/{TARGET FRAMEWORK MONIKER}/publish
, di mana {TARGET FRAMEWORK MONIKER}
tempat penampung adalah Target Framework Moniker (TFM)) yang dapat berjalan di server:
dotnet publish --configuration Release
Aplikasi ini juga dapat diterbitkan sebagai penyebaran mandiri jika Anda lebih suka tidak mempertahankan runtime .NET Core di server.
Salin aplikasi ASP.NET Core ke server menggunakan alat yang terintegrasi ke dalam alur kerja organisasi (misalnya, SCP, SFTP). Adalah umum untuk menemukan aplikasi web di bawah direktori var (misalnya, var/www/helloapp).
Catatan
Di bawah skenario penyebaran produksi, alur kerja integrasi berkelanjutan melakukan pekerjaan menerbitkan aplikasi dan menyalin aset ke server.
Mengonfigurasi server proksi
Proksi terbalik adalah penyiapan umum untuk melayani aplikasi web dinamis. Proksi terbalik mengakhiri permintaan HTTP dan meneruskannya ke aplikasi ASP.NET.
Server proksi meneruskan permintaan klien ke server lain alih-alih memenuhi permintaan itu sendiri. Proksi terbalik diteruskan ke tujuan tetap, biasanya atas nama klien arbitrer. Dalam panduan ini, Apache dikonfigurasi sebagai proksi terbalik yang berjalan di server yang sama yang Kestrel melayani aplikasi ASP.NET Core.
Karena permintaan diteruskan oleh proksi terbalik, gunakan Middleware Header yang Diteruskan dari paket Microsoft.AspNetCore.HttpOverrides . Middleware memperbarui Request.Scheme
, menggunakan X-Forwarded-Proto
header, sehingga URI pengalihan dan kebijakan keamanan lainnya berfungsi dengan benar.
Komponen apa pun yang bergantung pada skema, seperti autentikasi, pembuatan tautan, pengalihan, dan geolokasi, harus ditempatkan setelah memanggil Middleware Header yang Diteruskan.
Middleware Header yang Diteruskan harus dijalankan sebelum middleware lainnya. Urutan ini memastikan bahwa middleware yang mengandalkan informasi header yang diteruskan dapat menggunakan nilai header untuk pemrosesan. Untuk menjalankan Middleware Header yang Diteruskan setelah middleware diagnostik dan penanganan kesalahan, lihat Urutan Middleware Header yang Diteruskan.
Panggil UseForwardedHeaders metode di bagian Startup.Configure
atas sebelum memanggil middleware lainnya. Konfigurasikan middleware untuk meneruskan X-Forwarded-For
header dan X-Forwarded-Proto
.
Microsoft.AspNetCore.HttpOverrides Tambahkan namespace layanan ke bagian atas file:
using Microsoft.AspNetCore.HttpOverrides;
Dalam alur pemrosesan aplikasi:
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
app.UseAuthentication();
Jika tidak ForwardedHeadersOptions ditentukan ke middleware, header default yang akan diteruskan adalah None
.
Proksi yang berjalan pada alamat loopback (127.0.0.0/8, [::1]
), termasuk alamat localhost standar (127.0.0.1), dipercaya secara default. Jika proksi atau jaringan tepercaya lainnya dalam organisasi menangani permintaan antara Internet dan server web, tambahkan ke daftar KnownProxies atau KnownNetworks dengan ForwardedHeadersOptions. Contoh berikut menambahkan server proksi tepercaya di alamat IP 10.0.0.100 ke Middleware KnownProxies
Header yang Diteruskan di Startup.ConfigureServices
:
System.Net Tambahkan namespace layanan ke bagian atas file:
using System.Net;
Gunakan pendaftaran layanan berikut:
services.Configure<ForwardedHeadersOptions>(options =>
{
options.KnownProxies.Add(IPAddress.Parse("10.0.0.100"));
});
Untuk informasi selengkapnya, lihat Mengonfigurasi ASP.NET Core untuk bekerja dengan server proxy dan memuat penyeimbang.
Menginstal Apache
Perbarui paket CentOS ke versi stabil terbarunya:
sudo yum update -y
Instal server web Apache di CentOS dengan satu yum
perintah:
sudo yum -y install httpd mod_ssl
Contoh output setelah menjalankan perintah:
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!
Catatan
Dalam contoh ini, output mencerminkan httpd.86_64 karena versi CentOS 7 adalah 64 bit. Untuk memverifikasi di mana Apache diinstal, jalankan whereis httpd
dari prompt perintah.
Mengonfigurasi Apache
File konfigurasi untuk Apache terletak di /etc/httpd/conf.d/
dalam direktori. Di Apache di Ubuntu, semua file konfigurasi host virtual disimpan di /etc/apache2/sites-available
. File apa pun dengan ekstensi .conf diproses dalam urutan alfabet selain file konfigurasi modul di /etc/httpd/conf.modules.d/
, yang berisi file konfigurasi apa pun yang diperlukan untuk memuat modul.
Buat file konfigurasi, bernama helloapp.conf, untuk aplikasi:
<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>
Catatan: Versi Apache sebelum 2.4.6 tidak memerlukan RequestHeader set
berisi trailing s
:
<VirtualHost *:*>
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
</VirtualHost>
Untuk informasi selengkapnya, lihat %{VARNAME}s
di mod_headers Modul Apache.
VirtualHost
Blok dapat muncul beberapa kali, dalam satu atau beberapa file di server. Dalam file konfigurasi sebelumnya, Apache menerima lalu lintas publik pada port 80. www.example.com
Domain sedang dilayani, dan *.example.com
alias diselesaikan ke situs web yang sama. Untuk informasi selengkapnya, lihat Dukungan host virtual berbasis nama. Permintaan diproksi pada root ke port 5000 server di 127.0.0.1. Untuk komunikasi dua arah, ProxyPass
dan ProxyPassReverse
diperlukan. Untuk mengubah KestrelIP/port, lihat Kestrel: Konfigurasi titik akhir.
VirtualHost
Blok dapat muncul beberapa kali, dalam satu atau beberapa file di server. Dalam file konfigurasi sebelumnya, Apache menerima lalu lintas publik pada port 80. www.example.com
Domain sedang dilayani, dan *.example.com
alias diselesaikan ke situs web yang sama. Untuk informasi selengkapnya, lihat Dukungan host virtual berbasis nama. Permintaan diproksi pada root ke port 5000 server di 127.0.0.1. Untuk komunikasi dua arah, ProxyPass
dan ProxyPassReverse
diperlukan. Untuk mengubah KestrelIP/port, lihat Kestrel: Konfigurasi titik akhir.
Buat tautan simbolis ke /etc/apache2/sites-enabled
direktori untuk dibaca Apache selama startup:
sudo ln -s /etc/apache2/sites-available/helloapp.conf /etc/apache2/sites-enabled/
Peringatan
Kegagalan untuk menentukan arahan ServerName yang tepat di blok VirtualHost mengekspos aplikasi Anda terhadap kerentanan keamanan. Pengikatan wildcard subdomain (misalnya, *.example.com
) tidak menimbulkan risiko keamanan ini jika Anda mengontrol seluruh domain induk ( *.com
dibandingkan dengan , yang rentan). Untuk informasi selengkapnya, lihat RFC 9110: Semantik HTTP (Bagian 7.2: Host dan :authority).
Pengelogan dapat dikonfigurasi per VirtualHost
penggunaan ErrorLog
dan CustomLog
arahan. ErrorLog
adalah lokasi di mana server mencatat kesalahan, dan CustomLog
mengatur nama file dan format file log. Dalam hal ini, di sinilah informasi permintaan dicatat. Ada satu baris untuk setiap permintaan.
Simpan file dan uji konfigurasi. Jika semuanya berlalu, responsnya harus Syntax [OK]
.
sudo apachectl configtest
Mulai ulang Apache:
sudo systemctl restart httpd
sudo systemctl enable httpd
Untuk informasi selengkapnya tentang nilai direktif header, lihat Modul Apache mod_headers.
Memantau aplikasi
Apache sekarang disiapkan untuk meneruskan permintaan yang dibuat ke http://localhost:80
aplikasi ASP.NET Core yang berjalan di Kestrelhttp://127.0.0.1:5000
. Namun, Apache tidak disiapkan untuk mengelola proses.Kestrel Gunakan systemd dan buat file layanan untuk memulai dan memantau aplikasi web yang mendasar. systemd adalah sistem init yang menyediakan banyak fitur canggih untuk memulai, menghentikan, dan mengelola proses.
Membuat file layanan
Buat file definisi layanan:
sudo nano /etc/systemd/system/kestrel-helloapp.service
Contoh file layanan untuk aplikasi:
[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
Catatan: Atur local/bin
folder untuk distribusi Anda. Beberapa versi Ubuntu memerlukan ExecStart=/usr/bin/dotnet
Dalam contoh sebelumnya, pengguna yang mengelola layanan ditentukan oleh User
opsi . Pengguna (apache
) harus ada dan memiliki kepemilikan file aplikasi yang tepat.
Gunakan TimeoutStopSec
untuk mengonfigurasi durasi waktu untuk menunggu aplikasi dimatikan setelah menerima sinyal interupsi awal. Jika aplikasi tidak dimatikan dalam periode ini, SIGKILL dikeluarkan untuk mengakhiri aplikasi. Berikan nilai sebagai detik tanpa unit (misalnya, 150
), nilai rentang waktu (misalnya, 2min 30s
), atau infinity
untuk menonaktifkan batas waktu. TimeoutStopSec
default ke nilai DefaultTimeoutStopSec
dalam file konfigurasi manajer (systemd-system.conf, system.conf.d, systemd-user.conf, user.conf.d). Batas waktu default untuk sebagian besar distribusi adalah 90 detik.
# The default value is 90 seconds for most distributions.
TimeoutStopSec=90
Beberapa nilai (misalnya, string koneksi SQL) harus diloloskan agar penyedia konfigurasi membaca variabel lingkungan. Gunakan perintah berikut untuk menghasilkan nilai yang lolos dengan benar untuk digunakan dalam file konfigurasi:
systemd-escape "<value-to-escape>"
Pemisah titik dua (:
) tidak didukung dalam nama variabel lingkungan. Gunakan garis bawah ganda (__
) sebagai pengganti titik dua. Penyedia konfigurasi Variabel Lingkungan mengonversi garis bawah ganda menjadi titik dua saat variabel lingkungan dibaca ke dalam konfigurasi. Dalam contoh berikut, kunci ConnectionStrings:DefaultConnection
string koneksi diatur ke dalam file definisi layanan sebagai ConnectionStrings__DefaultConnection
:
Pemisah titik dua (:
) tidak didukung dalam nama variabel lingkungan. Gunakan garis bawah ganda (__
) sebagai pengganti titik dua. Penyedia konfigurasi Variabel Lingkungan mengonversi garis bawah ganda menjadi titik dua saat variabel lingkungan dibaca ke dalam konfigurasi. Dalam contoh berikut, kunci ConnectionStrings:DefaultConnection
string koneksi diatur ke dalam file definisi layanan sebagai ConnectionStrings__DefaultConnection
:
Environment=ConnectionStrings__DefaultConnection={Connection String}
Simpan file dan aktifkan layanan:
sudo systemctl enable kestrel-helloapp.service
Mulai layanan dan verifikasi bahwa layanan sedang berjalan:
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
Dengan proksi terbalik yang dikonfigurasi dan Kestrel dikelola melalui systemd, aplikasi web sepenuhnya dikonfigurasi dan dapat diakses dari browser di komputer lokal di http://localhost
. Memeriksa header respons, header Server menunjukkan bahwa aplikasi ASP.NET Core dilayani oleh 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
Menampilkan log
Karena aplikasi web yang digunakan Kestrel dikelola menggunakan systemd, peristiwa dan proses dicatat ke jurnal terpusat. Namun, jurnal ini mencakup entri untuk semua layanan dan proses yang dikelola oleh systemd. Untuk melihat kestrel-helloapp.service
item -spesifik, gunakan perintah berikut:
sudo journalctl -fu kestrel-helloapp.service
Untuk pemfilteran waktu, tentukan opsi waktu dengan perintah . Misalnya, gunakan --since today
untuk memfilter hari ini atau --until 1 hour ago
untuk melihat entri jam sebelumnya. Untuk informasi selengkapnya, lihat halaman pria untuk journalctl.
sudo journalctl -fu kestrel-helloapp.service --since "2016-10-18" --until "2016-10-18 04:00"
Perlindungan data
Tumpukan ASP.NET Core Data Protection digunakan oleh beberapa middleware ASP.NET Core, termasuk middleware autentikasi (misalnya, cookie middleware) dan perlindungan pemalsuan permintaan lintas situs (CSRF). Bahkan jika API Perlindungan Data tidak dipanggil oleh kode pengguna, perlindungan data harus dikonfigurasi untuk membuat penyimpanan kunci kriptografi persisten. Jika perlindungan data tidak dikonfigurasi, kunci disimpan di memori dan dibuang saat aplikasi dimulai ulang.
Jika ring kunci disimpan dalam memori saat aplikasi dimulai ulang:
- Semua token autentikasi berbasis cookie menjadi tidak valid.
- Pengguna diminta untuk masuk lagi pada permintaan berikutnya.
- Data apa pun yang dilindungi dengan ring kunci tidak dapat lagi didekripsi. Ini mungkin termasuk token CSRF dan cookie ASP.NET Core MVC TempData.
Untuk mengonfigurasi perlindungan data untuk mempertahankan dan mengenkripsi cincin kunci, lihat:
- Penyedia penyimpanan utama di ASP.NET Core
- Enkripsi kunci tidak aktif di Windows dan Azure menggunakan ASP.NET Core
Mengamankan aplikasi
Mengonfigurasi firewall
Firewalld adalah daemon dinamis untuk mengelola firewall dengan dukungan untuk zona jaringan. Port dan pemfilteran paket masih dapat dikelola oleh iptable. Firewalld harus diinstal secara default. yum
dapat digunakan untuk menginstal paket atau memverifikasi paket diinstal.
sudo yum install firewalld -y
Gunakan firewalld
untuk membuka hanya port yang diperlukan untuk aplikasi. Dalam hal ini, port 80 dan 443 digunakan. Perintah berikut secara permanen mengatur port 80 dan 443 untuk dibuka:
sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --add-port=443/tcp --permanent
Muat ulang pengaturan firewall. Periksa layanan dan port yang tersedia di zona default. Opsi tersedia dengan memeriksa 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:
Konfigurasi HTTPS
Mengonfigurasi aplikasi untuk koneksi lokal aman (HTTPS)
Konfigurasikan aplikasi untuk menggunakan sertifikat dalam pengembangan untuk dotnet run
perintah atau lingkungan pengembangan (F5 atau Ctrl+F5 di Visual Studio Code) menggunakan salah satu pendekatan berikut:
Mengonfigurasi proksi terbalik untuk koneksi klien aman (HTTPS)
Peringatan
Konfigurasi keamanan di bagian ini adalah konfigurasi umum yang akan digunakan sebagai titik awal untuk penyesuaian lebih lanjut. Kami tidak dapat memberikan dukungan untuk alat, server, dan sistem operasi pihak ketiga. Gunakan konfigurasi di bagian ini dengan risiko Anda sendiri. Untuk informasi selengkapnya, akses sumber daya berikut:
- Enkripsi Apache SSL/TLS (dokumentasi Apache)
- Generator Konfigurasi SSL mozilla.org
Untuk mengonfigurasi Apache untuk HTTPS, modul mod_ssl digunakan. Ketika modul httpd diinstal, modul mod_ssl juga diinstal. Jika tidak diinstal, gunakan yum
untuk menambahkannya ke konfigurasi.
sudo yum install mod_ssl
Untuk menerapkan HTTPS, instal mod_rewrite
modul untuk mengaktifkan penulisan ulang URL:
sudo yum install mod_rewrite
Ubah file helloapp.conf untuk mengaktifkan komunikasi aman pada port 443.
Contoh berikut tidak mengonfigurasi server untuk mengalihkan permintaan yang tidak aman. Sebaiknya gunakan Middleware Pengalihan HTTPS. Untuk informasi selengkapnya, lihat Menerapkan HTTPS di ASP.NET Core.
Catatan
Untuk lingkungan pengembangan di mana konfigurasi server menangani pengalihan aman alih-alih Middleware Pengalihan HTTPS, sebaiknya gunakan pengalihan sementara (302) daripada pengalihan permanen (301). Penembolokan tautan dapat menyebabkan perilaku yang tidak stabil di lingkungan pengembangan.
Strict-Transport-Security
Menambahkan header (HSTS) memastikan semua permintaan berikutnya yang dibuat oleh klien melalui HTTPS. Untuk panduan tentang mengatur Strict-Transport-Security
header, lihat Menerapkan HTTPS di 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>
Catatan
Contoh ini menggunakan sertifikat yang dihasilkan secara lokal. SSLCertificateFile harus menjadi file sertifikat utama untuk nama domain. SSLCertificateKeyFile harus menjadi file kunci yang dihasilkan saat CSR dibuat. SSLCertificateChainFile harus menjadi file sertifikat perantara (jika ada) yang disediakan oleh otoritas sertifikat.
Apache HTTP Server versi 2.4.43 atau yang lebih baru diperlukan untuk mengoperasikan server web TLS 1.3 dengan OpenSSL 1.1.1.
Catatan
Contoh sebelumnya menonaktifkan Stapling Protokol Status Sertifikat Online (OCSP). Untuk informasi dan panduan selengkapnya tentang mengaktifkan OCSP, lihat OCSP Stapling (dokumentasi Apache).
Simpan file dan uji konfigurasi:
sudo service httpd configtest
Mulai ulang Apache:
sudo systemctl restart httpd
Saran Apache tambahan
Memulai ulang aplikasi dengan pembaruan kerangka kerja bersama
Setelah meningkatkan kerangka kerja bersama di server, mulai ulang aplikasi ASP.NET Core yang dihosting oleh server.
Header tambahan
Untuk mengamankan dari serangan berbahaya, ada beberapa header yang harus dimodifikasi atau ditambahkan. Pastikan modul mod_headers
diinstal:
sudo yum install mod_headers
Amankan Apache dari serangan clickjacking
Clickjacking, juga dikenal sebagai serangan redress UI, adalah serangan berbahaya di mana pengunjung situs web ditipu untuk mengklik tautan atau tombol di halaman yang berbeda dari yang saat ini mereka kunjungi. Gunakan X-FRAME-OPTIONS
untuk mengamankan situs.
Untuk mengurangi serangan pembajakan klik:
Edit file httpd.conf:
sudo nano /etc/httpd/conf/httpd.conf
Tambahkan baris
Header append X-FRAME-OPTIONS "SAMEORIGIN"
.Simpan file.
Mulai ulang Apache.
Sniffing jenis MIME
Header X-Content-Type-Options
mencegah Internet Explorer dari MIME-sniffing (menentukan file Content-Type
dari konten file). Jika server mengatur Content-Type
header ke text/html
dengan nosniff
set opsi, Internet Explorer merender konten sebagai text/html
terlepas dari konten file.
Edit file httpd.conf:
sudo nano /etc/httpd/conf/httpd.conf
Tambahkan baris Header set X-Content-Type-Options "nosniff"
. Simpan file. Mulai ulang Apache.
Penyeimbangan Beban
Contoh ini menunjukkan cara menyiapkan dan mengonfigurasi Apache di CentOS 7 dan Kestrel pada komputer instans yang sama. Untuk tidak memiliki satu titik kegagalan; menggunakan mod_proxy_balancer dan memodifikasi VirtualHost akan memungkinkan untuk mengelola beberapa instans aplikasi web di belakang server proksi Apache.
sudo yum install mod_proxy_balancer
Dalam file konfigurasi yang ditunjukkan di bawah ini, instans tambahan disiapkan helloapp
untuk berjalan pada port 5001. Bagian Proksi diatur dengan konfigurasi penyeimbang dengan dua anggota untuk memuat byrequest keseimbangan.
<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>
Batas Tarif
Menggunakan mod_ratelimit, yang termasuk dalam modul httpd , bandwidth klien dapat dibatasi:
sudo nano /etc/httpd/conf.d/ratelimit.conf
Contoh file membatasi bandwidth sebagai 600 KB/detik di bawah lokasi akar:
<IfModule mod_ratelimit.c>
<Location />
SetOutputFilter RATE_LIMIT
SetEnv rate-limit 600
</Location>
</IfModule>
Bidang header permintaan panjang
Pengaturan default server proksi biasanya membatasi bidang header permintaan menjadi 8.190 byte. Aplikasi mungkin memerlukan bidang yang lebih panjang dari default (misalnya, aplikasi yang menggunakan ID Microsoft Entra). Jika bidang yang lebih panjang diperlukan, direktif LimitRequestFieldSize server proksi memerlukan penyesuaian. Nilai yang akan diterapkan tergantung pada skenario. Untuk informasi selengkapnya, lihat dokumentasi server Anda.
Peringatan
Jangan tingkatkan nilai LimitRequestFieldSize
default kecuali diperlukan. Meningkatkan nilai meningkatkan risiko serangan buffer overrun (overflow) dan Denial of Service (DoS) oleh pengguna berbahaya.
Sumber Daya Tambahan:
ASP.NET Core
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk