Развертывание проектов PHP с помощью IIS в Windows

PHP

предисловие

Как выбрать работающую платформу нужно рассматривать со многих сторон.Я не хочу участвовать ни в каких спорах о Linux и Windows.Я просто надеюсь посмотреть на проблему более рационально, а не отрицать одну сторону без причины. Прошло 9102 года, не останавливайте свое познание в эпоху Windows Server 2003 + IIS 6 более 10 лет назад, независимо от того, какие соображения стоит отрицать Windows Server + IIS, производительность действительно не может быть использована в качестве причина.

Начиная с IIS 7, использование модели IOCP с http.sys, работающим в режиме ядра, значительно повышает производительность IIS. При той же конфигурации по умолчанию производительность вывода чистых статических файлов даже выше, чем у Nginx. Однако, хотя производительность веб-сервера достаточна, производительность сетевого уровня Windows Server действительно хуже, чем у Linux, а учитывая, что ядро ​​Linux может быть дополнительно настроено, при высокой нагрузке все еще существует значительный разрыв в производительности. Если узкое место приложения находится не на сетевом уровне, то этот пробел можно игнорировать.

Что касается функций, то после установки компонентов перезаписи URL-адресов и маршрутизации запросов приложений с помощью встроенного в IIS установщика веб-платформы (установщик веб-платформы) также могут быть реализованы такие функции, как переопределение URL-адресов, обратный прокси-сервер, балансировка нагрузки и службы кэширования.

Анализ различий платформ

Есть три способа развернуть PHP:

  • Nginx + PHP-FPM
  • Apache + mod_php / mod_proxy_fcgi
  • IIS + PHP FastCGI

И Nginx + PHP-FPM, и IIS + PHP FastCGI можно рассматривать как режим Web Server + FastCGI, разница в том, что между Nginx и FastCGI есть дополнительный PHP-FPM (FastCGI Process Manager). Apache также можно использовать с PHP FastCGI через mod_proxy_fcgi или с PHP-FPM с помощью mod_proxy_fcgi (High-performance PHP on apache httpd 2.4.x using mod_proxy_fcgi and php-fpm).

Существует также разница в безопасности потоков, а именно NTS (Not Thread Safe) и TS (Thread Safe), которую можно объяснить в разделе вопросов и ответов официальной документации:

What does thread safety mean when downloading PHP?

Thread Safety means that binary can work in a multithreaded webserver context, such as Apache 2 on Windows. Thread Safety works by creating a local storage copy in each thread, so that the data won't collide with another thread.

So what do I choose? If you choose to run PHP as a CGI binary, then you won't need thread safety, because the binary is invoked at each request. For multithreaded webservers, such as IIS5 and IIS6, you should use the threaded version of PHP.

Подводя итог, сравнивая методы развертывания Windows и Linux, помимо веб-сервера, самая большая разница заключается в том, есть ли PHP-FPM, а PHP-FPM пока не имеет собственной версии для Windows и может быть запущен только через Cygwin. .

Еще одна вещь, которую следует учитывать, это расширение PHP.Если вы используете расширение, которое не поддерживает платформу Windows, вы можете просто отказаться от Windows Server.

PHP On Windows

Майкрософт открылPHP on WindowsВеб-сайт, вы можете просмотреть соответствующую официальную информацию и документы технической поддержки.

Установить IIS

В системах Windows Server требуется добавление роли веб-сервера через администрирование сервера. Необходимо отметить, чтоПроверьте поддержку CGI в разделе «Разработка приложений»..

Windows 10 требует控制面板открыть в程序和功能модуль, через левый启用或关闭 Windows 功能Добавить к. Однако имейте в виду, что несерверные системы имеют некоторые ограничения, влияющие на производительность RPS.

Встроенные группы пользователей IISIIS_IUSER, как и в Linux, соответствующий каталог должен иметь соответствующие разрешения на чтение и запись. В случае очень высоких требований безопасности каждый сайт должен быть изолирован от пользователя. Как правило, используйтеIIS_IUSERдостаточно.

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

Подробную информацию о настройке разрешений файловой системы NTFS см. в Baidu.

  • Журналы IIS

Журнал конфигурации по умолчанию сохраняется по пути системного диска, обычноC:\inetpub\logs\LogFiles. Изменения можно вносить коллективно в корневую конфигурацию диспетчера IIS или индивидуально для сайтов.

Рекомендуется настроить корневой каталог журналов на несистемный диск, разделить файлы журналов по сайтам и настроить их ежедневное обновление.

  • Установить установщик веб-платформы

Woohoo.Microsoft.com/Web/down OA…

В обычных условиях IIS уже установил этот модуль, если нет, вы можете установить его вручную.

  • Установите модуль перезаписи URL

Woohoo IIS.net/downloads/ нет…

Модуль, который необходимо установить для развертывания проекта PHP.

Примечание. Если английский действительно не очень хорош, вы можете загрузить версию на китайском (упрощенном китайском) на веб-странице и убедиться, что язык интерфейса модуля после установки — китайский.

  • Установите модуль маршрутизации запросов приложений.

Woohoo IIS.net/downloads/ нет…

Он не нужен для обычных PHP-проектов и может использоваться для реализации таких функций, как обратный прокси, прокси-кэш и балансировка нагрузки.Язык интерфейса этого модуля — английский.

Установить PHP

Recommended Configuration on Windows systems

Расширение WinCache, рекомендованное как PHP, так и Microsoft, может быть включено вместе с OpCache, что значительно повышает производительность. Однако включение расширений OpCache и WinCache может значительно повысить производительность, однако перед их включением рекомендуется убедиться, что развертывание прошло успешно, чтобы избежать трудностей при устранении неполадок, связанных с кэшированием.

  • Скачать PHP для Windows

Как правило, его можно установить через установщик веб-платформы, но если нужная версия недоступна, ее необходимо загрузить вручную.

Открытымwindows.php.net/download/, загрузите требуемую версию PHP Non Thread Safe.

Обратите внимание на название версииVC15 x64 Non Thread SafeУказывает зависимую версию среды выполнения VC. Если в системе не установлена ​​соответствующая среда выполнения VC, она не сможет работать. В левой части страницы есть соответствующая ссылка для скачивания.

  • Установите PHP-менеджер для IIS

GitHub.com/менеджер PHP/…

Хотя PHP FastCGI можно зарегистрировать вручную, настоятельно рекомендуется использовать PHP Manager For IIS, который можно использовать для управления конфигурацией и расширениями PHP. Если вы используете ручную регистрацию PHP FastCGI, вам необходимо вручную добавить его в документ по умолчанию в интерфейсе управления IIS.index.php.

  • WinCache Extension for PHP

источник forge.net/projects/i…

Официальная документация по настройке WinCachePHP.net/manual/well/i….

Официальная документация по конфигурации OpCachePHP.net/manual/э-э-э....

PHP-конфигурация

В диспетчере PHP для IIS вы можете легко управлять параметрами конфигурации, связанными с PHP, или вы можете вручную изменить php.ini для настройки.

Временные файлы
  • Журнал ошибок PHP FastCGI
  • Временные файлы
  • session cache

Путь по умолчанию для журнала ошибок PHP FastCGI находится по адресуC:\WINDOWS\TempВ каталоге производственная среда должна настроить тип сервера в качестве производственной среды в диспетчере PHP для IIS.

в настройках PHPupload_tmp_dir,session.save_pathпуть такжеC:\WINDOWS\Temp. Если вам нужно изменить путь, вам также необходимо обратить внимание на права доступа к каталогу.

Ограничение на загрузку файлов

На лимит загружаемых файлов влияют следующие факторы:

  • Web Server
  • FastCGI

В дополнение к ограничению размера файла ограничение времени ожидания также влияет на размер загружаемого файла. Загрузка также завершится ошибкой, если время ожидания слишком мало, а пропускная способность недостаточна для загрузки файла до истечения времени ожидания. Кроме того, файловая система также может привести к сбою загрузки, но вероятность этого относительно мала.

Конфигурация безопасности

Microsoft предоставляет подробные рекомендации по обеспечению безопасности для PHP в IISPlan PHP Application Security | Microsoft Docs

  • Удалить информацию о версии веб-сервера

На корневой странице диспетчера IIS перейдите в редактор конфигурации и найдитеsystem.webServer/security/requestFilteringвнизremoveServerHeaderэлемент, измененное значениеTrue.

допустимыйHTTP 响应标头добавить обычайServerголова, напримерNginx.

  • УдалитьX-Powered-ByИнформация о версии PHP

Настройте параметры PHP в диспетчере PHP Для IIS изменитеexpose_phpзаOff.

Точно так же вы можетеHTTP 响应标头добавить обычайX-Powered-Byголова, напримерJava.

  • запросить скрининг

При фильтрации запросов вы можете установить длину URL-адреса и длину строки запроса, разрешенную на стороне веб-сервера. Но сможет ли приложение получить полную информацию, также зависит от реализации PHP-FastCGI и реализации PHP-кода.

С помощью фильтрации запросов можно заблокировать доступ клиентов к определенным путям. Если вы используете Git для получения кода непосредственно для развертывания, то лучше поместить.gitПуть заблокирован. Если у вас есть привычка помещать сжатый код пакета в каталог, вам нужно указать конкретный путь.rarили.zipДоступ к файлу заблокирован.

Примечание. Убедитесь, что вы не включили просмотр каталогов.

разное

Если вам нужно одновременно запускать разные версии сайта или каждый сайт имеет отдельныйphp.iniФайл конфигурации, вы можете обратиться к документации MicrosoftConfigure PHP Application Security | Microsoft Docsработать.

Опять же, методы, описанные в этой статье в отношении прав доступа к каталогам, не являются самыми безопасными и скомпрометированы для удобства.