Sembunyikan nomor versi perangkat lunak Nginx
Secara umum, kerentanan perangkat lunak terkait dengan versi. Oleh karena itu, perlu untuk menyembunyikan semua jenis informasi sensitif kepada pengguna yang berkunjung sebanyak mungkin, sehingga sulit bagi pengguna yang jahat untuk menebak apakah server yang digunakannya memiliki kerentanan tertentu, sehingga meningkatkan keamanan layanan Web.
Edit file konfigurasi nginx.conf dan tambahkan parameter:
http {
server_tokens mati | aktif;
}
server_tokens diaktifkan secara default dan dapat ditempatkan di http, server, lokasi.
Ubah pengguna default layanan Nginx
1. Ubah file konfigurasi nginx.conf secara langsung:
pengguna nginx;
2. Secara langsung menentukan pengguna dan grup yang dikompilasi saat menyusun perangkat lunak Nginx:
./configure --user = nginx --group-nginx
Optimalkan konfigurasi yang sesuai dengan proses Nginx
Ubah file konfigurasi nginx.conf:
pekerja_proses 4;
# Direkomendasikan untuk menyetel jumlah inti CPU, dan pertimbangkan menyetelnya ke jumlah inti dalam situasi konkurensi tinggi * 2
nginx
Parameter di atas menyesuaikan jumlah proses pekerja dari layanan Nginx. Nginx memiliki proses master dan proses pekerja. Master adalah proses manajemen, dan itu adalah proses pekerja yang benar-benar menangani pengguna.
cat / proc / cpuinfo | prosesor grep | wc -l # Lihat jumlah total inti CPU;
cat / proc / cpuinfo | grep "physical id" | sort | uniq | wc -l #Lihat jumlah CPU;
Anda juga dapat menggunakan perintah atas, tekan 1 untuk menampilkan semua inti CPU;
puncak
Optimalkan pengikatan proses Nginx yang berbeda ke CPU yang berbeda
Secara default, beberapa proses Nginx dapat berjalan pada CPU tertentu atau inti CPU tertentu, menyebabkan proses Nginx menggunakan sumber daya perangkat keras secara tidak merata. Oleh karena itu, tetapkan proses Nginx yang berbeda ke CPU yang berbeda sebanyak mungkin untuk mencapai tujuan sepenuhnya dan efektif menggunakan sumber daya multi-CPU dan multi-core perangkat keras.
Referensi konfigurasi CPU quad-core:
vi /etc/nginx/nginx.conf
pekerja_proses 4;
worker_cpu_affinity 0001001001001000; #CPU parameter afinitas
Pengoptimalan model pemrosesan peristiwa Nginx
Mekanisme pemrosesan koneksi Nginx akan menggunakan model I / O yang berbeda dalam sistem operasi yang berbeda.Di Linux, Nginx menggunakan model multiplexing I / O epoll, dan FreeBSD menggunakan model multiplexing I / O kqueue. , Model multiplexing I / O dari / dev / poll digunakan di solaris, dan icop digunakan di Windows.
Konfigurasi khusus:
acara {
use epoll; #use adalah perintah modul waktu yang digunakan untuk menentukan mode kerja Nginx. Untuk kernel Linux, mode kerja epoll direkomendasikan
}
#Untuk metode menggunakan proses koneksi, biasanya tidak diperlukan pengaturan, dan Nginx secara otomatis akan memilih metode yang paling efektif.
Sesuaikan jumlah maksimum koneksi klien yang diizinkan oleh satu proses Nginx
Parameter koneksi kontrol ini adalah worker_connections, dan nilainya harus ditentukan sesuai dengan kinerja server dan penggunaan memori program.
acara {
worker_connections 1024; #Tentukan jumlah maksimum koneksi untuk setiap proses, koneksi ini mencakup semua koneksi, seperti koneksi server proxy, koneksi klien, dan koneksi bersamaan aktual
}
#NginxTotal koneksi serentak == worker * worker_connections
Konfigurasikan jumlah maksimum file yang terbuka dalam proses Nginx Worker
acara {
worker_rlimit_nofile 65535; #Jumlah maksimum file yang terbuka dapat diatur sebagai hasil ulimit -HSn setelah pengoptimalan sistem
}
Aktifkan mode transfer file yang efisien
Parameter pengaturan: sendfile
sendfile () adalah salinan data antara fungsi dan dua deskriptor file. Salinan ini sebenarnya ada di kernel dan disebut salinan nol. sendfile () jauh lebih efisien daripada fungsi baca dan tulis, karena fungsi tulis dan baca perlu menyalin data ke lapisan aplikasi untuk operasi.
sendfile on | off
konteks: http, server, lokasi, jika di lokasi
Parameter pengaturan: tcp_nopush
Mengaktifkan atau menonaktifkan opsi soket TCP_CORK di Linux hanya akan berpengaruh saat sendfile diaktifkan. Dibolehkan untuk mempublikasikan respon http dan permulaan file dalam satu file. Efek positifnya adalah mengurangi jumlah segmen pesan jaringan.
tcp_nopush aktif;
konteks: http, server, lokasi
Optimalkan parameter koneksi Nginx dan sesuaikan batas waktu koneksi
Parameter batas waktu koneksi: Keepalive_timeout
Keep-hidup dapat membuat koneksi yang telah dibuat antara klien dan server bekerja secara konsisten tanpa keluar. Ketika server memiliki permintaan yang terus menerus, keep-hidup akan menggunakan koneksi yang sudah ada untuk menyediakan layanan, sehingga server tidak dapat diisi dengan permintaan koneksi baru.
keepalive_timeout 60;
konteks: http, server, lokasi
#Digunakan untuk menyetel periode waktu tunggu koneksi klien untuk menjaga sesi menjadi 60 detik. Setelah itu, server akan menutup tautan tersebut.
Peran batas waktu koneksi:
Tetapkan koneksi yang tidak berguna ke waktu tunggu sesegera mungkin untuk melindungi sumber daya sistem (CPU, memori, disk);
Ketika ada banyak koneksi, putuskan secara tepat waktu koneksi yang telah dibuat tetapi tidak melakukan apa-apa untuk waktu yang lama untuk mengurangi sumber daya server yang digunakan. Karena server memelihara koneksi juga menghabiskan sumber daya;
Peretas dan pengguna jahat yang menyerang situs web akan terus membuat banyak koneksi dengan server, menghabiskan jumlah koneksi tetapi tidak melakukan apa-apa, dan menghabiskan banyak sumber daya server. Pada saat ini, koneksi intensif sumber daya yang berbahaya ini harus diputus tepat waktu;
Dalam lingkungan LNMP, jika pengguna meminta layanan dinamis, Nginx akan membuat koneksi, meminta layanan FastCGI dan layanan MySQL back-end. Pada saat ini, koneksi Nginx harus menyetel periode waktu tunggu untuk mengembalikan data dalam waktu yang ditoleransi oleh pengguna, atau lagi Tunggu beberapa saat hingga layanan back-end mengembalikan data, dan menganalisis strategi spesifik sesuai dengan bisnis tertentu;
Layanan FastCGI dan layanan MySQL di bagian belakang juga memiliki kontrol batas waktu untuk koneksi tersebut.
Parameter pengaturan: tcp_nodelay
Secara default, saat data dikirim, kernel tidak akan segera mengirimkannya, dan mungkin menunggu lebih banyak byte untuk membentuk paket data, yang dapat meningkatkan kinerja I / O. Namun, dalam skenario bisnis di mana hanya beberapa byte yang dikirim setiap kali, menggunakan fungsi tcp_nodelay, waktu tunggu akan relatif lama.
tcp_nodelay on;
konteks: http, server, lokasi
Parameter pengaturan: client_header_timeout
Periode waktu tunggu untuk membaca data header permintaan klien. Jika melebihi waktu ini dan klien belum mengirim data header lengkap, server akan mengembalikan kesalahan "Permintaan waktu habis (408)".
client_header_timeout 20;
konteks: http, server
Parameter pengaturan: client_body_timeout
Baca periode waktu tunggu dari badan permintaan klien. Jika klien tidak mengirim data apa pun dalam periode waktu tunggu ini, Nginx akan mengembalikan kesalahan "Permintaan waktu habis (408)".
client_body_timeout 60;
konteks: http, server, lokasi
Parameter pengaturan: send_timeout
Tentukan periode waktu tunggu untuk menanggapi klien, yang merupakan waktu tunggu setelah jabat tangan. Jika tidak ada aktivitas di sisi klien setelah waktu ini, Nginx akan menutup koneksi.
send_timeout 60;
konteks: http, server, lokasi
Batas ukuran file unggahan (aplikasi dinamis)
Parameter: client_max_body_size
Setel ke 0 untuk melarang pemeriksaan ukuran tubuh permintaan klien
client_max_body_size 8m;
konteks: http, server, lokasi
Penyetelan parameter terkait FastCGI (bekerja sama dengan layanan dinamis mesin PHP)
Parameter FastCGI adalah parameter terkait yang bekerja sama dengan Nginx untuk meminta mundur layanan mesin dinamis PHP yang mengacu pada parameter konfigurasi di Nginx.
Parameter umum Nginx FastCGI:
Silakan merujuk ke Modul ngx_http_fastcgi_module (https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html)
fastcgi_pass #Setel alamat untuk server FastCGI;
fastcgi_index #Setel nama file yang akan ditambahkan setelah URI di akhir variabel $ fastcgi_scripts_name;
fastcgi_param #Setel parameter yang harus diteruskan ke server FastCGI. Jika dan hanya jika fastcgi_param tidak memiliki instruksi yang ditentukan pada level saat ini, instruksi ini akan diturunkan dari level sebelumnya;
fastcgi_next_upsteam #Specify dalam keadaan apa permintaan akan diteruskan ke server berikutnya;
fastcgi_connect_timeout # Mewakili periode batas waktu koneksi antara server Nginx dan server FastCGI backend, nilai defaultnya adalah 60 detik, parameter ini biasanya tidak boleh melebihi 75 detik;
fastcgi_send_timeout #Setel periode waktu tunggu untuk Nginx agar server FastCGI dapat mengembalikan data, yaitu, server backend harus mengirimkan semua data dalam waktu yang ditentukan. Jika tidak, Nginx akan memutuskan koneksi;
fastcgi_read_timeout #Setel waktu tunggu untuk Nginx membaca informasi tanggapan dari server FastCGI, yang berarti bahwa setelah sambungan berhasil dibuat, Nginx menunggu waktu tanggapan dari server backend, yaitu waktu Nginx memasuki antrian backend untuk diproses;
fastcgi_buffer_size #Ini adalah parameter ukuran buffer dari Nginx FastCGI. Ini menetapkan ukuran buffer yang digunakan untuk membaca bagian pertama dari informasi respons yang diterima dari server FastCGI. Bagian pertama di sini biasanya berisi header respons kecil;
fastcgi_buffers #Setel ukuran buffer dan jumlah buffer yang digunakan untuk membaca informasi respons yang diterima dari server FastCGI;
proxy_busy_buffers_size #Digunakan untuk menyetel ukuran proxy_buffers yang dapat digunakan saat sistem sangat sibuk, ukuran resmi yang disarankan adalah proxy_buffers * 2;
fastcgi_busy_buffers_size #Digunakan untuk menyetel ukuran fastcgi_buffers yang dapat digunakan saat sistem sangat sibuk, rekomendasi resminya adalah fastcgi_buffers * 2;
fastcgi_temp_file_write_size #FastCGI ukuran file sementara;
fastcgi_cache cachename_nginx # artinya membuka cache FastCGI dan menamainya;
fastcgi_cache_path #fastcgi_cache direktori cache;
fastcgi_cache_valid #Used untuk menentukan waktu cache dari kode respon;
fastcgi_cache_min_uses #Set respons untuk di-cache setelah beberapa permintaan;
fastcgi_cache_use_stale #Define dalam situasi apa menggunakan cache yang kadaluwarsa;
fastcgi_cache_key # tentukan kunci fastcgi_cache;
Jelaskan optimasi parameter FastCGI berdasarkan prinsip HTTP dan prinsip FastCGI
Konfigurasikan kompresi Nginx gzip untuk mencapai pengoptimalan kinerja
Modul kompresi Nginx gzip menyediakan fungsi untuk mengompresi konten file. Sebelum konten yang diminta oleh pengguna dikirim ke klien pengguna, server Nginx akan melakukan kompresi sesuai dengan beberapa strategi khusus untuk menghemat bandwidth outlet jaringan, mempercepat efisiensi transmisi data, dan meningkatkan pengalaman pengguna .
Keuntungan dari kompresi Nginx gzip:
Tingkatkan pengalaman pengguna situs web;
Menghemat biaya bandwidth situs web;
Objek terkompresi:
Rasio kompresi konten teks biasa sangat tinggi, seperti html, js, css, xml, dll .;
File teks biasa yang dikompresi harus lebih besar dari 1KB. Karena alasan khusus dari algoritma kompresi, file yang sangat kecil bisa menjadi lebih besar setelah kompresi;
Cobalah untuk tidak mengompresi gambar, media, dan file lainnya, karena sebagian besar file ini dikompresi, dan kompresi ulang kemungkinan besar tidak akan berkurang banyak, atau mungkin meningkat, dan juga menghabiskan sumber daya sistem;
Pengenalan parameter dan konfigurasi:
gzip on; #Fungsi kompresi
gzip_min_length 1K; #Jumlah minimum byte yang diizinkan untuk dikompresi
gzip_buffers 416K; # Terapkan untuk 4 unit memori 16K sebagai buffer aliran hasil kompresi
gzip_http_version 1.1; #http versi protokol
gzip_comp_level 5; # Tentukan rasio kompresi, 1 adalah rasio kompresi terkecil, kecepatan pemrosesan tercepat; 9 adalah rasio kompresi terbesar, kecepatan transmisi tercepat, dan pemrosesan paling lambat
gzip_types text / html text / css; #Tentukan jenis kompresi, lihat mime.types untuk jenis file yang sesuai
gzip_vary on; #vary header support
Lihat efek gzip:
Pengkodean Konten: gzip
Nginx kedaluwarsa cache
Expires period, fungsi Nginx expires adalah untuk mengatur waktu expired untuk konten website yang dikunjungi oleh pengguna.
Ketika pengguna mengunjungi konten ini untuk pertama kalinya, mereka akan disimpan secara lokal di browser pengguna, sehingga ketika pengguna terus mengunjungi situs web untuk kedua kalinya dan setelah itu, browser akan memeriksa untuk memuat konten yang telah di-cache secara lokal di browser pengguna. Tidak perlu mengunduh dari server hingga konten yang di-cache kedaluwarsa atau dihapus.
Keuntungan dari fungsi kedaluwarsa Nginx:
Kedaluwarsa dapat mengurangi bandwidth situs web dan menghemat biaya;
Mempercepat akses pengguna ke situs web dan meningkatkan pengalaman pengguna;
Permintaan server berkurang, tekanan server berkurang, dan biaya juga berkurang;
Nginx kedaluwarsa konfigurasi
1. Nilai menurut ekstensi file:
lokasi ~. * \. gif | jpg | jpeg | png | bmp | swf) $
{
expires 2y; #Ketika pengguna mengakses file dengan ekstensi di atas, waktu yang sesuai akan di-cache
}
lokasi ~. * \. (js | css)? $
{
kedaluwarsa 10d;
}
2. Menilai berdasarkan jalur (direktori) di URI:
lokasi ~ ^ / (gambar | statis | media) / {
kedaluwarsa 50d;
}
Pemeriksaan efek kedaluwarsa Nginx:
Kedaluwarsa: Waktu kedaluwarsa cache
Cache-Control: Total waktu cache
Nginx kedaluwarsa kekurangan fungsi dan solusinya:
Saat data situs web diperbarui, sisi pengguna mungkin masih melihat konten lama yang disimpan dalam cache.
Untuk file yang perlu sering diubah, waktu cache objek dapat dipersingkat, misalnya, gambar beranda Baidu diganti dengan gambar yang sesuai dengan festival menurut beberapa festival, jadi periode cache gambar ini disetel ke satu hari;
Saat situs web direvisi atau diperbarui, objek yang di-cache dapat diganti namanya di server;
Konten yang situs mungkin tidak ingin di-cache:
Gambar iklan, yang digunakan untuk layanan periklanan, disimpan dalam cache dan sulit untuk mengontrol tampilan;
Alat statistik lalu lintas situs web (kode js), statistik tidak akan akurat jika disimpan dalam cache;
Optimasi dan keamanan terkait log Nginx
Sekarang log Nginx telah disurvei secara otomatis.
Menulis skrip untuk mengimplementasikan polling log akses Nginx
Konfigurasikan skrip pemotongan log:
vim cut_nginx_log.sh
cd / path / log / nginx mv access.log access _ $ (tanggal +% F -d -1hari) .log
tar -czf access_xx.gz access.xx.log
nginx -s memuat ulang
crontab -e
0000 * * * / bin / sh /path/cut_nginx_log.sh
Jangan merekam log akses yang tidak perlu
Menulis log terlalu sering akan menghabiskan banyak disk I / O dan mengurangi kinerja layanan.
lokasi ~. * \. (js | jpg | css | png | gif) $ {
access_log off;
}
Akses izin log
Tidak perlu memberikan izin baca atau tulis kepada pengguna Nginx di direktori log. Banyak orang yang tidak memperhatikan masalah ini dan langsung memberikan izin kepada pengguna Nginx, yang menjadi risiko keamanan.
chown -R root: root / path / log / nginx
chmod -R 700 / jalur / log / nginx
Saya dulu berpikir bahwa itu harus nginx: nginx / path / log / nginx, tetapi hari ini saya melihat ini dan saya menguji metode di atas dan dapat menulis ke log. Cek nginx running, ternyata UID proses master nginx nya adalah root, ga heran ga heran!
root 683001 016:15? 00:00:00 nginx: proses master / usr / sbin / nginx -c /etc/nginx/nginx.conf
Direktori situs Nginx dan kontrol akses URL file
Batasi program atau akses file berdasarkan ekstensi
Gunakan konfigurasi Nginx untuk melarang akses ke file program PHP, Shell, Perl, Python di direktori sumber daya yang diunggah, sehingga pengguna tidak dapat mengeksekusi file kuda Troya bahkan jika mereka mengunggahnya, sehingga meningkatkan keamanan situs web.
Contoh 1. Konfigurasi Nginx untuk melarang analisis program yang ditentukan di direktori yang ditentukan:
lokasi ~ ^ / gambar /.* \. (php | py | sh | pl) $
{
menyangkal semua;
}
lokasi ~ ^ / statis /.* \. (php | py | pl | sh) $
{
menyangkal semua;
}
Batasan pada direktori di atas harus ditempatkan sebelum Nginx memproses konfigurasi layanan PHP:
#lokasi ~ \ .php $ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME / skrip $ fastcgi_script_name;
# sertakan fastcgi_params;
#}
Contoh 2, konfigurasi Nginx melarang akses ke file * .txt dan * .doc:
lokasi ~ * \. (txt | doc) $
{
if (-f $ request_filename) {
root / var / www;
#rewrite ... Anda juga dapat mengalihkan ke URL
istirahat;
}
}
lokasi ~ * \. (txt | doc) $
root / var / www;
menyangkal semua;
}
Larang akses ke semua file dan direktori di direktori yang ditentukan
Contoh 1: Konfigurasi untuk melarang akses ke satu atau beberapa direktori tertentu:
lokasi ~ ^ / (statis) / {
menyangkal semua;
}
lokasi ~ ^ / statis {
menyangkal semua;
}
Larang akses ke banyak direktori:
lokasi ~ ^ / (statis | js) {
menyangkal semua;
}
Contoh 2: Larang akses ke direktori dan kembalikan kode status HTTP yang ditentukan:
lokasi / admin / {
kembali 404;
}
lokasi / template / {
kembali 403;
}
Batasi akses IP sumber situs web
Contoh 1: Melarang direktori untuk diakses oleh dunia luar, tetapi mengizinkan IP tertentu untuk mengakses direktori, dan mendukung penguraian PHP:
lokasi ~ ^ / rahasia / {
memungkinkan 222.222.222.222;
menyangkal semua;
}
lokasi ~. * \. php $ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME / skrip $ fastcgi_script_name;
termasuk fastcgi_params;
}
Contoh 2: Batasi akses ke segmen IP atau IP tertentu:
lokasi / {
tolak 192.168.10.10;
izinkan 192.168.1.0/24;
izinkan 10.1.1.0/16;
menyangkal semua;
}
Ketika Nginx digunakan sebagai reverse proxy, IP klien dapat dibatasi
1. Gunakan jika untuk mengontrol:
jika ($ remote_addr = 10.0.0.7) {
kembali 403;
}
if ($ remote_addr = 11.11.11.11) {
setel $ allow_access_root'true ';
}
2. Gunakan tolak dan izinkan untuk hanya mengizinkan akses IP:
lokasi / {
root / var / www;
indeks index.php index.html;
memungkinkan 22.22.22.22;
menyangkal semua;
}
Metode 3, hanya menolak akses IP tertentu:
lokasi / {
root / var / www;
index index.html;
menyangkal 11.11.11.11;
perbolehkan semua;
}
catatan:
1. Tolak harus menambahkan IP, jika tidak maka akan langsung melompat ke 403, dan tidak mengeksekusi lebih lanjut.Jika halaman default 403 menggunakan nama domain yang sama, ini akan menyebabkan loop akses tanpa akhir;
2. Untuk segmen IP yang diizinkan, rangking dari kecil ke besar, misalnya, hanya setelah 127.0.0.0/24 adalah 10.10.0.0/16;
3. Akhiri dengan menyangkal semua, yang berarti bahwa segala sesuatu dilarang kecuali yang diizinkan di atas;
Konfigurasikan Nginx untuk melarang resolusi nama domain ilegal mengakses situs web
Bagaimana Nginx mencegah IP pengguna mengakses situs web atau resolusi nama domain berbahaya?
Metode 1: Izinkan pengguna yang menggunakan IP untuk mengakses situs web atau pengguna yang dengan sengaja menyelesaikan nama domain menerima kesalahan 501:
server {
dengarkan 80 default_server;
nama server _;
mengembalikan 501;
}
# Host virtual yang tidak tertulis dalam file konfigurasi akan ditransfer ke default_server.
Atau alihkan:
server {
dengarkan 80 default_server;
nama server _;
rewrite ^ (. *) permanen;
}
Ditemukan bahwa nama domain secara jahat diselesaikan ke IP server, cukup tambahkan kode berikut di bawah tag server:
if ($ host! ~ ^ www / \. zhang21 / \. com $) {
rewrite ^ (. *) permanentet;
}
Contoh default_server:
Gunakan default_server untuk mengarahkan semua permintaan dari situs web ke halaman pemeliharaan.
server {
dengarkan 80 default_server;
nama server _;
root / var / www;
lokasi / {
menulis ulang ^ (. *) /errot.html break;
}
vim /var/www/errot.html
< html >
< style type = "type / css" >
h1 {
text-align: center;
warna merah;
}
< /gaya >
< h1 > Situs sedang dalam perbaikan! < / h1 >
< / html >
Gambar Nginx dan katalog solusi anti-lintah
Apa itu hotlink sumber daya
Sederhananya, beberapa situs web ilegal secara ilegal memanggil sumber daya situs web lain dalam program situs web mereka sendiri tanpa izin, dan kemudian menampilkan sumber daya yang disebut ini di situs web mereka sendiri untuk mencapai efek mengisi situs web mereka sendiri.
Langkah ini tidak hanya menyia-nyiakan lalu lintas jaringan dari situs sumber daya panggilan, tetapi juga menyebabkan tekanan bandwidth dan layanan situs web lain menjadi ketat.
Sumber daya situs web diretas, menyebabkan masalah serius
Lalu lintas situs sumber CDN dari perusahaan tertentu tidak berubah, tetapi lalu lintas situs percepatan CDN telah melebihi banyak. Aliran abnormal yang begitu besar adalah uang!
Bagaimana cara menghadapinya?
1. Pantau dan alarm bandwidth IDC dan CDN;
2. Periksa lalu lintas situs web sesering mungkin, perhatikan perubahan lalu lintas, dan perhatikan lalu lintas yang tidak normal;
3. Analisis log akses untuk menemukan lalu lintas abnormal dengan cepat
Prinsip dasar larutan anti lintah yang umum
Menerapkan rantai anti-lintah berdasarkan perujuk HTTP
Dalam protokol HTTP, ada kolom header yang disebut referer, yang menggunakan format URL untuk menunjukkan di mana link menggunakan sumber daya halaman web saat ini.
Perujuk dapat mendeteksi halaman web sumber yang dikunjungi. Jika ini adalah file sumber daya, Anda dapat melacak alamat halaman web yang menampilkannya. Setelah terdeteksi bahwa ini bukan situs, maka akan segera diblokir.
Pengarah HTTP adalah bagian dari tajuk. Ketika browser mengirimkan permintaan ke server web, biasanya akan membawa pengarah. Server berkecepatan tinggi adalah dari halaman mana saya berasal, dan server memperoleh beberapa informasi untuk diproses.
Menurut cookie anti lintah
Ubah jalur akses melalui teknologi enkripsi untuk mencapai hotlink
Layanan web Nginx menyadari anti-lintah
Gunakan pengarah untuk melakukan penulisan ulang atau operasi lain pada ekstensi yang ditentukan
lokasi ~ * \. (.jpg | gif | png | wma | wmv | mp3 | zip | rar) {
valid_referers tidak ada yang diblokir * .zhang21.com zhang21.com;
if ($ invalid_referer) {
tulis ulang xxxx;
}
}
Pengaturan anti-lintah nama domain harus dilakukan sesuai dengan situasi sebenarnya!
Gunakan perujuk untuk memfilter direktori situs dan mengembalikan kode kesalahan
lokasi / gambar {
root / var / www;
valid_referers tidak ada yang diblokir * .zhang21.com zhang21.com;
if ($ invalid_referer) {
kembali 403;
}
}
Pengenalan NginxHttpAccessKeyModule untuk mewujudkan anti-leech
Jika ada file file.rar di direktori unduhan, URI yang sesuai adalah dan menjadi setelah menggunakan modul ngx_http_accesskey_module. com / download / file.rar? key = xxxxxxxxxxx. Hanya ketika nilai kunci diberikan dengan benar, file file.rar dalam direktori unduhan dapat diunduh, dan nilai kunci terkait dengan IP pengguna, untuk menghindari pencurian.
Solusi untuk hotlinking dalam desain produk
Anda dapat menambahkan watermark ke gambar, dll.
Periksa tautan yang dicuri dengan memeriksa variabel $ http_referer dalam format log Nginx. Periksa nilai variabel ini di file log yang sesuai untuk mengetahui informasi http_referer.
Tampilan halaman kesalahan Nginx yang elegan
Kode status HTTP umum dilewati di sini!
Mengapa mengonfigurasi tampilan halaman kesalahan yang elegan?
Kami dapat mengarahkan pesan kesalahan seperti 404 dan 403 ke beranda situs web atau halaman lain yang ditunjuk untuk meningkatkan pengalaman pengguna situs web!
Halaman elegan kode kesalahan kustom:
lokasi / {
xxxxxxx;
error_page 403 /403.html; #Ketika terjadi error 403, lompat ke halaman yang dioptimalkan
error_page 500503504 /50x.html;
location = /50x.html {
root /xxx/xxx/50x.html; #Tempatkan halaman 50x di direktori lokal terpisah untuk ditampilkan
}
error_page 404 = 200 /404200.jpg; #Ubah kode status dan tentukan konten tampilan
error_page 502 # pengalihan kode kesalahan;
}
Arahkan ulang kode status kesalahan ke lokasi:
lokasi / {
error_page 404 = @zhang;
}
lokasi @zhang {
proxy_pass
}
File direktori situs Nginx dan pengoptimalan izin direktori
Langkah-langkah kontrol yang ketat untuk izin direktori di lingkungan LNMP mesin tunggal
Untuk memastikan bahwa situs web tidak diserang oleh Trojan horse, pengguna dan grup direktori semua situs adalah root, semua izin direktori adalah 755, dan semua izin file adalah 644.
Meskipun izin semacam itu dapat mencegah peretas mengupload dan mengubah file situs, pengguna yang sah tidak memiliki izin upload.
Solusi yang lebih baik adalah dengan memisahkan layanan seperti file yang diunggah oleh pengguna sehingga otorisasi keamanan dapat dilakukan. Otoritas direktori tempat berbagai layanan berada bervariasi sesuai dengan fungsi bisnis!
Kontrol akses secara ketat ke direktori Nginx untuk mengurangi risiko gangguan situs web!
Pengoptimalan anti-crawler Nginx
Pengantar protokol robot robots.txt
Protokol robot (juga disebut protokol perayap, protokol robot), nama lengkapnya adalah "Protokol Pengecualian Robot" (Protokol Pengecualian Robot), situs web memberi tahu mesin telusur halaman mana yang dapat dirayapi melalui protokol Robot, dan laman itu tidak dapat dirayapi.
robots.txt (huruf kecil seragam) adalah file teks berenkode ASCII yang disimpan di direktori root situs web. Biasanya ini memberi tahu bot mesin telusur web (juga dikenal sebagai laba-laba web) konten mana di situs web ini yang tidak boleh dicari Manakah yang bisa didapatkan oleh robot mesin?
Protokol robots.txt bukanlah spesifikasi, tetapi konvensi, jadi tidak menjamin privasi situs web.
sintaks robots.txt
Agen pengguna:*
Mengizinkan:
Melarang:
Lihat robots.txt dari Jianshu:
www.jianshu.com/robots.txt
Konfigurasi pengoptimalan anti-crawler Nginx
Blokir proxy protokol unduhan:
if ($ http_user_agent ~ * LWP :: Sederhana | BBBike | wget) {
kembali 403;
}
Tes tersebut melarang akses perangkat lunak browser yang berbeda:
if ($ http_user_agent ~ * "Firefox | MSIE") {
rewrite ^ (. *) http: //www.baidu.com; #Jika browsernya Firefox atau IE, lompat
}
Gunakan Nginx untuk membatasi metode permintaan HTTP
Anda dapat menggunakan Nginx untuk membatasi permintaan HTTP untuk meningkatkan keamanan server.
Misalnya, konfigurasikan HTTP agar hanya menggunakan metode GET, HEAD, dan POST:
if ($ request_method! ~ ^ (DAPATKAN | KEPALA | POSTING) $ {
mengembalikan 501;
}
Anda juga dapat menambahkan lapisan lokasi untuk membatasi nama file secara lebih spesifik.
Gunakan CDN untuk mempercepat konten situs web
Apa itu CDN?
Nama lengkap CDN adalah Jaringan Pengiriman Konten, yang berarti jaringan pengiriman konten dalam bahasa Cina.
Sederhananya, dengan menambahkan arsitektur jaringan baru ke Internet yang ada, konten situs web dipublikasikan ke server Cache yang paling dekat dengan pengguna, dan teknologi penyeimbangan beban DNS yang cerdas digunakan untuk menentukan sumber pengguna, memungkinkan pengguna untuk menggunakan server terdekat. Akses server Cache dengan bandwidth baris yang sama untuk mendapatkan konten yang diperlukan.
Misalnya, pengguna Beijing Telecom mengakses konten di server Cache Telecom Beijing, dan pengguna Netcom Sichuan mengakses konten di server Cache Netcom Chengdu. Ini secara efektif dapat mengurangi waktu transmisi data di jaringan dan meningkatkan kecepatan akses.
CDN adalah sekumpulan cache cluster nasional atau global. Intinya adalah menilai wilayah sumber pengguna dan jalur Internet melalui DNS fungsional, dan memilih node server yang paling dekat dengan wilayah pengguna dan sama dengan jalur Internet pengguna. Karena lebih rendah dari yang terdekat, garisnya sama, sehingga dapat sangat meningkatkan pengalaman menjelajah pengguna.
Nilai CDN:
hemat;
Tingkatkan pengalaman pengguna situs web;
Dapat memblokir sebagian besar serangan lalu lintas, seperti DDOS;
Fitur CDN
CDN adalah cluster cache non-memori dengan penjadwalan cerdas berdasarkan area dan jalur pengguna. Fitur-fiturnya adalah sebagai berikut:
Data situs web di-cache melalui memori server, yang meningkatkan kecepatan akses situs perusahaan (terutama situs yang berisi banyak gambar, video, dll.), Dan sangat meningkatkan stabilitas situs perusahaan;
Pengguna secara otomatis memilih server Cache yang paling sesuai dengan teknologi DNS cerdas, mengurangi dampak kemacetan interkoneksi antara operator yang berbeda, menyadari percepatan jaringan lintas-operator, dan memastikan bahwa pengguna di jaringan yang berbeda dapat memperoleh kecepatan akses yang baik;
Mempercepat kecepatan akses dan mengurangi bandwidth situs asli;
Pengguna membaca data dari memori server saat mengakses, berbagi lalu lintas jaringan dan mengurangi tekanan beban dari situs asli;
Menggunakan CDN dapat berbagi lalu lintas jaringan dari situs asal, sekaligus mengurangi tekanan pemuatan situs asal, dan mengurangi dampak gangguan peretas dan berbagai serangan DDOS di situs web, serta memastikan bahwa situs web tersebut memiliki kualitas layanan yang lebih baik;
Persyaratan dasar untuk menggunakan CDN
Hal pertama yang harus dikatakan adalah bahwa tidak semua situs web dapat menggunakan CDN segera setelah diluncurkan. Data bisnis yang akan dipercepat harus memiliki nama domain yang independen. Misalnya, pub.zhang21.com, gambar konten bisnis, lampiran, JS, CSS, dan elemen statis lainnya, nama domain situs web statis tersebut dapat menggunakan CDN.
Jadikan nama domain CNAME (alias)
Alamat pub.zhang21.com harus merupakan nama domain perusahaan CDN yang dikonfigurasi sebelumnya oleh perusahaan CDN.
Optimasi arsitektur program Nginx
"Decoupling" adalah istilah yang populer di kalangan developer. Sederhananya, ini berarti memisahkan sekumpulan kode program sesuai dengan tujuan bisnis dan kemudian menyediakan layanan.
Misalnya, registrasi dan login, upload, download, browsing, informasi halaman produk, dll. Semuanya harus merupakan layanan program independen, tetapi semuanya hanya keseluruhan dari perspektif klien.
Cara terbaik untuk memisahkan adalah dengan menggunakan server terpisah. Anda dapat memilih untuk mengubah program atau mengkonfigurasinya di penyeimbang beban (seperti Nginx), memfilter permintaan, dan kemudian membuangnya ke server yang sesuai.
Misalnya, distribusikan sesuai ekstensi. Gambar yang diminta dilemparkan ke server gambar;
Menurut penerusan jalur URL, permintaan unduhan diserahkan ke server unduhan;
Permintaan pemrosesan PHP dinamis diserahkan ke prosesor dinamis;
Mereka yang tidak memenuhi persyaratan di atas akan diserahkan ke server default;
Mulai Nginx sebagai pengguna biasa
Mengapa membiarkan layanan Nginx menggunakan pengguna biasa?
Secara default, proses master Nginx menggunakan pengguna root, dan proses pengerjaan menggunakan pengguna normal yang ditentukan oleh Nginx.
Ada dua masalah terbesar dengan menggunakan pengguna root untuk menjalankan proses Nginx Master:
Kewenangan administratif harus mengakar, yang mempersulit prinsip meminimalkan kewenangan yang diberikan;
Gunakan root untuk menjalankan layanan Nginx, setelah situs web memiliki celah, pengguna dapat dengan mudah mendapatkan otoritas root dari server
Solusi untuk menurunkan layanan Nginx
Gunakan pengguna biasa untuk menjalankan layanan Nginx, atur akun biasa untuk pengembangan dan operasi dan pemeliharaan, selama grup yang sama dengan pengguna dapat mengelola Nginx, solusi ini memecahkan masalah manajemen Nginx, menempatkan root dengan otoritas yang terlalu banyak;
Pengembang dapat mengelola layanan dan program Nginx dan log di bawah situs menggunakan akun biasa;
Mengadopsi sistem tanggung jawab proyek, dan siapa pun yang menanganinya bertanggung jawab;
Turunkan Nginx
Mulai Nginx melalui Nginx -c untuk mengembangkan file konfigurasi
Nginx -c /home/user/nginx.conf
Letakkan di direktori home pengguna, lalu buat folder baru seperti www, logs, dan ubah izin grup.
error_log /home/user/logs/error.log;
pid /home/user/logs/nginx.pid;
access_log /home/user/logs/access.log;
Keunggulannya adalah sebagai berikut:
Turunkan hak ke layanan Nginx untuk membuat situs web lebih aman;
· Tetapkan izin situs oleh pengguna untuk membuat situs lebih independen (tidak perlu isolasi virtual);
Pengembangan tidak membutuhkan root untuk mengelola layanan dan situs sepenuhnya;
Sadarilah pembagian tanggung jawab;
Kontrol jumlah koneksi bersamaan di Nginx
Modul ngx_http_limit_conn_module digunakan untuk membatasi jumlah koneksi untuk setiap nilai Key yang ditentukan, terutama jumlah koneksi untuk satu IP.
Modul ngx_http_limit_conn_module digunakan untuk membatasi jumlah koneksi per kunci yang ditentukan, khususnya, jumlah koneksi dari satu alamat IP.
Tidak semua koneksi dihitung. Koneksi dihitung hanya jika permintaan diproses oleh server dan seluruh header permintaan telah dibaca.
Tidak semua koneksi akan dihitung. Koneksi yang memenuhi syarat adalah koneksi yang seluruh header permintaannya telah dibaca.
parameter limit_conn_zone :
zona kunci limit_conn_zone = nama: ukuran;
http
Parameter limit_conn: tentukan jumlah koneksi maksimum untuk kunci tersebut
nomor zona limit_conn;
http, server, lokasi
File konfigurasi:
http {
limit_conn_zone $ binary_remote_addr zona = addr: 10m;
...
server {
...
lokasi / unduh / {
limit_conn addr 1; #Batasi koneksi serentak dari satu IP ke 1
}
Kontrol kecepatan permintaan klien Nginx
Modul ngx_http_limit_req_module (0.7.21) digunakan untuk membatasi kecepatan pemrosesan permintaan per kunci yang ditentukan, khususnya, kecepatan pemrosesan permintaan yang berasal dari satu alamat IP. Pembatasan ini dilakukan dengan menggunakan metode "bucket bocor".
Digunakan untuk membatasi tingkat permintaan setiap IP untuk mengakses setiap Kunci yang ditentukan.
limit_req_zone zona kunci = nama: tingkat ukuran = tingkat;
http
limit_req zone = nama
http, server, lokasi
Sebagai contoh:
http {
limit_req_zone $ binary_remote_addr zona = satu: tingkat 10m = 1r / s;
...
server {
...
lokasi / pencarian / {
zona limit_req = satu ledakan = 5;
}
Fokus
Pengoptimalan keamanan: sembunyikan nama perangkat lunak Nginx dan nomor versi;
Optimalisasi performa plus keamanan: parameter batas waktu koneksi dan penyetelan parameter terkait FastCGI;
Optimalisasi kinerja: fungsi kompresi gzip adalah metode debugging dan tampilan;
Optimalisasi kinerja: kedaluwarsa fungsi cache dan metode tampilan debugging;
Optimasi keamanan: setiap strategi kontrol izin direktori situs layanan peran dalam cluster;
Optimasi keamanan: kontrol akses semua file dan direktori di bawah direktori situs;
Pengoptimalan performa plus keamanan: protokol robots.txt dan solusi pengoptimalan anti-rasa takut;
Optimalisasi performa plus keamanan: solusi anti-lintah sumber daya statis;
Optimasi pengalaman pengguna: metode tampilan halaman kesalahan yang elegan;
Optimasi keamanan: batasi metode permintaan http;
Optimalisasi performa plus keamanan: Pengetahuan akselerasi CDN;
Pengoptimalan keamanan: Pengguna biasa menjalankan strategi program Nginx;
Performa plus pengoptimalan keamanan: koneksi bersamaan Nginx dan kontrol laju permintaan;
Penulis: Zhang21
Tautan: https://www.jianshu.com/p/dc8a1f7eabaf
- Tidak bisa kurang dicetak di atasnya? ! Di mana Sepatu Satu-satunya NIKE Presto X di Dunia! Itu adalah sebuah pencapaian!
- Hari Jadi ke-5 Pendirian: Baca pencapaian penting Institut Penelitian Kecerdasan Buatan Facebook dalam satu artikel
- Trailer Rilis Pertama "Buckwheat Going Crazy" Ma Sichun, Zhong Chuxi, Huang Jingyu Menjadi Gila di Luar Negeri