Apache проти Nginx


29

Я нещодавно досліджував відмінності між Apache та Nginx, і я збентежений, що мені слід вибрати.

Я провів деякі пошуки, але немає остаточного порівняння між ними, і мені було цікаво, чи може хтось тут висловити свою думку щодо відмінностей між ними.

Мої сучасні знання дозволяють мені зрозуміти, що mod_php швидший і безпечніший, ніж fastcgi, проте Apache набагато гірше, коли мова йде про одночасне підключення та споживання пам'яті.

Мій сайт використовує багато тривалих опитувань, але має не AJAX веб-базу (тобто Apache з довгим опитуванням вгорі).

Моє оригінальне рішення проблем пам'яті Apaches полягало в тому, щоб відправити довге опитування через node.js, а потім отримати node.js для доступу до Apache кожні 2 секунди, і в цьому випадку Apache не матиме відкритого з'єднання, а замість цього буде node.js. Я зрозумів, що це може бути недостатньо добре, і я розглядаю різні рішення. Мені все ще цікаво, чи спрацювала б моя оригінальна ідея.

То що краще для сучасної павутини? Apache чи Nginx?

Оновлення: всі наведені пропозиції були хорошими та дійсними. Я пішов із початковою другою ідеєю, яка полягає у використанні повного сервера Nginx. Я впевнений, що, будучи спеціалізованим сервером, я не міг зазнавати проблем безпеки від fastcgi, і оскільки мої тривалі сценарії опитування повинні бути записані в PHP, мені потрібен сервер, який може працювати з одночасними з'єднаннями з високим навантаженням, і Apache просто не може цього зробити, незалежно від того, скільки Я змінюю структуру, вона все ще буде голодною пам’яттю.

Я відзначив відповідь Мартина F, оскільки він дав таку чітку і повну відповідь на мої запитання, що я вважаю, що він заслуговує на оцінку, проте всі три відповіді були хорошими і дійсними, і я найвиразніше розглядаю використання зворотного проксі для іншого сайту, яким я володію так як я щойно знайшов щось дуже вельми приємне, що може зробити Nginx у проксі.

Спасибі,

Відповіді:


28

У вас, здається, є кілька помилок, які, на мою думку, потрібно вирішити.

Перш за все, mod_php лише незначно швидший, усі мої тести показали, що різниця настільки незначна, що її не варто враховувати. Я також сумніваюся, що аспект безпеки стосується вас, як ви, здається, дивитесь на спеціалізований сервер і mod_php справді має лише перевагу в спільному середовищі - адже в спеціалізованому середовищі php-fpm матиме перевагу, оскільки PHP і ваш веб-сервер тепер працює як різні процеси, і це навіть не враховує дивовижних варіантів реєстрації в php- fpm, наприклад, повільний журнал.

Якби світ був чорно-білим, я б сказав, перейдіть з чистою настройкою nginx і компілюйте php з php-fpm. Більш реально, якщо у вас вже працює Apache, тоді зробіть nginx зворотним проксі-сервером до apache, і ви можете заощадити кілька годин часу налаштування, і різниця в продуктивності буде невеликою.

Але давайте припустимо, що світ чорний і білий на секунду, тому що це робить набагато більш дивовижними налаштування. Ви робите nginx + php-fpm для свого веб-сервера. Щоб вирішити завантаження, ви використовуєте модуль завантаження та модуль ходу завантаження для nginx. Це означає, що ваш веб-сервер приймає завантаження і передає шлях файлу до PHP, коли це буде зроблено, так що файл не потрібно передавати між nginx та PHP через протокол fastcgi, солодкий. (У мене це є в прямому ефірі, і він працює чудово, btw!)

Для завантаження користувача ви використовуєте nginxs x-send-file-подібну функцію під назвою x-accel-redirect, по суті ви робите свою автентифікацію в PHP і встановлюєте заголовок, який nginx запускає і починає передавати цей файл. PHP завершує виконання, і ваш веб-сервер обробляє передачу, мила! (Знову ж таки, у мене це є в прямому ефірі і це чудово працює)

Для розповсюдження файлів на серверах або інших тривалих операціях ми розуміємо, що PHP не дуже підходить для цього, тому ми встановлюємо передач, який є сервером роботи, який може розподіляти завдання між працівниками на різних серверах, ці працівники можуть бути записані в будь-який мова. Таким чином, ви можете створити робочого дистрибутива і нерестувати 5 з них, використовуючи всього 200 КБ пам'яті, а не 100 Мб PHP, що використовується. Солодке. (У мене також це працює в прямому ефірі, тому все реально можливо)

Якщо ви ще цього не зробили, я думаю, що багато ваших проблем взагалі не пов’язані з вашим веб-сервером, ви просто так вважаєте, оскільки Apache змушує його бути пов’язаним із вашим веб-сервером завдяки його структурі, часто є набагато кращі інструменти для роботи, ніж PHP і PHP - це мова, яка це знає, і надає чудові варіанти для завантаження роботи, не виходячи з PHP.

Я настійно рекомендую nginx, але я також думаю, що ви повинні переглянути інші варіанти інших проблем, якщо у вас є проблеми зі масштабуванням або продуктивністю, тоді не соромтесь писати мені. Я не знаю, чи можете ви надсилати повідомлення сюди, але в іншому випадку напишіть мені на martin@bbtn.us, оскільки я не переслідую помилки сервера за те, що не позначено nginx. :)


1
Чорт за те, що дійсно прояснив речі :) дякую, що це було пояснення, яке я шукав. Я думаю, що я досить проданий на вивченні Nginx зараз, оскільки Apache задихнувся і помер, використовуючи мій сайт. На щастя, це виглядає дуже просто, щоб перемістити його поперек. Я маю на увазі, що люди на node.js сказали, що пишуть більшість речей у цьому, і лише опитують ваш клас сеансів PHP, якщо вам це дійсно потрібно (що я роблю, якщо тільки я не є способом виявлення, коли користувачі закривають свої вікна: P). Так, я бігаю на масивну серверну ферму, тому знаючи, що немає загрози безпеці, допомагає тоннам, дякую за чудове пояснення :)
Sammaye

Я дивився на це: joeandmotorboat.com/2008/02/28/… і це: blog.webfaction.com/a-little-holiday-present, і це насправді змусило насміхуватися на думку про можливість довго зміст опитування до мого серця. Немає жодної проблеми пам’яті на відміну від Apache :)
Sammaye

Зачекайте, щоб ваша приказка могла зробити так, щоб багатомовний працівник в Java і PHP міг обходити це ідеально? Я маю на увазі найбільшу проблему, яку я бачу, це сервер, оскільки у мене виникають великі проблеми з пам'яттю з Apache за допомогою тривалого опитування, яке є загальним ... ofc, виправленим Nginx.
Sammaye

1
По суті, так, у мене є працівники з розподілу файлів, написані на C, використовуючи розширення передач для PHP, я надсилаю завдання з дистрибуції на сервер роботи ремісників, і він надсилає його працівнику, який може бути написаний будь-якою мовою; PHP, Java, C і т. Д. Цей працівник виконує свою роботу і повідомляє про стан станції, який повідомляє PHP. (якщо не обрано фонове завдання, і в цьому випадку PHP закінчується, не чекаючи його)
Martin Fjordvald

2
Я знаю, що це стара публікація, але я мушу сказати, що це одна з найбільш інформативних публікацій, яку я знайшла на тему nginx vs apache. Танс Мартін, +1.
Akoi Meexx

5

Я б запропонував запустити nginx як зворотний проксі. Він буде обробляти всі ваші статичні та кешовані файли (де це значно швидше, ніж Apache / менше накладних витрат), а потім пересилатиме всі запити на динамічний вміст Apache.


Так, це, мабуть, більшість людей робить атм. Я, безумовно, повинен це вивчити :)
Sammaye

1
Не забудьте встановити mod_rpaf для Apache, щоб ви могли пройти через IP-адреси клієнта для цілей реєстрації (інакше журнали Apache покажуть усі запити як з 127.0.0.1), додайте наступне в nginx config: proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;
Грег Аннандейл

Мені цікаво одне, перш ніж спробувати це сьогодні ввечері. Якщо я маршрутизую через Nginx до Apache, який обслуговує мій PHP, чи означає це, що тривале опитування все ще матиме ті ж проблеми, що і Apache, або викликає його у зворотному проксі, змушує Apache діяти по-іншому?
Sammaye

1

Я не дуже впевнений, що mod_php швидше, ніж його альтернативи, де ти це читав? Я зробив кілька лабораторних тестувань за допомогою nginx + php-fpm, і з того, що я виміряв, він перемагає всі інші установки.

Погляньте на цю налаштування: http://interfacelab.com/nginx-php-fpm-apc-awesome/

Я налаштував це майже так само, за винятком того, що я використовую пакети PHP з http://www.dotdeb.org/ - що включає пакет php-fpm та сценарій init, готовий до використання. Я не використовую memecache або syck.


stackoverflow.com/questions/78108/… отримав його звідси, і я перевірив керівництво по php, і воно говорить про те, що php_mod надає значну перевагу перед версіями cgi. Ваша установка виглядає добре. Це теж дуже легко виглядає. Я
вивчу

2
У ньому йдеться про те, що CGI набагато повільніше, ніж вбудований модуль - не FastCGI :)
pauska

1
Ну, якщо ви турбуєтесь про те, що процес PHP помирає (або вичерпується), то FastCGI (або PHP-FPM) - це шлях. Це може знищити мертвих дитячих процесів, не перериваючи інших дій.
pauska

1
Так. Або, ну, це залежить. Скільки (максимальна) кількість повільних запитів ви будете обробляти одночасно? Встановіть для цього максимум PHP FPM, плюс кількість "швидких" cgi, які ви хочете отримати. Я чув про людей, що працюють на сервері з 4 ГБ оперативної пам’яті 200 дітей PHP-FPM, тому я б не надто хвилювався з цього приводу, якби я був ти. Наступна версія PHP (5.3.3) включає стандартну PHP-FPM, де також є доданий рекламний движок - він буде масштабуватись відповідно до кількості запитів, які ви очікуєте на розгляд.
pauska

1
Я легко працював би над декількома серверами (можливо, до 10), але якщо я можу вмістити 200 запитів, які можна довго опитувати на сервері 4 Гб, це повинно скласти майже половину 20 сервера, мені знадобиться запуск Apache. хмммм ... мені потрібно буде перевірити це сьогодні ввечері
Sammaye
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.