Использование встроенного сервера PHP в производстве
Мне недавно понравился встроенный веб-сервер PHP 5.4. На первый взгляд кажется, что, хотя и довольно barebones, при достаточной работе можно было бы распространять PHP-приложения, которые традиционно зависят от отдельного веб-сервера, такого как WordPress, как автономные скрипты, которые вы могли бы просто запустить с помощью php -S localhost:80 app.php
(или, более вероятно, './wordpress.sh'
). Они могут даже поставлять свой собственный PHP-интерпретатор, который обладает всеми функциями, необходимыми для приложения, что устраняет необходимость в ориентации на различные версии языка.
Это немного изобретает колесо, но это, безусловно, увеличит переносимость и уменьшит сложность для конечного пользователя.
Однако на странице документации
Ответы
Ответ 1
Я могу думать о множестве операционных проблем, почему вы не захотите этого делать:
- Вход
- Перезапись
- Троттлинг
- Эффективность (не тестировалась, но я предполагаю, что Nginx намного быстрее, чем встроенный не оптимизированный сервер PHP).
- Интеграция с чем-то еще, что у вас есть, которое расширяет Nginx, Apache и IIS (такие вещи, как New Relic).
Однако есть решение, в котором вы получаете большую часть преимуществ запуска PHP со встроенным веб-сервером, получая большую выгоду от запуска веб-сервера. То есть вы можете использовать сервер, такой как Nginx, в качестве обратного прокси-сервера для встроенного веб-сервера PHP. В этой ситуации HTTP становится заменой FastCGI, аналогичной общему использованию встроенного HTTP-сервера в приложениях Node.js.
Теперь я не могу говорить о специфике предупреждения в документации, поскольку я не один из авторов PHP. Если бы это был я, я бы не запускал PHP по причинам выше, но я мог бы подумать о том, чтобы запустить его за настоящим веб-сервером, таким как Nginx. Для меня, тем не менее, настройка PHP с помощью PHP-FPM и то, что не так сложно, и я возьму это на догадки о мореходности встроенного сервера, который документально подтвержден только для тестирования.
Ответ 2
Встроенный PHP сервер поддерживает только HTTP/1.0, что означает, что клиентам необходимо создать новое TCP/IP-соединение для каждого запроса. Это очень медленно.
Ответ 3
Он не предназначен для использования в производстве и, возможно, не сможет изящно обрабатывать сбои и утечки памяти, что вызывает проблемы стабильности. Более того, сам PHP предупреждает об этом явно:
Предупреждение. Этот веб-сервер был разработан для поддержки разработки приложений. Он также может быть полезен для целей тестирования или демонстраций приложений, которые запускаются в контролируемых средах. Он не предназначен для полнофункционального веб-сервера. Он не должен использоваться в общедоступной сети.
http://php.net/manual/en/features.commandline.webserver.php