502 Bad gateway, 504 Gateway Timeout. Знакомо? Что делать и кто виноват.
Уверен, что каждый из вас видел такие сообщения в своём браузере, и не раз. Означают они ошибку web-сервера.
Ошибка web-сервера происходит в том случае, когда сервер не может обслужить ваш запрос. Чтобы понять суть этого процесса - я объясню понятными словами как происходит обслуживание запроса.
Для начала я схематично изображу процесс от запроса пользователя и до ответа сервера.
- Канал - это грубо говоря провод, которым сервер подключен к интернету. Ширина канала-грубо говоря сечение провода. Чем больше канал - тем больше пользователей может одновременно подключиться к серверу.
- Web-сервер(ПО) - это программное обеспечение сервера, в которое входит операционная система, веб сервер, интерпритатор, база данных и многое другое.
- Процессор(ЦП) - по большому счёту обыкновенный процессор, как в вашем ПК. Он принимает решение о том, какую информацию прочитать с жесткого диска и как использовать оперативную память.
- Жесткий диск(ПЗУ) - хард, на котором хранятся скрипты, фото, стили, вёрстка и прочая статика.
- Оперативная память(ОЗУ) - быстродействующая память, предназначенная для временного хранения информации для быстрого доступа к ней.
Я нарисовал минимальное количество составляющих сервера, теперь как это работает. Чтобы его обслужить сервер задействует канал, процессор, оперативную память и жесткий диск.
Самый простой пример - вот обратились вы по адресу golos.io - этим самым вы посылаете запрос на сервер.
Ваш запрос идёт по каналу. Допустим, что ширина канала позволяет одновременно пропустить через себя 1000 запросов. Если посетителей больше-то они физически не смогут попасть на сервер и часть из них будет ожидать. пока другие пользователи освободят канал. В такой ситуации сайт начинает тормозить. Вопрос - как долго вы будете ждать своей очереди? Это зависит от вашего браузера(так как он посылает запрос), от вашего ПК, ОС, от интернет провайдера.
Если браузер так и не дождётся своей очереди - он выдаст ошибку "превышено время ожидания ответа" или что-то в этом роде.
Допустим ширина канала достаточна и вы успешно попали на сервер.
В этом случае ПО сервера посмотрит на ваш запрос и решит что-же ему с вами делать. Например вы запрашиваете главную страницу сайта. Для того, чтобы её сгенерировать - серверу нужно обратится к жесткому диску, чтобы найти скрипт. Если жесткий диск откровенно плохой,обслуживает очень много запросов или сильно изношен - он будет работать медленно и вы опять же можете словить тормоза сайта или веб сервер и вовсе не дождётся ответа, тогда вы можете получить ошибку Gateway Timeout. То есть сервер слишком долго пытался обработать запрос. И чтобы ваш запрос не остался висеть на веки вечные - по истечении определённого времени сервер прекращает попытки обслужить запрос. Этот таймаут выставляется в конфигурации ПО.
Так что если вы видите такую ошибку - это не вы виноваты, не надо вам оплачивать более дорогой тариф у вашего интернет провайдера. Попробовать с другого браузера или почистить куки - конечно же тоже не поможет:)
Чтобы снизить нагрузку на жёсткий диск - разработчики перекладывают часть информации в ОЗУ, тем самым ускоряя работу приложения.
Если логика приложения завязана на использовании ОЗУ и ОЗУ так-же плохо работает - вы получаете аналогичную ошибку.
Так-же приложение может опрашивать сторонние сервисы, например ищет цены в других магазинах.
Ошибка Bad gateway - это внутренняя ошибка сервера. Она может быть даже тупо из-за опечатки программиста, который писал приложение. Так же ошибку может выдать неправильная логика работы скриптов. Например программист прописал запрос к несуществующей таблице в базе данных или удалил эту таблицу, а запрос исправить забыл. Ещё может просто закончиться память, к примеру.
Если на сайте было очень много посетителей - то созданная ими нагрузка могла вывести из строя скажем базу данных и тогда все посетители всегда будут получать ошибку.
Да и сотни других причин. Проблема опять же не на стороне посетителя.
Почему же так происходит? Почему 1000 посетителей могут вывести из строя сервер? А 100 посетителей могут? А миллион?
Этот количественный показатель зависит от множества факторов.
Примем, что на сервер поступило 100 запросов(посетителей). Для каждого запроса требуется 10 мегабайт оперативной памяти,50 запросов на считывание с диска и 0,1 секунда процессорного времени(это время, которое потратил процессор сервера на обработку задачи).
Тогда на обслуживание всех запросов уйдёт 10 секунд, 1000 мегабайт ОЗУ и 5000 запросов к жесткому диску. Если мощность сервера укладывается в эти значения с запасом - всё будет работать быстро. Если запросы съедает порядка 70% мощности сервера - то возможны тормоза. Если ресурсов сервера реально меньше - то работать сервер будет очень медленно, а часть запросов он может вообще не обработать.
Собственно в этом и заключается смысл в выборе сервера той или иной конфигурации.
Вообще все ошибки имеют код в виде трёхзначного числа.
- Ошибки с кодом 100-199 - это сообщения информационного характера, по-хорошему это не ошибки даже.
- 200-299 - это код, говорящий об успешном выполнении запроса. Если 200 - то всё отлично.
- 300-399 - говорит о перенаправлении(редирект), то есть сервер не отдаст вам ответ, а говорит о том, что забрать его надо по другому адресу.
- 400-499 - ошибка запроса. Например невалидный запрос, слишком много запросов, отказ в доступе или документ попросту не найден на сервере.
- 500-599 - это уже внутренние ошибки сервера.
Полный список можно посмотреть в Википедии
Можно ли обезопасить себя, купив более мощный сервер - да, можно, но это не панацея.
Лично я пользуюсь VPS от Flops , вот их тарифы, они впринципе как и у любой другой компании, предоставляющей аренду VPS
- Облачный 512 – 1 vCPU / 512 RAM / 16 GB HDD / 30 Gb Traffic – 250 руб./мес.;
- Облачный 1024 – 1 vCPU / 1024 RAM / 32 GB HDD / 60 Gb Traffic – 500 руб./мес.;
- Облачный 2024 – 2 vCPU / 2048 RAM / 64 GB HDD / 90 Gb Traffic – 1 000 руб./мес.;
- Облачный 4096 – 2 vCPU / 4096 RAM / 128 GB HDD / 120 Gb Traffic – 2 000 руб./мес.;
- Облачный 8192 – 4 vCPU / 8192 RAM / 256 GB HDD / 150 Gb Traffic – 4 000 руб./мес.;
- Облачный 16384 – 8 vCPU / 16384 RAM / 512 GB HDD / 180 Gb Traffic – 8 000 руб./мес.
Если хочется просто попробовать как оно - за 250 руб/мес вполне можно взять.