#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 обычно может быть быстрее (не всегда).