Содержание

Web, PHP и Apache OTUS

Начиная с версии 5.4.0, язык программирования PHP содержит встроенный веб-сервер (server), который находится в модуле CLI SAPI. В этой статье мы поговорим, как он работает, настраивается и запускается. Отдельное внимание уделим известному web-серверу Apache.

В языке программирования PHP сервер (_server) выполняет лишь один однопоточный процесс, поэтому если запрос будет заблокирован, программные приложения остановятся, причем запросы URL обслуживаются из текущей директории, где он был запущен (когда не используется опция -t, обеспечивающая явное указание корневого документа). Если URL запроса не указывает на конкретный файл, в указанной директории вернется index.php или index.html. Если же файлы не существуют, их поиск продолжится в родительской директории и т. д., причем до тех пор, пока файлы не будут обнаружены либо не будет достигнут корень документа. Когда обнаружен index. php/index.html, он возвращается, причем в $_SERVER[‘PATH_INFO’] будет последняя часть URL. В обратном случае вернется код 404.

Если в процессе запуска web сервера файл PHP указывается в командной строке, он рассматривается в качестве скрипта «маршрутизации» (как роутер). Этот скрипт выполняется лишь в начале каждого запроса HTTP. Если же скрипт возвращает false, тогда запрашиваемый ресурс возвращается как есть. В обратном случае браузеру вернется вывод скрипта.

Разработчик может настроить встроенный PHP web server таким образом, чтобы он осуществлял разветвление нескольких воркеров в целях проверки кода, требующего нескольких одновременных запросов ко встроенному веб серверу. Для этого, начиная с версии 7.4.0, надо задавать в переменной окружения число требуемых воркеров, делая это перед запуском:

Данная функция является экспериментальной. Она не поддерживается в операционной системе Windows и не предназначена для использования в production. Да и вообще, встроенный web_server обычно не предназначен для того, чтобы использовать его в production.

Запуск PHP-сервера

Запуск осуществляется следующим образом:

$ cd ~/public_html

$ php -S localhost:8000

В результате в консоли будет приблизительно такой вывод:

Listening on localhost:8000

Document root is /home/me/public_html

Press Ctrl-C to quit

После этого пишем URL-запрос:

— http://localhost:8000/;

— http://localhost:8000/myscript.html.

По итогу в консоли будет выведено примерно следующее:

Можно отметить, что до версии 7.4.0 статические ресурсы с символическими ссылками в операционной системе «Виндовс» доступны не были.

Теперь давайте выполним запуск, указав корневую директорию:

$ cd ~/public_html

$ php -S localhost:8000 -t foo/

Вывод в консоли:

В примере ниже используется скрипт маршрутизации. Запросы изображений будут их отображать, однако запросы файлов HTML вернут строку «Добро пожаловать».

Обратите внимание, что встроенный web _server не должен применяться в общедоступной сети.

CLI _server: проверка использования

Чтобы обеспечить совместное использование скрипта маршрутизации при разработке с CLI _server и далее с рабочим (production) web-сервером, применяют следующую команду:

Поддержка неподдерживаемых файловых типов

Если требуется обслуживание статических ресурсов с MIME-типами, не поддерживаемыми web CLI _server, пригодится следующий код:

$ php -S localhost:8000 router.php

Local host — так называемый локальный («местный») хост, то есть компьютер, на котором запускается программа (ПК в данном случае работает как Virtual _server).

Доступ с удаленных машин

Также у разработчика есть возможность сделать сервер на PHP доступным для всех сетевых интерфейсов на 8000 порту:

Apache HTTP _Server

Apache («Апач») — известный HTTP-сервер, имя которого заимствовано от названия племени североамериканских индейцев. Это кроссплатформенное программное обеспечение, поддерживаемое многими операционными системами:

— Linux,

— Windows,

— BSD,

— Mac OS,

— Novell NetWare,

— BeOS.

Широко известна связка Apache + PHP + MySQL.

Основные достоинства «Апача» — гибкость конфигурации и надежность. С его помощью можно подключать для предоставления данных внешние модули, применять для аутентификации пользователей СУБД, модифицировать сообщения об ошибках и многое другое. Также Apache-серверы (servers) поддерживает протокол IPv4.

Одно из преимуществ — интеграция с другим программным обеспечением и языками программирования. Есть много модулей, обеспечивающих веб-серверу Apache поддержку разных систем разработки и языков программирования. Что реализуют в модулях:

— поддержку языков программирования;

— исправление ошибок;

— добавление новых функций;

— возможность модификации основных фукнций;

— средства усиления безопасности.

Раз уж затронули тему безопасности, то тут «Апач» имеет разные механизмы, включая механизм разграничения доступа к данным. Основное:

— ограничение доступа к некоторым файлам/каталогам;

— механизм авторизации пользователей, обеспечивающий доступ к каталогу на основании HTTP- и digest-аутентификации;

— ограничение доступа к конкретным каталогам либо всему серверу, которое основано на IP-адресах пользователей;

— запрет доступа к файлам по их типу, что можно распространить как на всех пользователей, так и на некоторую их часть, к примеру, организовав запрет доступа к файлам конфигурации/базы данных.

Некоторые модули позволяют реализовывать авторизацию с помощью СУБД либо PAM.

Вдобавок ко всему, «Апачу» не проблема поддерживать механизмы CGI и FastCGI, позволяющие исполнять программы почти на любых языках программирования, включая C/C++, Lua, Java.

Если вас интересует установка и настройка Apache, обратите внимание на дополнительные ссылки ниже, где вы найдете нужную информацию.

Данная статья про server PHP написана на основании следующих материалов:

  • Page № 1: https://www. php.net/manual/ru/features.commandline.webserver.php;
  • Page № 2: https://www.php.net/manual/ru/install.unix.apache2.php.

Хотите знать больше и получить самую современную информацию? Обратите внимание на соответствующий курс в Otus:

Настройка веб-сервера Nginx + PHP-FPM + MySQL — Документация docs.cs-cart.ru 4.3.x

Предыдущая статья Следующая статья

Быстрая установка и настройка веб-сервера NginX для работы CS-Cart.

Если вы в первый раз настраиваете VPS сервер, то рекомендуем начать с изучения с более детальной инструкции: Настройка веб-сервера Apache.

Видео

Сервер и ресурсы

Для инструкции арендован самый простой VPS сервер.

Обычно VPS сервер предоставляется с чистой операционной системой, мы выбрали последнюю версию Ubuntu 14.04 LTS x86 на данный момент.

Технические характеристики сервера:

ОСUbuntu 14.04 LTS x86
Диск2.0 ГБ
Процессор2000 МГц
Память128 МБ

Подсказка

Ресурсов данного сервера достаточно только для теста и эксперимента.

Предупреждение

Предупреждение! Настройку сервера для живого интернет-магазина необходимо доверить профессионалам.

Данная инструкция может быть использована для тестовых интернет-магазинов.

1. Подключаемся к серверу по SSH

Используем терминал (PuTTY).

2. Обновим список пакетов

Запустите в терминале (PuTTY) команду:

sudo apt-get update -y

3. Устанавливаем NginX

Наша команда:

sudo apt-get install nginx -y

4. Останавливаем Nginx

Остановим NginX на время настройки простой командой:

sudo service nginx stop

5.

Узнаем количество процессоров в системе

Количество процессоров нам понадобится для конфигурации NginX:

cat /proc/cpuinfo | grep processor | wc -l

Запоминаем число процессоров.

6. Установим число процессов Nginx

Найдите на сервере и откройте для редактирования файл:

/etc/nginx/nginx.conf

Найдите строчку

worker_processes  4;

Установите для неё значение равное числу процессоров. В нашем случае один процессор.

Стало:

worker_processes  1;

Сохраняем.

7. Создадим папку для интернет-магазина

Простая команда:

mkdir -p /var/www/html/example.com

Важно

В примерах команд и в конфигурационном файле мы будем использовать example.com. Замените его на имя своего домена, например, dbazhenov.ru.

8. Конфигурация Nginx

Нам необходимо настроить конфигурацию NginX. Сделаем так, чтобы Nginx понимал наш домен и отправлял его в нужную папку на сервере, а также установим правила для SEO.

Найдите на сервере и откройте файл:

/etc/nginx/sites-available/default

Удалите весь код и вставьте новый. Ниже будет код, в комментариях кратко описано происходящее. Вам нужно заменить домен example.com на ваш домен

#######################################################################
# Описание и конфигурация основного домена для интернет-магазина
#######################################################################
server {
    listen  80;
    #   Домен интернет-магазина
    server_name example.com;
    ############################################################################
    #   Кодировка по умолчанию
    charset utf-8;
    ############################################################################
    #   Основной каталог интернет-магазина
    root /var/www/html/example.com;
    index  index.php index.html index.htm;
    ############################################################################
    #   Сжатие
    gzip on;
    gzip_disable "msie6";
    gzip_comp_level 6;
    gzip_min_length  1100;
    gzip_buffers 16 8k;
    gzip_proxied any;
    gzip_types text/plain application/xml
    application/javascript
    text/css
    text/js
    text/xml
    application/x-javascript
    text/javascript
    application/json
    application/xml+rss;
    ############################################################################
    #   Прочие настройки
    client_max_body_size            100m;
    client_body_buffer_size         128k;
    client_header_timeout           3m;
    client_body_timeout             3m;
    send_timeout                    3m;
    client_header_buffer_size       1k;
    large_client_header_buffers     4 16k;
    ############################################################################
    access_log  /var/log/nginx/example.
com_access.log combined; error_log /var/log/nginx/example.com_error.log; ############################################################################ error_page 598 = @backend; ############################################################################ location @backend { try_files $uri $uri/ /$2$3 /$3 /index.php =404; # Путь к сокету PHP-FPM fastcgi_pass unix:/var/run/php5-fpm.sock; # fastcgi_index index.php; fastcgi_read_timeout 360; # Добавляем содержимое fastcgi_params.conf ################################################################################ fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.
/(\w+/)?(\w+/)?init.php { return 404; } location ~* \.(tpl.?)$ { return 404; } location ~ /\.(ht|git) { return 404; } location ~* \.php$ { return 598 ; } ################################################################################ }

9. Перезапускаем nginx

Опять терминал:

sudo service nginx restart

10. Устанавливаем PHP-FPM

Одной командой:

sudo apt-get install php5-fpm php5-mysql php5-curl php5-gd php-mail -y

Можете установить любую версию PHP, соответствующую системным требованиям. Но в этом случае придется поменять конфигурацию nginx (/etc/nginx/sites-available/default) соответствующим образом. Например, если вы устанавливаете PHP7-FPM, вам придётся заменить путь к сокету PHP-FPM на /var/run/php/php7.0-fpm.sock.

11. Установим MySQL

Команда для установки MySQL:

sudo apt-get install mysql-server -y

В процессе установки вам потребуется несколько раз ввести пароль. Не потеряйте пароль!

12. Установим PhpMyAdmin

Ещё одной командой установим PhpMyAdmin для удобства работы с базой данных:

sudo apt-get install phpmyadmin -y

Потребуется ввести пароль от MySQL.

Консоль попросит вас выбрать Apache2 или lighttpd во время установки, пропустите данный шаг, просто нажмите ENTER

13. Добавим конфигурацию Nginx для PhpMyAdmin

Сделаем так, чтобы PhpMyAdmin открывался на отдельном поддомене: pma.example.com. Нам необходимо добавить в конфигурацию nginx новый раздел для поддомена.

Откройте на сервере файл:

/etc/nginx/sites-available/default

В конец файла добавьте конфигурацию для поддомена, который будет ссылаться на phpmyadmin. Просто скопируйте код в конец существующей конфигурации, замените example.com на ваш домен:

#######################################################################
# pma.example.com
#######################################################################
server {
    listen  80;
    #   Поддомен для phpmyadmin
    server_name pma. example.com www.pma.example.com;
    charset utf-8;
    #   Расположение логов
    access_log  /var/log/nginx/pma.example.com_access.log combined;
    error_log   /var/log/nginx/pma.example.com_error.log;
    #   Путь по которому будет ссылаться поддомен
    root /usr/share/phpmyadmin;
    index index.php index.html index.htm;
    location / {
        try_files $uri $uri/ =404;
    }
    location ~ \.php$ {
        root /usr/share/phpmyadmin;
        proxy_read_timeout 61;
        fastcgi_read_timeout 61;
        try_files $uri $uri/ =404;
        #   Путь к сокету PHP-FPM
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

14. Перезапускаем nginx

Вы уже знаете команду для перезагрузки nginx:

sudo service nginx restart

15. Всё! Устанавливаем CS-Cart

  • Скопируйте архив с CS-Cart в папку домена на новом сервере (/var/www/html/example. com).
  • Распакуйте архив
  • Установите нужные права на файлы и папки.
  • Создайте базу данных для интернет-магазина в PhpMyAdmin
  • Завершите установку в бразере: Установка в браузере

Больше информации

Как настроить локальный сервер для тестирования? — Изучение веб-разработки

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

На протяжении всего обучения, вы будете открывать примеры непосредственно в браузере — двойным кликом по HTML файлу, перетаскиванием файла в окно браузера, или через меню File > Open… и указывая необходимый HTML файл. Существует множество способов как это сделать.

Если веб-адрес начинается с file:// в котором далее прописан путь к файлу на вашем локальном жёстком диске, значит используется локальный файл. В противоположность этому, если вы откроете на просмотр один из наших примеров, расположенных на GitHub (или пример расположенный на любом другом удалённом сервере), веб-адрес будет начинаться с http:// или https://, что означает что файл был получен через HTTP.

Некоторые примеры могут не запуститься, если вы попробуете открыть их как локальные файлы. Это может произойти по нескольким причинам, самые распространённые из которых:

  • Они содержат асинхронные запросы. Некоторые браузеры (включая Chrome) не будут запускать асинхронные запросы (см. Fetching data from the server), если вы просто запускаете пример из локального файла. Это связано с ограничениями безопасности (для получения дополнительной информации о безопасности в Интернете, ознакомьтесь с Website security).
  • Они имеют серверный язык. Серверные языки (например, PHP или Python) требуют специального сервера для интерпретации кода и предоставления результатов.

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

Для этого нужно:

  1. Установить Python. Если вы пользуетесь Linux или Mac OS X, всё уже готово в вашей системе. Если вы пользователь Windows, вы можете скачать установочный файл с домашней страницы Python:

    • Зайдите на python.org
    • В секции загрузок, выберите линк для Python «3.xxx».
    • Внизу страницы выберите Windows x86 executable installer и скачайте его.
    • После загрузки файла запустите его.
    • На первой странице инсталлятора выберите чекбокс «Add Python 3.xxx to PATH».
    • Нажмите Install, затем нажмите Close когда установка закончится.
  2. Откройте командную строку (Windows)/ (OS X/Linux). Для проверки установки Python введите следующую команду:

    python -V
  3. Система вернёт вам номер версии установленной программы. В случае успешного выполнения команды python -V нужно перейти в директорию с вашим проектом, используя команду cd:

    # include the directory name to enter it, for example
    cd Desktop
    # use two dots to jump up one directory level if you need to
    cd . .
  4. Введите команду для запуска сервера в том каталоге:

    # If Python version returned above is 3.X
    python -m http.server
    # If Python version returned above is 2.X
    python -m SimpleHTTPServer
  5. По умолчанию это приведёт к запуску содержимого каталога на локальном веб-сервере на порту 8000. Вы можете перейти на этот сервер, перейдя на URL-адрес localhost: 8000 в своём веб-браузере. Здесь вы увидите содержимое указанного каталога — щёлкните файл HTML, который вы хотите запустить.

Примечание. Если у вас уже есть что-то на порту 8000, вы можете выбрать другой порт, запустив команду сервера, за которой следует альтернативный номер порта, например: python -m http.server 7800 (Python 3.x) или python -m SimpleHTTPServer 7800 (Python 2.x). Затем вы можете получить доступ к своему контенту на localhost: 7800.

Модуль Python SimpleHTTPServer (python 2. 0) http.server (python 3.0) полезен, но он не знает, как запускать код, написанный на таких языках, как Python, PHP или JavaScript. Чтобы справиться с этим, вам понадобится нечто большее — именно то, что вам нужно, зависит от языка сервера, который вы пытаетесь запустить. Вот несколько примеров:

  • Для запуска кода на стороне сервера Python вам необходимо использовать веб-инфраструктуру Python. Вы можете узнать, как использовать структуру Django, прочитав Django Web Framework (Python). Flask также является хорошей (чуть менее тяжёлой) альтернативой Django. Чтобы запустить это, ознакомьтесь с install Python/PIP, а затем установите Flask с помощью pip3 install flask. На этом этапе вы сможете запустить примеры Python Flask, используя, например, python3 python-example.py, затем перейдя на localhost: 5000 в свой браузер.
  • Чтобы запустить серверный код Node.js (JavaScript), вам нужно использовать Node.js или фреймворк, построенный поверх него. Express — хороший выбор — см. Express Web Framework (Node.js/JavaScript).
  • Чтобы запустить PHP-серверный код, вам понадобится настройка сервера, которая может интерпретировать PHP. Хорошими вариантами для локального тестирования PHP являются MAMP (Mac и Windows), AMPPS (Mac, Windows, Linux) и LAMP (Linux, Apache, MySQL и PHP / Python / Perl). Это полные пакеты, которые создают локальные настройки, позволяющие запускать базы данных Apache, PHP и MySQL.

Last modified: , by MDN contributors

Как php взаимодействует с веб-сервером?

21 июн 2021

#php, #http, #apache, #nginx, #php-fpm

При изучении php вопрос коммуникации интерпретатора и сервера часто рассматривается поверхностно или в принципе выносится за рамки. В этой статье я расскажу о различных способах взаимодействия, в том числе: cgi, fast-cgi, mod_apache, php-fpm и о том как они устроены. Это позволит вам сделать оптимальный выбор при проектировании системы, а также управлять её быстродействием.

Web-сервер

В терминах веб-разработки веб-сервер — это программа(служба) призванная обрабатывать http-запросы. Компьютер (виртуальная система), где установлена это программа, обычно называют машиной или «тачкой» на сленге. Каждый раз, когда пользователь вводит в браузере URL, соответствующий http-запрос отправляется на сервер. Веб-сервер(Apache, Nginx или любой другой) разбирает(парсит) это запрос и отдает запрошенный документ(если он имеется и доступен). Браузер в данной схеме принято называть клиентом.

Типичный http-запрос выглядит так:



  GET /document.html HTTP/1.1
  Host: alexp007.ru
  User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:89.0) Gecko/20100101 Firefox/89.0
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8


В первой строке указывается метод, запрашиваемый ресурс и протокол. Дальше следуют(опционально) заголовки — это текстовая информация формата «ключ: значение», позволяющая передавать различные дополнительные сведения, например версию браузера(клиента) и принимаемые типы документов.

Ответ сервера:



  HTTP/1.1 200 OK
  Server: nginx
  Content-Type: text/html; charset=UTF-8
  Content-length: 194

  <!DOCTYPE html>
  <html> lang=ru>
  <head>
    <title>Документ</title>
  </head>
  <body>
    Тело документа.
  </body>
  </html>


Динамический контент

Изначально веб-серверы работали только со статическим контентом, отдавали html-страницы, jpeg картинки и прочее. Однако, с развитием интернета появилась необходимость работать с динамическим контентом(создаваемым на лету). Динамика обогащает пользовательский опыт и превращает простые сайты в настоящие веб-сервисы. Тут на сцену и выходит php вместе с cgi.

Common Gateway Interface

Интерфейс описывающий взаимодействие между сервером и программой(скриптом). Каждый раз, когда приходит запрос на исполнение соответствующего скрипта, сервер поднимает дополнительный процесс, который запускает интерпретатор php и полученный результат возвращает клиенту. По сути дела интерпретатор запускается в режиме cli (STDIN/STDOUT). Схему можно представить так:

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

Программист разрабатывающий cgi-скрипты должен позаботится об ответе состоящим из заголовков и тела в соответствии с протоколом http. Например, для простого сценария, возвращающего html, обязательно должен быть установлен Content-type.

Пример cgi-программы:


#!/usr/bin/php
<?php

echo "Content-type: text/html; charset=utf-8\n\n"
echo '<h2>Привет МИР!</h2>';

Обратите внимание на первую строчку #!/usr/bin/php — это указание веб-серверу на интерпретатор php, который необходимо вызвать, чтобы исполнить код.

Плюсы и минусы CGI

Поскольку серверу для исполнения cgi-скрипта необходимо каждый раз создавать процесс и поднимать интерпретатор, то накладные расходы на запуск таких программ достаточно высоки, а скорость исполнения мала. Более того, все скрипты запускается от пользователя веб-сервера, что несет в себе потенциальную угрозу и не позволяет разделять права. Такие приложения очень сложно поддаются отладке, потому что при ошибке php, сервер просто перестанет выполнять запрос и вернет пользователю 500 статус, а в худшем случае может и упасть сам. CGI не позволяет использовать opcache (кеширование исполняемого кода php), что также отражается на производительности.

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

Apache mod_php

Самый распространенный вариант взаимодействия сервера и php это Apache + mod_php, хотя его популярность давно уже прошла и он понемногу уступает место более современному php-fpm (о нём мы поговорим позже в этой статье). Этот способ быстр в установке, настройке и обладает хорошей производительностью при запуске php-программ.

Суть в том, что Apache запускается вместе со встроенным интерпретатором php и может самостоятельно исполнять скрипты. Этот режим также позволяет использовать opcache. За счет этих двух факторов, динамика отдается значительно быстрее чем при CGI, однако есть небольшое отставание по статике (ведь теперь при любом запросе загружается интерпретатор php). Отсюда и появилась некогда популярная связка Nginx + Apache + mod_php. Nginx быстро отдает статику, а Apache динамику.

Минус тот же, что и при CGI — php-скрипты запускаются с привилегиями пользователя веб-сервера. Надо признаться, что способ разделить пользователей всё же существует suPHP.

FastCGI

Это более продвинутый и быстрый CGI. При использовании FastCGI сервер не создает для каждого запроса новый процесс, а использует один из заранее подготовленных и ожидающих процессов. Этот режим позволяет гибко настраивать взаимодействие: кол-во процессов, срок жизни, время исполнения и прочее.

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

Пример скрипта-обертки:


#!/bin/sh

# Кол-во запросов для одного процесса. 
PHP_FCGI_MAX_REQUESTS=10000
export PHP_FCGI_MAX_REQUESTS

# Запуск интерпретатора.
exec /usr/bin/php-cgi

За счет разделения статики и динамики этот режим создает меньшую нагрузку на оперативную память и позволяет быстрее отдавать статику, чем mod_php. Использование opcache также возможно. Минус тот же: разделение пользователей процессов и доступов + некоторая сложность оптимальной настройки. Тем не менее, FastCGI в чистом виде почти не используется в наши дни, потому что существует более оптимальный php-fpm.

PHP FPM

Менеджер процессов php — это служба, которая создана специально для того, чтобы исполнять php код и отдавать результат серверу через интерфейс FastCGI. Он полностью берет на себя заботу на поддержку процессов, opcache и главное: запускается под отдельным пользователем! А значит веб-серверу больше не нужно тратить ресурсы на создание динамики. Его задача только обратиться к php-fpm и отдать результат пользователю.

Наиболее популярная связка на сегодня это Nginx + Php-fpm обладает высокой производительностью и позволяет отдавать статику и динамику быстро. В ней отсутствуют минусы, характерные для CGI, mod_apache и чистого FastCGI. Это режим потребляет больше памяти, однако выигрыш от его использования значителен — правильно настроенный php-fpm вместе в Nginx способен обрабатывать до 10 000 rps (запросов в секунду).

Как узнать какой режим используется?

Если вы используете хостинг или машину настраивали не вы, может потребуется время, чтобы узнать какой режим взаимодействия сервера и php используется. Самый быстрый способ это изучить phpinfo или распечатать значение константы PHP_SAPI.

Итоги

За многолетнею историю php, способов его работы и взаимодействия с сервером придумали огромное кол-во. Я рассмотрел самые основные. Многое не вошло в этот обзор по причине окончательного устаревания или, будучи новыми подходами, могло быть сложным для начинающих разработчиков (для которых создан этот сайт) и создать не нужную кашу из знаний и странных слов.

CGI — один из наиболее раритетных из оставшихся в живых. Не советую его использовать.
Apache mod_php — прост в установке и настройке. Обладает хорошей производительностью для небольших проектов.
FastCGI — почти не используется.
Php-fmp — максимально производительный и надежный. В связке с Nginx отлично справляется с нагрузкой на больших проектах.

Полезные ссылки

  • Докер-файл для опытов с Apache cgi.
  • Докер-среда для запуска больших проектов: Php7.4-fpm, nginx 1.18, mysql 5.7, composer и node js .

Все статьи

Инструкция по настройке и использованию PHP и IIS на Windows Server 2016

IIS (Internet Information Services) — это службы интернета для ОС Windows. Включают в себя веб-сервер, ftp-сервер и другие компоненты. Применительно к веб-серверу IIS используется как синоним, что немного неправильно, однако достаточно распространено. В данной инструкции Мы будем настраивать веб-сервер IIS с поддержкой php. Это будет делаться в два этапа — сначала установим IIS, потом поставим PHP.

Так как веб-сервер входит в службы IIS (Internet Information Services), необходимо предварительно установить роль “Веб-Сервер (IIS)”. Для этого нажмите комбинацию клавиш Win+R для запуска командной строки и введите туда servermanager.

Далее запустить мастер установки ролей и компонентов нажав кнопку “добавить роли и компоненты”.

Выйдет страница приветствия на которой можно просто нажать “вперед”, а также поставить галочку “Пропускать эту страницу по умолчанию”, если вы не хотите постоянно видеть эту страницу при запуске мастера установки ролей и компонентов.

Далее ОС уточнит что именно вы хотите сделать — просто добавить роли и компоненты или установить службы удаленного доступа. Выберем установку ролей и компонентов.

Далее спрашивается на какие сервера устанавливать роли и компоненты. У вас может быть несколько серверов и они могут быть объединены в пул для централизованного управления с одной консоли. Также роль может быть установлена на виртуальный жесткий диск. Выберем интересующий нас сервер и нажмем далее.

На этом этапе необходимо выбрать роль, которую мы желаем установить на выбранный нами на предыдущем шаге сервер. В данном случае это роль “Веб-сервер (IIS)”.

Далее ОС предложит дополнительно установить необходимые компоненты — следует согласиться, нажав кнопку добавить компоненты.

Далее выводится информационное сообщение о том что такое роль iis.

Служба IIS — большой продукт, включающий в себя множество различных компонентов, поэтому далее потребуется указать какие именно компоненты следует установить — нас интересует веб-сервер. Остальные компоненты можно оставить как есть или отключить, если не хотите ставить лишние компоненты. Оставим также и консоль управления.

После выбора компонентов выведется финальное предупреждение о том, что роль IIS готова к установке. Нажмите установить. Можно также поставить галочку “Автоматический перезапуск конечного сервера, если требуется” чтобы не перезапускать сервер вручную. Следует иметь ввиду, что нажатие этой галочки перезапускает конечный сервер после установки без дополнительных предупреждений, поэтому используйте ее с осторожностью.

После нажатия кнопки установить запустится процесс установки, можно закрыть это окно нажатием кнопки закрыть. Следует иметь ввиду, что это действие не отменяет процесс установки, а только скрывает текущее окно.

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

В данном случае мы видим что установка уже завершена. Можно приступать к настройке.

Для настройки перейдем в оснастке “диспетчер сервера” во вкладку IIS, выберем сервер и нажмем правую кнопку мыши. Выбираем из него “Диспетчер служб IIS”. Слева в дереве подключений находим наш сервер и разворачиваем его двойным щелчком мыши. Встаем на закладку “Сайты” и видим что сайт по умолчанию уже настроен.

.Для проверки достаточно в проводнике windows набрать http://<имя компьютера> после чего должна открыться тестовая страница iis.

Для установки PHP воспользуемся установщик Microsoft Web Platform Installer 5.0 (WPI), скачать который можно по этой ссылке.

Установим сам инсталлятор. Примем лицензионное соглашение и нажмем install.

Теперь запустим его выбрав в главном меню соответствующий пункт.

В правом верхнем углу введем php для поиска необходимого нам компонента.

Найдем нужную нам версию php — например 7.1.19 (x64) и добавим ее для установки кнопкой “Добавить”.

После этого нажмем кнопку установить внизу страницы.

Согласимся с лицензионными соглашениями нажав кнопку ”Принимаю”.

Начнется загрузка и установка компонентов,

По завершении нажмите кнопку “Готово”. Для проверки cоздадим индексный файл php файл c:\inetpub\wwwroot\index.php выводящий версию php.

После этого удаляем файлы iisstart* из папки c:\inetpub\wwwroot, и проверим что php работает набрав в браузере http://<имя или ip сайта>.

На этом настройка PHP+IIS на Windows Server 2016 окончена. В нашей базе знаний вы найдёте ещё множество статей посвящённых различным аспектам работы в Windows, а если вы ищете надежный виртуальный сервер под управлением Windows, обратите внимания на нашу услугу — Аренда виртуального сервера Windows.

 

Заказать сервер на Windows

Последнее обновление: 17.08.2022

Установка и отладка веб-сервера для сайта в UBUNTU