Php управление портом сервера

Настраиваем работу php-fpm на порт или на сокет

Не забываем, что тут всё начинается с решетки, т.е. от суперпользователя. Но что-то пошло не так, и я на выходе получил 502 Bad Gateway. Всё очевидно. Что-то с моими воротами не так, а вот что, не очень понятно. Да, у меня настроена связка php + nginx — я взрослый и с Апачами не вожусь.

Чиним

Потратил относительно много времени, чтобы починиться. Гуглил и саму проблему, что по идее не проблема, а просто nginx почему-то ходит не туда куда надо. Хотя ещё минуту назад с php7.2 он ходил туда же, но ничего не находил. Опуская детали, у меня nginx был настроен вот так

Что как бы намекает, что nginx лезет на 9000 порт, но вот

как бы намекает, что на этом порту у меня нет никого от слова совсем-вообще. А чтобы постичь следующую мудрость мне потребовалось 2 часа моего личного времени.

Как видно из заголовка поста FPM умеет быть в двух разных ипостасях: жить на tcp порту и на сокете (Я не силён в теории сетей, поэтому примем этот факт как аксиому). Для nginx’а нужно было чтобы приемник жил на порту с номером 9000. Технически ему по барабану кто на том конце сидит, он свое дело делает как умеет, пересылает туда куда написано. А вот приемник в лице php-fpm отчего-то не захотел подниматься, хотя когда в прошлый раз настраивал оно как-то само всё заработало без моей помощи… кажется…

Итого. Всякими страшными заклинаниями я постиг истину.

Чтобы php-fpm жил на порту

Нужно в /etc/php/7.3/fpm/pool.d/www.conf писать так

. много строк. listen = 127.0.0.1:9000 . много строк.

Остальные директивы listen либо закомментировать (точка с запятой в начале строки), либо удалить. Тогда верхний конфиг будет работать нормально.

А чтобы php-fpm жил на сокете

Нужно в /etc/php/7.3/fpm/pool.d/www.conf писать так

. много строк. listen = /var/run/fastcgi.sock . много строк.

Скорее всего оно так написано по умолчанию. Ещё рекомендуют раскомментировать

listen.allowed_clients = 127.0.0.1

Типа, чтобы запросы только от локлхоста обрабатывались. При этом в конфигах nginx надо перенаправлять запросы на этот самый сокет

Читайте также:  Адрес почты

Обрати внимание на директиву fastcgi_pass, в первом и втором случае она принципиально отличаются.

Источник

Массив $_SERVER

Описание значений глобального массива $_SERVER с примерами.

Параметры сервера

Имя хоста, обычно совпадает с доменом.

Название и версия сервера.

Версия сервера и имя виртуального хоста, обычно пуста.

Имя и версия используемого HTTP протокола.

Значение из директивы конфигурационного файла Apache.
На хостингах указывают контактный e-mail.

Параметры соединения

Имя сервера, как правило, совпадает с доменом.

IP-адрес, с которого пользователь просматривает текущую страницу.

64.246.37.238 fe80:0:0:0:200:f8ff:fe21:67cf

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

Порт на удаленной машине, который используется для связи с веб-сервером.

Время запроса к серверу в Unix timestamp.

​Время запроса к серверу с точностью до микросекунд.

Пути на сервере

Директория корня сайта, в которой выполняется текущий скрипт.

/home/example.com/public_html

Появился в Apache2, то же самое что и DOCUMENT_ROOT .

Содержит путь, содержащийся после имени скрипта.
Например для адреса http://site.ru/index.php/123 значение будет следующим:

Исходное значение переменной PATH_INFO перед обработкой PHP.

Путь и имя выполняемого скрипта.

​Путь к исполняемому скрипту относительно корня сайта, обычно равен SCRIPT_NAME .

​Абсолютный путь к исполняемому скрипту.

/home/example.com/public_html/index.php

Авторизация на .htpasswd

Метод HTTP аутентификации.

$_SERVER[‘REMOTE_USER’] и $_SERVER[‘PHP_AUTH_USER’]

HTTPS

$_SERVER[‘HTTPS’] , $_SERVER[‘HTTP_X_HTTPS’] , $_SERVER[‘REDIRECT_HTTPS’]

URL

Значения в примерах приведены для адреса http://site.ru/index.php?page=1&sort=2

URI страницы с GET-параметрами, без домена.

Количество элементов массива $_SERVER[‘argv’] .

​Содержит URL страницы без GET-параметров и домена.

Заголовки браузера

Строка, обозначающая браузер и операционную систему, который открыл данную страницу.

Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36

Куки браузера в виде строки: ключ=значение; ключ=значение;.
Данные доступны в переменной $_COOKIE .

_ym_uid=xxx; _ym_d=xxx; PHPSESSID=xxx;

Адрес страницы, с которой браузер пользователя перешёл на текущую страницу.

Содержимое заголовка Accept из текущего запроса.

text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

HTTP заголовок переданный клиентом, говорящий о том какие алгоритмы сжатия он может понять.

​Содержимое заголовка Accept-Language .

Предпочтения клиента относительно кодировки.

Значение заголовка Connection .

Браузер отправляет этот заголовок со значением 1 , выражающий предпочтение клиента для зашифрованного ответа.

Дамп переменной $ _SERVER

Для тестирования, значения массива $ _SERVER для разных клиентов можно скидывать в лог-файл:

file_put_contents(__DIR__ . '/server.log', print_r($_SERVER, true) . PHP_EOL, FILE_APPEND);

Источник

Сокеты: Сервер на PHP

Сокеты: Сервер на PHP

В предыдущей статье я рассказывал про сокеты на PHP. И сказал, что необходимо написать сервер, принимающий запросы и отдающий ответы. И клиента, посылающего запросы к серверу. В этой статье мы разберём код для классического сервера, принимающего число, возводящий его в квадрат и возвращающий результат клиенту.

Читайте также:  Pycharm нет интерпретатора питон

Сразу привожу код сервера на PHP с подробными комментариями:

header(‘Content-Type: text/plain;’); //Мы будем выводить простой текст
set_time_limit(0); //Скрипт должен работать постоянно
ob_implicit_flush(); //Все echo должны сразу же отправляться клиенту
$address = ‘localhost’; //Адрес работы сервера
$port = 1985; //Порт работы сервера (лучше какой-нибудь редкоиспользуемый)
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) //AF_INET - семейство протоколов
//SOCK_STREAM — тип сокета
//SOL_TCP — протокол
echo «Ошибка создания сокета»;
>
else echo «Сокет создан\n»;
>
//Связываем дескриптор сокета с указанным адресом и портом
if (($ret = socket_bind($sock, $address, $port)) < 0) echo "Ошибка связи сокета с адресом и портом";
>
else echo «Сокет успешно связан с адресом и портом\n»;
>
//Начинаем прослушивание сокета (максимум 5 одновременных соединений)
if (($ret = socket_listen($sock, 5)) < 0) echo "Ошибка при попытке прослушивания сокета";
>
else echo «Ждём подключение клиента\n»;
>
do //Принимаем соединение с сокетом
if (($msgsock = socket_accept($sock)) < 0) echo "Ошибка при старте соединений с сокетом";
> else echo «Сокет готов к приёму сообщений\n»;
>
$msg = «Hello!»; //Сообщение клиенту
echo «Сообщение от сервера: $msg»;
socket_write($msgsock, $msg, strlen($msg)); //Запись в сокет
//Бесконечный цикл ожидания клиентов
do echo ‘Сообщение от клиента: ‘;
if (false === ($buf = socket_read($msgsock, 1024))) echo «Ошибка при чтении сообщения от клиента»; >
else echo $buf.»\n»; //Сообщение от клиента
>
//Если клиент передал exit, то отключаем соединение
if ($buf == ‘exit’) socket_close($msgsock);
break 2;
>
if (!is_numeric($buf)) echo «Сообщение от сервера: передано НЕ число\n»;
else $buf = $buf * $buf;
echo «Сообщение от сервера: ($buf)\n»;
>
socket_write($msgsock, $buf, strlen($buf));
> while (true);
> while (true);
//Останавливаем работу с сокетом
if (isset($sock)) socket_close($sock);
echo «Сокет успешно закрыт»;
>
?>

Данный код я постарался тщательно прокомментировать, поэтому, надеюсь, Вам в нём всё понятно. Главное понять следующее: сервер — это непрерывно выполняющийся скрипт, который просто ждёт подключения клиентов. Затем принимающий запрос и на основании этого запроса, возвращающий клиенту ответ. Это самое главное, что Вам необходимо понять.

А в следующей статье мы с Вами напишем клиента на PHP, который и будет подключаться к данному серверу и отправлять различные запросы.

Создано 16.01.2012 14:51:02

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Читайте также:  Add python library windows

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 14 ):

    У меня ошибка, пишет что функции socket_create нет.

    Надо включить эту библиотеку. Для этого в php.ini расскоментируйте строчку: extension=php_sockets.dll, затем перезапустите сервер.

    Надо включить эту библиотеку. Для этого в php.ini расскоментируйте строчку: extension=php_sockets.dll, затем перезапустите сервер. — Вот я всё по инструкции сделал,а оно мне:
    Fatal error: Call to undefined function socket_create() in Z:\home\localhost\www\server.php on line 7

    Дополнительные модули к Денверу установите (скачайте их с http://denwer.ru).

    А что нужно именно скачать,можна ссылку ))

    Дополнительные модули нужно скачать: http://www.denwer.ru/packages/php5.html

    Ваш совет помог мне включить поддержку сокетов на денвере,спасибо!

    После установки дополнительных модулей ошибка сохранилась.

    Все отлично, но вот есть вопрос: здесь если мы получили коннект клиента, то пока он не перестанет слать что либо серверу(здесь пока не пошлет exit), другие клиенты будут как бы в очереди и не будут обрабатываться. Есть варианты одновременной обработки нескольких клиентов?

    Скажите хоть. Надо ли запускать самостоятельно «server.php» или его просто надо разместить и он сам будет непрерывно работать! Опишите пожалуйста, Может из за денвера моего не х..на не работает!?

    Надо запускать и сам он непрерывно работать не будет.

    «Главное понять следующее: сервер — это непрерывно выполняющийся скрипт» Зачем тогда вообще эти сокеты нужны? Где они используются?

    Скажите пожалуйста, а как его запускать. этот сокет сервер на Денвере?

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.

    Источник

    Оцените статью