mata utama
httpd (hanya bermakna proses http ) dan dipasangkan dalam taburan Linux utama.
Ia pada asalnya diterbitkan pada tahun 1995 dan memetik Wikipedia sebagai berkata, "Ia memainkan peranan penting dalam perkembangan awal World Wide Web." Menurut W3Techs, ia masih merupakan perisian pelayan web yang paling biasa digunakan. Walau bagaimanapun, bahagian pasarannya merosot berdasarkan laporan yang menunjukkan beberapa trend sepanjang dekad yang lalu dan perbandingan dengan penyelesaian lain. Netcraft dan Builtwith menyediakan laporan yang sedikit berbeza, tetapi kedua -duanya bersetuju bahawa bahagian pasaran Apache berada pada trend menurun, sementara bahagian pasaran Nginx berkembang.nginx (disebut
enjin x
Apache telah lama wujud dan mempunyai banyak modul untuk dipilih. Pengurusan pelayan Apache diketahui mesra pengguna. Pemuatan modul dinamik membolehkan modul yang berbeza untuk disusun dan ditambah ke timbunan Apache tanpa mengulang semula binari pelayan utama. Biasanya, modul akan berada di repositori pengedaran Linux, dan selepas ia dipasang, mereka boleh ditambah ke timbunan dengan anggun menggunakan arahan seperti A2Enmod melalui Pengurus Pakej Sistem. Nginx belum melihat fleksibiliti ini lagi. Apabila kita melihat panduan untuk menubuhkan Nginx untuk menyokong HTTP/2, modulnya adalah apa yang perlu dibina oleh Nginx - dikonfigurasi pada masa membina.
Satu lagi ciri yang menyumbang kepada dominasi pasaran Apache ialah fail .htaccess. Ia adalah pembunuh Apache, menjadikannya penyelesaian pilihan untuk persekitaran hosting yang dikongsi, kerana ia membolehkan kawalan konfigurasi pelayan di peringkat direktori. Setiap direktori pada pelayan yang disediakan oleh Apache boleh mempunyai fail .htaccess sendiri.
nginx bukan sahaja tidak mempunyai penyelesaian yang setara, tetapi juga menghalang penggunaan ini disebabkan oleh kesan prestasi.
Saham Pasaran Pengilang Pelayan dari tahun 1995 hingga 2005. Data dari Netcraft
Litespeed atau LSWS adalah pesaing pelayan yang tahap fleksibiliti setanding dengan Apache tanpa mengorbankan prestasi. Ia menyokong gaya Apache .htaccess, mod_security, dan mod_rewrite, dan patut dipertimbangkan untuk berkongsi tetapan. Ia dirancang sebagai pengganti langsung untuk Apache dan boleh digunakan dengan cPanel dan Plesk. Ia telah menyokong HTTP/2 sejak 2015.Litespeed mempunyai tiga tahap lesen: OpenLitespeed, LSWS Standard, dan LSWS Enterprise. Standard dan Enterprise datang dengan penyelesaian caching pilihan yang menyaingi varnis, lscache, yang dibina ke dalam pelayan itu sendiri dan boleh dikawal menggunakan peraturan menulis semula dalam fail .htaccess (setiap direktori). Ia juga mempunyai beberapa "bateri" pengurangan DDOS yang dibina. Ini digabungkan dengan seni bina yang didorong oleh peristiwa menjadikannya pesaing yang kuat, mensasarkan penyedia hosting yang berfokus pada prestasi, tetapi ia patut ditubuhkan walaupun untuk pelayan atau laman web yang lebih kecil.
Langkah berjaga -jaga perkakasan
Memiliki pemahaman yang lebih mendalam tentang aspek perkakasan penalaan prestasi, Dropbox mempunyai artikel yang baik.
pemantauan
Monit adalah satu lagi alat sumber terbuka tanpa kepala yang memantau sistem dan boleh dikonfigurasikan untuk memberi amaran kepada kami apabila syarat -syarat tertentu dipenuhi, atau memulakan semula proses tertentu, atau memulakan semula sistem.
Sistem ujian
maka kita hanya memulakannya dari baris arahan:
<code>from locust import HttpLocust, TaskSet, task class UserBehavior(TaskSet): @task(1) def index(self): self.client.get("/") @task(2) def shop(self): self.client.get("/?page_id=5") @task(3) def page(self): self.client.get("/?page_id=2") class WebsiteUser(HttpLocust): task_set = UserBehavior min_wait = 300 max_wait = 3000 </code>
Laraskan Apache
<code>locust --host=https://my-website.com </code>
Modul MPM Apache
Model ini dipanggil mpm_prefork_module dalam sistem MPM (modul multi-proses) Apache. Menurut laman web Apache, mod ini memerlukan sedikit konfigurasi, kerana ia dapat mengawal selia, dan yang paling penting, Arahan MaxRequestworkers cukup besar untuk mengendalikan seberapa banyak permintaan serentak seperti yang anda harapkan untuk menerima, tetapi cukup kecil untuk memastikan Semua proses mempunyai RAM fizikal yang cukup
.
Ujian beban belalang kecil yang menunjukkan sejumlah besar proses Apache yang dihasilkan untuk mengendalikan trafik masuk.
kita boleh menambah bahawa corak ini mungkin menjadi sebab utama reputasi terkenal Apache. Ia boleh menjadi sumber yang tidak cekap.
Versi 2.0 Apache membawa dua MPM lain yang cuba menyelesaikan masalah mod Prefork . Mereka adalah modul pekerja atau mpm_worker_module dan modul acara .
Modul pekerja tidak lagi berasaskan proses; Petikan laman web Apache:
Proses kawalan tunggal (proses induk) bertanggungjawab untuk memulakan proses kanak -kanak. Setiap proses kanak -kanak mencipta bilangan benang pelayan tetap berdasarkan nombor yang ditentukan dalam Arahan Threadsperchild, dan benang mendengar yang mendengar sambungan dan lulusnya ke benang pelayan untuk diproses apabila sambungan tiba.
Mod ini menjimatkan lebih banyak sumber.
versi Apache 2.4 membawa kita MPM ketiga - modul acara. Ia berdasarkan kepada MPM pekerja dan menambah benang mendengar berasingan yang menguruskan sambungan Keepalive yang mengantuk selepas permintaan HTTP selesai. Ia adalah mod tak segerak yang tidak menyekat dengan jejak memori yang lebih kecil. Maklumat lanjut mengenai peningkatan versi 2.4 di sini.
Kami memuatkan pemasang wooCommerce ujian dengan kira -kira 1200 catatan pada pelayan maya dan mengujinya pada Apache 2.4 dengan mod prefork lalai dan mod_php.
Pertama, kami mengujinya menggunakan libapache2-mod-php7 dan mmpm_prefork_module pada https://tools.pingdom.com:
kita perlu menambah multiverse ke /etc/apt/sources.list kami:
<code>from locust import HttpLocust, TaskSet, task class UserBehavior(TaskSet): @task(1) def index(self): self.client.get("/") @task(2) def shop(self): self.client.get("/?page_id=5") @task(3) def page(self): self.client.get("/?page_id=2") class WebsiteUser(HttpLocust): task_set = UserBehavior min_wait = 300 max_wait = 3000 </code>
<code>locust --host=https://my-website.com </code>
<code>deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse deb http://archive.canonical.com/ubuntu xenial partner</code>
<code>sudo apt-get install libapache2-mod-fastcgi php7.0-fpm </code>
<code>sudo service start php7.0-fpm </code>
maka kami menyesuaikan konfigurasi mpm_event di /etc/apache2/mods-available/mpm_event.conf, ingat bahawa sumber Mini VPS yang kami miliki untuk ujian ini terhad - jadi kami hanya mengurangkan beberapa nombor lalai. Butiran setiap arahan di laman web Apache, dan petua untuk MPM acara di sini. Ingatlah bahawa pelayan permulaan
akan memakan memori tertentu, tidak kira betapa sibuknya mereka. Arahan MaxRequestworkers menetapkan bilangan permintaan serentak yang dibenarkan: Menetapkan MaxConnectionSperchild ke nilai bukan sifar adalah penting kerana ia menghalang kebocoran memori yang mungkin. Kemudian kami menggunakan perkhidmatan sudo apache2 mulakan semula untuk memulakan semula pelayan (jika kita menukar beberapa arahan, seperti Threadlimit, kita perlu berhenti secara eksplisit dan memulakan perkhidmatan, menggunakan perkhidmatan sudo apache2 berhenti; Sudo Service Apache2 Start). Ujian kami di Pingdom kini menunjukkan bahawa masa pemuatan halaman telah dikurangkan dengan lebih daripada separuh:
dalam fail konfigurasi pelayan utama.
nginx adalah pelayan web yang didorong oleh peristiwa dan tidak menyekat. Petikan poster pada berita penggodam:
nginx mengesyorkan menetapkan bilangan pekerja kepada bilangan teras PC (seperti yang kita lakukan dengan konfigurasi mpm_event Apache), dengan menetapkan pekerja_processes ke auto di /etc/nginx/nginx.conf (lalai adalah 1). worker_connections Menetapkan bilangan sambungan yang dapat dikendalikan oleh setiap proses pekerja. Lalai adalah 512, tetapi biasanya boleh ditingkatkan. Sambungan Keepalive adalah aspek pelayan yang mempengaruhi prestasi, yang biasanya tidak dapat dilihat dalam tanda aras.
https penyulitan. Protokol HTTP/2 mengurangkan ini dengan keupayaan multiplexingnya. Menggunakan semula sambungan yang ada dapat mengurangkan masa permintaan.
Petua ini mengenai soket Unix juga berfungsi untuk Apache. Maklumat lanjut ada di sini. gzip_static: Pandangan umum pada prestasi pelayan web adalah untuk memampatkan sumber statik kami. Ini biasanya bermakna kita akan cuba untuk berkompromi dan cuba memampatkan hanya fail yang melebihi ambang tertentu, sebagai sumber yang dinamik memampatkan pada setiap permintaan boleh mahal. Nginx mempunyai arahan gzip_static yang membolehkan kami menyediakan versi gzip fail (lanjutan .gz), bukannya sumber biasa: Dengan cara ini, nginx akan cuba menyediakan style.css.gz bukannya gaya.css (dalam kes ini kita perlu mengendalikan gzipping sendiri). Dengan cara ini, kitaran CPU tidak sia -sia pada mampatan dinamik untuk setiap permintaan. Cerita tentang Nginx tidak lengkap tanpa menyebut bagaimana kandungan cache. Nginx caching sangat cekap sehingga banyak pentadbir sistem berfikir bahawa lapisan cache HTTP yang berasingan (seperti varnis) tidak masuk akal. "Kesederhanaan adalah ciri." Membolehkan caching Nginx sangat mudah. Ini adalah arahan yang kami letakkan di dalam fail hos maya, yang terletak di luar blok pelayan. Parameter proxy_cache_path boleh menjadi jalan yang kita mahu menyimpan cache. Tahap menentukan berapa banyak tahap direktori Nginx harus menyimpan kandungan cache. Atas sebab prestasi, dua peringkat biasanya OK. Ia boleh memakan masa untuk melintasi direktori. Parameter Keys_Zone adalah nama kawasan memori yang dikongsi untuk menyimpan kunci cache, dan 10m adalah ruang untuk kunci ini dalam ingatan (10MB biasanya cukup; ini bukan ruang untuk kandungan cache sebenar). max_size adalah pilihan, yang menetapkan had atas kandungan cache - di sini ialah 10GB. Jika tidak ditentukan, ia akan mengambil semua ruang yang ada. INACTIVE Menentukan berapa lama kandungan boleh tinggal di cache sebelum diminta dan kemudian dipadam oleh Nginx. Selepas tetapan, kami akan menambah baris berikut yang mengandungi nama kawasan memori ke pelayan atau blok lokasi: Tahap Tekanan Tekanan Tambahan Nginx boleh dilaksanakan dengan memberitahu Nginx untuk menyediakan item dari cache apabila ralat berlaku di pelayan sumber, pelayan hulu, atau downtime pelayan: Untuk maklumat lanjut mengenai arahan pelayan atau blok lokasi untuk tweak lagi cache Nginx, lihat di sini. Proxy Cache Arahan digunakan untuk sumber statik, tetapi kami biasanya ingin cache output dinamik aplikasi web kami -sama ada CMS atau sesuatu yang lain. Dalam kes ini, kami akan menggunakan Cache Cache bukannya proksi Cache *: Baris terakhir di atas akan menetapkan tajuk tindak balas untuk memberitahu kami sama ada kandungan itu diluluskan dari cache atau tidak. Kemudian, di pelayan atau blok lokasi kami, kami boleh menetapkan beberapa pengecualian cache - contohnya, apabila rentetan pertanyaan wujud dalam url permintaan: Juga, dalam kes PHP, dalam blok .php di pelayan, kami akan menambah sesuatu seperti yang berikut: di atas, fastcgi_cache* garis dan fastcgi_no_cache mengawal caching dan pengecualian. Rujukan terperinci kepada semua arahan ini boleh didapati di laman web dokumentasi NGINX. Untuk mengetahui lebih lanjut, kakitangan Nginx telah menyediakan webinar percuma mengenai topik ini dan terdapat banyak e-buku yang tersedia. kami cuba memperkenalkan beberapa teknologi yang membantu meningkatkan prestasi pelayan web dan teori di belakangnya. Tetapi topik ini tidak lengkap: kami masih tidak meliputi tetapan proksi terbalik atau tetapan multi-server yang terdiri daripada Apache dan Nginx. Hasil terbaik pada kedua -dua pelayan bergantung pada ujian dan menganalisis kes -kes sebenar tertentu. Ini adalah topik yang tidak pernah berakhir. Apache dan Nginx adalah kedua -dua pelayan web yang kuat, tetapi terdapat perbezaan yang signifikan dalam keupayaan prestasi dan pengoptimuman. Apache adalah pelayan lama yang menggunakan model yang didorong oleh proses untuk membuat thread baru untuk setiap permintaan. Ini boleh membawa kepada banyak penggunaan memori apabila berurusan dengan pelbagai sambungan serentak. Nginx, sebaliknya, menggunakan seni bina yang didorong oleh peristiwa yang membolehkannya mengendalikan ribuan sambungan serentak, dengan penggunaan memori yang sangat sedikit. Ini menjadikan Nginx lebih cekap dan lebih cepat, terutamanya dalam penghantaran kandungan statik dan senario proksi terbalik. Terdapat pelbagai cara untuk mengoptimumkan nginx untuk prestasi yang lebih baik. Pertama, anda boleh menyesuaikan proses pekerja dan sambungan pekerja. Proses pekerja hendaklah ditetapkan kepada bilangan CPU atau teras, sementara sambungan pekerja harus ditetapkan ke had fail terbuka maksimum. Kedua, anda boleh mengaktifkan mampatan GZIP untuk mengurangkan saiz data Nginx yang dihantar kepada pelanggan. Ketiga, anda boleh menggunakan cache untuk menyimpan data yang sering diakses dalam ingatan, mengurangkan operasi I/O cakera. Akhirnya, anda boleh menggunakan pengimbangan beban untuk menyebarkan trafik rangkaian di pelbagai pelayan, meningkatkan masa tindak balas dan prestasi keseluruhan. Apache boleh dioptimumkan dalam pelbagai cara. Pertama, anda boleh menyesuaikan Arahan MaxClients untuk mengawal bilangan maksimum sambungan serentak. Kedua, anda boleh mengaktifkan mod_deflate untuk memampatkan data sebelum menghantarnya kepada pelanggan, dengan itu mengurangkan penggunaan jalur lebar. Ketiga, anda boleh menggunakan mod_cache untuk cache untuk menyimpan data yang sering diakses dalam ingatan, mengurangkan operasi I/O cakera. Akhirnya, anda boleh memuatkan keseimbangan menggunakan mod_proxy_balancer untuk menyebarkan trafik rangkaian merentasi pelbagai pelayan, meningkatkan masa tindak balas dan prestasi keseluruhan. Ya, anda boleh menggunakan kedua -dua Apache dan Nginx dalam tetapan proksi terbalik anda. Dalam konfigurasi ini, Nginx bertindak sebagai pelayan front-end yang mengendalikan permintaan klien, dan Apache bertindak sebagai pelayan back-end yang mengendalikan permintaan ini. Persediaan ini menggabungkan kelebihan kedua -dua pelayan, Nginx dengan cekap mengendalikan kandungan statik, sementara Apache menyediakan pemprosesan kandungan dinamik. nginx cemerlang dalam menyediakan kandungan statik kerana seni bina yang didorong oleh peristiwa, yang membolehkannya mengendalikan ribuan sambungan serentak secara serentak dengan penggunaan memori yang minimum. Untuk kandungan dinamik, NGINX boleh lulus permintaan ke pelayan aplikasi (seperti PHP-FPM) atau proksi mereka ke pelayan Apache. Walau bagaimanapun, Nginx tidak mengendalikan kandungan dinamik tempatan seperti Apache menggunakan modul Mod_PHPnya. Apache boleh memberikan kandungan statik dan dinamik. Untuk kandungan statik, Apache menggunakan modul terasnya. Untuk kandungan dinamik, Apache menggunakan modul tambahan seperti mod_php untuk memproses skrip PHP. Walau bagaimanapun, model yang didorong oleh proses Apache boleh membawa kepada banyak penggunaan memori apabila berurusan dengan pelbagai sambungan serentak, menjadikannya kurang cekap daripada Nginx dari segi penghantaran kandungan statik. Pengoptimuman pelayan dapat meningkatkan prestasi laman web dengan ketara. Ia dapat mengurangkan masa tindak balas pelayan, meningkatkan bilangan sambungan serentak yang dapat dikendalikan oleh pelayan, dan mengurangkan penggunaan jalur lebar. Ini boleh membawa kepada masa beban halaman yang lebih cepat, pengalaman pengguna yang lebih baik dan kedudukan SEO yang lebih baik. memilih antara Apache dan Nginx bergantung kepada keperluan khusus anda. Jika anda memerlukan pelayan yang boleh mengendalikan banyak sambungan serentak dengan cekap, atau anda terutamanya melayani kandungan statik, maka Nginx mungkin menjadi pilihan yang lebih baik. Jika anda memerlukan pelayan yang mempunyai sokongan yang kuat untuk pemprosesan kandungan dinamik, atau jika anda bergantung pada fail .htaccess untuk konfigurasi, Apache mungkin lebih sesuai. Isu prestasi biasa dengan Apache termasuk penggunaan memori yang tinggi dan masa tindak balas yang perlahan apabila mengendalikan pelbagai sambungan serentak. Bagi Nginx, masalah biasa termasuk konfigurasi proses dan sambungan pekerja yang tidak betul dan kekurangan keupayaan pemprosesan kandungan dinamik. Anda boleh menggunakan pelbagai alat untuk memantau prestasi Apache dan Nginx. Untuk Apache, anda boleh menggunakan modul mod_status untuk memberikan maklumat status pelayan. Untuk nginx anda boleh menggunakan modul stub_status. Di samping itu, anda boleh menggunakan alat pemantauan pihak ketiga seperti New Relic, Datadog, atau Nagios untuk mendapatkan metrik dan peringatan prestasi yang lebih terperinci. <code>from locust import HttpLocust, TaskSet, task
class UserBehavior(TaskSet):
@task(1)
def index(self):
self.client.get("/")
@task(2)
def shop(self):
self.client.get("/?page_id=5")
@task(3)
def page(self):
self.client.get("/?page_id=2")
class WebsiteUser(HttpLocust):
task_set = UserBehavior
min_wait = 300
max_wait = 3000
</code>
disable.htaccess: HTAccess membolehkan menyediakan konfigurasi khusus untuk setiap direktori dalam direktori akar pelayan tanpa memulakan semula. Oleh itu, meleleh melalui semua direktori untuk mencari fail .htaccess pada setiap permintaan akan mengakibatkan kerugian prestasi. Secara umum, fail .htaccess hanya perlu digunakan jika anda tidak mempunyai kebenaran untuk mengakses fail konfigurasi pelayan utama. ... Secara umumnya, fail .htaccess harus dielakkan sebanyak mungkin. Anda boleh melakukan apa sahaja konfigurasi yang anda fikir anda mahu masukkan dalam fail .htaccess dengan cekap menggunakan bahagian
Penyelesaiannya adalah untuk melumpuhkannya di /etc/apache2/apache2.conf: <code>locust --host=https://my-website.com
</code>
<code>deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse
deb http://archive.canonical.com/ubuntu xenial partner</code>
Proses forking sangat mahal berbanding dengan gelung acara. Pelayan HTTP berasaskan acara akhirnya menang.
Penjelasan visual yang lebih komprehensif mengenai seni bina nginx boleh didapati di sini.
HTTP Keepalive Connection adalah ciri prestasi yang diperlukan yang mengurangkan latensi dan mempercepat pemuatan laman web.
Mewujudkan sambungan TCP baru boleh mahal -belum lagi situasi yang melibatkan <code>from locust import HttpLocust, TaskSet, task
class UserBehavior(TaskSet):
@task(1)
def index(self):
self.client.get("/")
@task(2)
def shop(self):
self.client.get("/?page_id=5")
@task(3)
def page(self):
self.client.get("/?page_id=2")
class WebsiteUser(HttpLocust):
task_set = UserBehavior
min_wait = 300
max_wait = 3000
</code>
Secara lalai, Nginx menggunakan proses PHP yang berasingan untuk mengemukakan permintaan fail PHP. Di sini, ia bertindak sebagai proksi (sama seperti ketika kami menyediakan Apache dengan Php7.0-fpm). <code>locust --host=https://my-website.com
</code>
<code>deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse
deb http://archive.canonical.com/ubuntu xenial partner</code>
<code>from locust import HttpLocust, TaskSet, task
class UserBehavior(TaskSet):
@task(1)
def index(self):
self.client.get("/")
@task(2)
def shop(self):
self.client.get("/?page_id=5")
@task(3)
def page(self):
self.client.get("/?page_id=2")
class WebsiteUser(HttpLocust):
task_set = UserBehavior
min_wait = 300
max_wait = 3000
</code>
cache dengan nginx
<code>locust --host=https://my-website.com
</code>
<code>deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse
deb http://archive.canonical.com/ubuntu xenial partner</code>
<code>sudo apt-get install libapache2-mod-fastcgi php7.0-fpm
</code>
<code>sudo service start php7.0-fpm
</code>
<code>sudo a2dismod php7.0 mpm_prefork
sudo a2enmod mpm_event proxy_fcgi
</code>
<code><filesmatch>
SetHandler "proxy:fcgi://127.0.0.1:9000/"
</filesmatch></code>
Kesimpulan
Soalan Lazim Mengenai Teknologi Pengoptimuman Prestasi Apache dan Nginx
Apakah perbezaan utama antara Apache dan Nginx dari segi prestasi dan pengoptimuman?
Bagaimana untuk mengoptimumkan nginx untuk prestasi yang lebih baik?
Bagaimana untuk mengoptimumkan Apache untuk prestasi yang lebih baik?
Bolehkah saya menggunakan Apache dan Nginx pada masa yang sama?
Bagaimanakah nginx mengendalikan kandungan statik dan dinamik dengan cara yang berbeza?
Bagaimanakah Apache mengendalikan kandungan statik dan dinamik dengan cara yang berbeza?
Apakah kesan pengoptimuman pelayan terhadap prestasi laman web?
Bagaimana memilih antara Apache dan Nginx?
Apakah beberapa masalah prestasi biasa dengan Apache dan Nginx?
Bagaimana untuk memantau prestasi Apache dan Nginx?
Atas ialah kandungan terperinci Apache vs Prestasi Nginx: Teknik Pengoptimuman. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!