Развертывание сайта Laravel через Nginx против. PHP Artisan Serve

#php #laravel #nginx #laravel-5 #laravel-artisan

#php #laravel #nginx #laravel-5 #laravel-artisan

Вопрос:

Поскольку локально, я сделал только php artisan serve , и это работает нормально. В моей рабочей виртуальной машине я не уверен, должен ли я просто делать то же самое, php artisan serve amp; поэтому мне не нужно устанавливать Nginx, настраивать корневой каталог документа и так далее.

Есть ли какие-либо недостатки в этом?

Комментарии:

1. Нет. Ваш проект Laravel должен бесперебойно работать на любом сервере, будь то Apache, Nginx или IIS.

2. @HamzaRashid это совершенно неверно. Я бы привел аргументы, но даже небольшое количество поисковых запросов в Google даст множество доказательств. Запуск PHP под IIS, безусловно, еще худший выбор, чем запуск встроенного веб-сервера PHP. Использование Apache означает, что вам нужно выбирать между внедрением PHP в процесс / поток Apache (mod_php) или использованием FastCGI (что примерно в 20 раз быстрее). Apache страдает от нескольких проблем, одной из которых является http-мультиплексирование, которое делает просмотр ужасным, если вы не знаете, как его отключить. Упомянутые вами серверы обрабатывают соединения совершенно по-разному.

3. @Mjh к сожалению, вы вышли из контекста сути вопроса. Вы перепутали производительность веб-серверов здесь, что является совершенно другой территорией. Масштабирование — еще одна проблема, также не заданная здесь.

4. @HamzaRashid вы писали, что laravel должен бесперебойно работать на любом сервере. Это происходит только тогда, когда им пользуется один человек. Я могу понять, что вас беспокоит отрицательный ответ, но то, что вы написали, фактически неверно. Прошу прощения.

Ответ №1:

nginx

  • разработан для решения проблемы c10k
  • работает очень хорошо, даже при огромной нагрузке
  • является обратным прокси
  • использует современный анализатор http, чтобы проверить, является ли запрос действительным
  • использует чрезвычайно мощный, но простой синтаксис конфигурации
  • поставляется с множеством модулей для обработки http-трафика (модуль аутентификации, зеркальный модуль)
  • может прервать ssl / tls
  • может балансировать нагрузку между несколькими конечными точками, обслуживающими php (или любыми другими конечными точками, которые используют http)
  • может быть перезагружен для применения новой конфигурации без потери текущих подключений

php artisan serve

  • разработан для быстрой настройки веб-сайта на базе laravel
  • написано на php, не предназначено для решения проблемы c10k
  • произойдет сбой при превышении доступной памяти (128 МБ по умолчанию, которая быстро заполняется)
  • не является обратным прокси
  • не используется современный http-анализатор
  • не проходит стресс-тестирование
  • не удается масштабироваться на другие машины так, как это делает nginx
  • не завершает работу SSL. Даже если бы это произошло, это было бы мучительно медленно по сравнению с чистым скомпилированным решением
  • не основано на событиях или потоках, как php-fpm / nginx, поэтому все выполняется в одном процессе. Нет шаблона reactor для разгрузки workers для масштабирования по ядрам процессора и защиты от сбоя сервера, если часть кода испорчена. Это означает, что если вы загружаете слишком много данных из MySQL — процесс останавливается, следовательно, сервер тоже.

Настройка nginx занимает в среднем около ~ 30 секунд для опытного пользователя. Я говорю по опыту, так как это моя повседневная работа. Использование инструментов автоматизации, таких как ansible, делает это еще проще, вы можете почти забыть об этом.

Использование веб-сервера, предназначенного для настройки и быстрого тестирования части вашего кода в рабочей среде, сопряжено с рисками. Ваш сайт будет работать медленнее. Ваш сайт будет подвержен сбоям, если какой-либо скрипт решит выполнить запрос curl в цикле foreach.

Если вы считаете, что установка и настройка nginx — это сложная задача, и вы хотите использовать ее php artisan serve , убедитесь, что вы запускаете ее под наблюдением ( supervisord это мой инструмент перехода). Если произойдет сбой, он загрузится снова.

На мой взгляд, бесполезно запускать сервер на базе php для обслуживания вашего приложения. Количество времени, затрачиваемого на настройку nginx / php-fpm, невелико, даже если вы новичок в этом.

Все сопряжено с рисками и выгодами, но в данном конкретном случае выигрыша не существует, хотя есть уверенность, что что-то пойдет не так.


TL; DR

Не делайте этого, потратьте эти несколько минут на настройку nginx. Лучшее программное обеспечение — это то, которое хорошо выполняет свою работу, и на данный момент вы можете забыть об этом. nginx является одним из таких инструментов. PHP превосходит во многих областях, но встроенный веб-сервер — это не одна из тех вещей, которые вы должны использовать в производстве. Используйте инструменты, проверенные на поле боя.

Ответ №2:

php artisan serve Никогда не следует использовать в производственной среде, поскольку он использует встроенную функциональность сервера PHP7, которая предназначена только для целей разработки.

Смотрите эту страницу

Поэтому, пожалуйста, избегайте использования в производстве. Вместо этого используйте Apache или Nginx, которые оба являются хорошим выбором, в зависимости от ваших потребностей. Nginx обычно может быть быстрее (не всегда).