Ошибка 504 gateway time out — что значит почему она возникает и как ее исправить?

Summary

Your WordPress site can be affected by the 504 Gateway Timeout error because of multiple reasons. In this article, you learned how to troubleshoot them all. Typically, these errors are caused due to server-side issues, in which case you can reach out to your host and get it resolved quickly.

However, you must also understand that this error can be due to third-party plugins, themes, services, inefficient database queries, or a combination of two or more of these. If you’re maxing out your server’s resources (e.g. PHP workers), it’s recommended to optimize your site for performance.

If you still find that your website is timing out, then it might very well be that you need to upgrade your hosting plan or the number of PHP workers. I recommend you to consider this option only after you’ve exhausted all the other solutions described in this article.

From simple static sites to complex ecommerce and membership sites, Kinsta’s scalable hosting plans are designed to accommodate all types of websites. To learn more about our scalable cloud hosting, check out this article!

Did we miss anything? If you’re still finding it difficult to fix the 504 Gateway Timeout error on your WordPress site, leave a comment below.

Save time, costs and maximize site performance with:

  • Instant help from WordPress hosting experts, 24/7.
  • Cloudflare Enterprise integration.
  • Global audience reach with 28 data centers worldwide.
  • Optimization with our built-in Application Performance Monitoring.

All of that and much more, in one plan with no long-term contracts, assisted migrations, and a 30-day-money-back-guarantee. Check out our plans or talk to sales to find the plan that’s right for you.

Очистите кеш DNS.

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

Ошибка тайм-аута может возникнуть, если веб-сайт изменит свой IP-адрес или сервер. Это связано с тем, что кеш DNS направит ваш браузер на старый (или устаревший) IP-адрес. Вы можете решить эту проблему, очистив кеш DNS. Это побудит ваше устройство и браузер получить обновленную информацию DNS при следующем посещении веб-сайта.

Чтобы очистить кеш DNS на Mac, запустите Терминал (перейдите в Приложения> Утилиты> Терминал), вставьте команду ниже в консоль и нажмите Return.

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

При появлении запроса введите пароль вашего Mac и нажмите Return.

Для устройств Windows запустите командную строку (нажмите Windows + X и выберите Командная строка (администратор)), вставьте команду ниже в консоль и нажмите Enter.

ipconfig / flushdns

Nginx

Nginx — это свободный, с открытым исходным кодом, высокопроизводительный HTTP-сервер и прокси-сервер, а также IMAP/POP3 прокси-сервер. В отличие от традиционных серверов Nginx не использует потоки для обработки запросов. Вместо этого он использует гораздо более масштабируемую, управляемую событиями (асинхронную) архитектуру. Эта архитектура под высокой нагрузкой использует небольшой, и главное, предсказуемый объем памяти.

Связка Phalcon + Nginx + PHP-FPM предоставляет мощный набор инструментов, который позволяет добиться максимальной производительности ваших PHP приложений.

Установка Nginx

Nginx — это бесплатный высокопроизводительный HTTP-сервер с открытым исходным кодом и обратный прокси-сервер, а также прокси-сервер IMAP / POP3. В отличие от традиционных серверов, Nginx не использует потоки для обработки запросов. Вместо этого он использует гораздо более масштабируемую управляемую событиями (асинхронную) архитектуру

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

Phalcon с Nginx и PHP-FPM предоставляют мощный набор инструментов, которые обеспечивают максимальную производительность для ваших приложений PHP.

Настройка под Phalcon

Вы можете использовать следующую конфигурацию Nginx для работы с Phalcon, вероятнее всего на вам подойдёт:

server {
    # Порт 80 будет требовать nginx для быть запущен с правами root
    # В зависимости от того, как вы устанавливаете Nginx для использования порта 80,
    # вам нужно будет запустить сервер с `sudo` портами около 1000,
    # не требуются привилегии root
    # listen      80;

    listen        8000;
    server_name   default;

    ##########################
    # В производстве требуется SSL
    # listen 443 ssl default_server;

    # ssl on;
    # ssl_session_timeout  5m;
    # ssl_protocols  SSLv2 SSLv3 TLSv1;
    # ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    # ssl_prefer_server_ciphers   on;

    # Эти местоположения зависят от того, где хранятся сертификаты
    # ssl_certificate        /var/nginx/certs/default.cert;
    # ssl_certificate_key    /var/nginx/certs/default.key;
    ##########################

    # Это папка, в которой находится index.php
    root /var/www/default/public;
    index index.php index.html index.htm;

    charset utf-8;
    client_max_body_size 100M;
    fastcgi_read_timeout 1800;

    # Представляет корень домена
    # http://localhost:8000/
    location / {
        # Matches URLS `$_GET`
        try_files $uri $uri/ /index.php?_url=$uri&$args;
    }

    # Когда HTTP-запрос не соответствует вышеуказанному
    # и файл заканчивается на .php
    location ~ \.php(/|$) {
        # try_files $uri =404;

        # Ubuntu и PHP7.0-fpm в режиме сокета
        # Этот путь зависит от версии установки PHP
        fastcgi_pass  unix:/var/run/php/php7.0-fpm.sock;

        # В качестве альтернативы вы используете PHP-FPM в режиме TCP (обязательно для Windows)
        # Вам нужно будет настроить FPM для прослушивания через стандартный порт
        # https://www.nginx.com/resources/wiki/start/topics/examples/phpfastcgionwindows/
        # fastcgi_pass  127.0.0.1:9000;

        fastcgi_index /index.php;

        include fastcgi_params;
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        if (!-f $document_root$fastcgi_script_name) {
            return 404;
        }

        fastcgi_param PATH_INFO       $fastcgi_path_info;
        # fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        # и установить php.ini cgi.fix_pathinfo=0

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /\.ht {
        deny all;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires       max;
        log_not_found off;
        access_log    off;
    }
}

Запуск Nginx

Обычно запуск производится командой . Но это зависит от метода установки веб-сервера и системного менеджера вашей операционной системы.

Как исправить ошибку 504 Gateway Time out

Перезагрузите веб-страницу, нажав кнопку обновление / перезагрузка, в F5 или повторив URL-адрес из адресной строки.

Несмотря на то, что 504 Gateway Timeout и ошибка 502 Bad Gateway сообщает о неподконтрольной вам ошибке, проблема может быть временной. Просто перезагрузите страницу — это быстро и легко.

Перезапустите все сетевые устройства. Временные проблемы с модемом, маршрутизатором, коммутаторами или другим сетевым оборудованием могут вызывать ошибку 504 Gateway Timeout. Простой перезапуск этих устройств может помочь.

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

Проверьте настройки прокси-сервера в своем браузере или приложении. Убедитесь, что они верны. Неправильные настройки прокси-сервера могут вызвать 504 ошибку.

Подсказка. Смотрите Proxy.org обновленный, проверенный список прокси-серверов, которые можно использовать.

Примечание. Большинство компьютеров не имеют настроек прокси-сервера, поэтому, если ваши настройки пусты, пропустите этот шаг.

Измените DNS-сервер. Возможно, ошибка 504 Gateway Timeout, которую вы видите, вызвана проблемой с DNS-сервером, который вы используете.

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

Подсказка. Если не все сетевые устройства получают ошибку HTTP 504 или 502 error Bad Gateway, но все они находятся в одной сети, изменение DNS-сервера не сработает. Если это похоже на вашу ситуацию, переходите к следующей идее.

Если изменений не произошло, обратитесь к сайту. Это единственное, что вы можете сделать. Велика вероятность, что администраторы сайта уже работают, чтобы исправить первопричину ошибки 504 Gateway Timeout.

На большинстве сайтов есть учетные записи социальных сетей, которые они используют для поддержки. А некоторые даже имеют номера телефонов и адреса электронной почты.

Подсказка. Если начинает казаться, что сайт выдает 504 ошибку для всех, поищите в в режиме реального времени информацию о недоступности сайта. Лучший способ сделать это — найти #websitedown в . Например, если может быть недоступен, выполните поиск по тегу .

  • Обратитесь к своему интернет-провайдеру. Вероятнее всего, что после описанного выше устранения неполадок, выскакивающая 504 Gateway Timeout — это проблема, вызванная неполадками в Сети, за которую отвечает ваш провайдер.
  • Вернуться позже. На данный момент вы исчерпали все варианты, и ошибка 504 Gateway Timeout устраняется администратором сайта или интернет-провайдером.

Регулярно проверяйте сайт. Без сомнения, он снова начнет работать.

Как исправить 504 gateway time out Nginx?

Самый первый вариант — это если вашему серверу, php-fpm или apache не хватает ресурсов системы, например, памяти или процессора. Вы можете посмотреть свободную память с помощью команды free:

Нагрузку на процессор можно узнать командой htop:

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

Второй вариант — это если так и было запланировано, чтобы скрипт работал долго. В таком случае нужно настроить Nginx, чтобы он дождался ответа от Apache или php-fpm. Для решения проблемы в случае с php-fpm нужно только добавить две строчки в блок настройки fastgci:

fastcgi_send_timeout 300; fastcgi_read_timeout 300;

Здесь 300 означает 300 секунд, для большинства скриптов, этого будет вполне достаточно, но вы можете еще больше увеличить значение если это нужно. Также ошибка 504 может возникать, когда Nginx используется в качестве прокси для Apache или любого другого веб-сервера, тогда нужно еще настроить время ожидания для прокси. Добавьте эти строки в секцию server:

proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; send_timeout 600;

Тут уже мы задаем таймаут 600 секунд для различных видов действий — подключения, отправки данных, чтения данных и так далее. После завершения настройки Nginx стоит перезапустить:

sudo systemctl restart nginx

Последний вариант, который мы рассмотрим — это скрипт завис. Если вы сами запускаете скрипт, то сразу увидите что зависло, но если такая ошибка встречается у пользователей, то это уже более серьезная проблема. Вы можете посмотреть встречаются ли вашим пользователям такие ошибки и где они встречаются с помощью команды:

fgrep -i » 504 » /var/log/nginx/access.log

Более подробную информацию иногда можно увидеть в error.log:

fgrep -i » 504 » /var/log/nginx/error.log

Дальше, если проблема именно в php-fpm, вы можете отследить какие скрипты выполняются медленно с помощью встроенной функции slow-log. Для ее активации добавьте следующие строки в конфигурацию вашего пула:

sudo vi /etc/php-fpm.d/www.conf

slowlog = /var/log/php-fpm/www-slow.log request_slowlog_timeout = 5s

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

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

504 (Gateway Time Out) на хостинге

Обычно хостеры не дают менять параметры httpd и php, однако если у вас хороший хостинг, то вам обязательно помогут разобраться с проблемой и в конце концов ваш сайт заработает правильным образом. Кстати, ошибка 504 вполне может возникать из-за «плохого» хостинга и ваши усилия ни к чему не приведут. Кстати, на хостинге beget . Мой всё свое время находится на нём и я не знаю бед.

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

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

What Is the 504 Gateway Timeout Error?

Every time you visit a website in your browser, the browser sends a request to the web server where the site is hosted. The server processes the request and responds with the requested resources.

How HTTP requests and responses work.

The server response includes one of many HTTP status codes to indicate the response’s status to the browser. But not all these HTTP status codes are errors. For instance, a means that the server processed the request successfully and “Everything is OK.”

The indicates that something’s wrong with the server, the server is aware of it, and it cannot carry out the client request. As a result, they’re also referred to as Server Error 5xx status codes.

Officially, five status codes are specified under the 5xx class (, , , , 504). You may come upon many unofficial codes too (, , etc.).

The Internet Engineering Task Force (IETF) defines the as:

To simplify it further, this error occurs when two servers are involved in processing a request. The first server (typically the main server) times out, waiting for a response from the second server (upstream server).

The 504 Gateway Timeout error manifests itself in various forms. Here are some ways it usually shows up:

The ‘HTTP ERROR 504’ in the Chrome browser.

The 504 Gateway Timeout error is similar to the 502 Bad Gateway error, which indicates that the first server received an invalid response from the second server (upstream server).

The ‘504 GATEWAY TIMEOUT’ status code in Chrome DevTools.

Variations of the 504 Gateway Timeout Error

The browser displays any 504 Gateway Timeout error inside it, just like any other error. As there are various operating systems, web servers, browsers, and user agents, it can show up in multiple ways.

Below are a few common 504 error message variations that you may run into:

  • 504 Gateway Timeout
  • 504 Gateway Timeout NGINX
  • NGINX 504 Gateway Timeout
  • Gateway Timeout Error
  • Error 504
  • HTTP Error 504
  • HTTP Error 504 — Gateway Timeout
  • HTTP 504
  • 504 Error
  • Gateway Timeout (504)
  • This page isn’t working — Domain took too long to respond
  • 504 Gateway Time-out — The server didn’t respond in time
  • A blank white screen

All the above error responses, though worded differently, point to the same 504 Gateway Timeout server error.

Web servers and websites can customize how they show the 504 Gateway Timeout error to users. Some of them can be cool! It’s an excellent tactic to quell their visitors’ disappointment.

GitHub’s customized HTTP 504 error page.

SEO Impact of the 504 Gateway Timeout Error

All 5xx errors prevent a webpage from loading, making them detrimental to user experience. Hence, search engines like Google take these errors seriously. If the error persists for a long duration, it may even lead to deindexing the webpage from the search engine results.

For example, when Google spiders stumble upon a 503 Service Unavailable error, they’ll understand that it’s a temporary issue as it’s mostly used to enable site maintenance mode. Thus, they’ll try to crawl the page again later.

A 504 Gateway Timeout error isn’t necessarily temporary as it can be due to multiple reasons. If your site is down for just a few minutes, and if the spiders are trying to crawl it multiple times every minute, they’ll try to serve the page from their cache.  They wouldn’t even notice it.

But if your site is down for 6+ hours or more, then Google will consider the 504 error as a serious site-wide issue that you need to fix as soon as possible. This can impact your SEO negatively.

Viewing the crawl errors in Google Search Console

Google Search Console is one of the best SEO tools to monitor your website’s HTTP 5xx errors.

Causes of the 504 Gateway Timeout Error

As the 504 error is due to a timeout between servers, the problem probably isn’t with the client’s device or internet connection. That also includes your device and connection.

A 504 Gateway Timeout error indicates that the web server is waiting too long to respond from another server and “timing out.” There can be many reasons for this timeout: the other server is not functioning properly, overloaded, or down.

The other server need not always be external (e.g. CDN, API gateway). It can also be a server-like entity within the main web server (e.g. reverse proxy server, database server).

9: Поддержка HTTPS с помощью Let’s Encrypt (опционально)

Теперь нужно создать SSL-сертификаты для сайтов Apache. Получите бесплатные доверенные сертификаты от Let’s Encrypt.

Nginx поддерживает терминацию SSL, потому можно настроить SSL, не изменяя настроек Apache.

Модуль mod_rpaf установит все переменные Apache, необходимые для поддержки SSL.

Для начала создайте для обоих доменов блок server {…}, чтобы у каждого из них был свой сертификат. Откройте /etc/nginx/sites-available/apache:

sudo nano etcnginxsites-availableapache

Отредактируйте файл, создав блок server для foobar.net and test.io:

server {
listen 80;
server_name foobar.net www.foobar.net;
location  {
proxy_pass http//your_server_ip:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 80;
server_name test.io www.test.io;
location  {
proxy_pass http//your_server_ip:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

Сертификаты TLS/SSL можно сгенерировать с помощью Certbot. Его плагин для Nginx автоматически перенастроит веб-сервер и обновит конфиг.

Установите официальный репозиторий Certbot:

sudo add-apt-repository ppacertbotcertbot

Чтобы подтвердить действие, нажмите ввод. Затем обновите индекс пакетов.

sudo apt update

Теперь можно установить Certbot для Nginx:

sudo apt install python-certbot-nginx

Затем используйте команду certbot, чтобы сгенерировать сертификаты для foobar.net и www.foobar.net:

sudo certbot --nginx -d foobar.net -d www.foobar.net

С помощью этой команды Certbot сможет использовать плагин nginx; флаг –d позволяет указать домены, для которых предназначен сертификат.

Если это ваш первый запуск certbot, вам будет предложено ввести адрес электронной почты и согласиться с условиями обслуживания. После этого certbot свяжется с сервером Let’s Encrypt, а затем запустит проверку, чтобы убедиться, что домен, для которого вы запрашиваете сертификат, действительно принадлежит вам.

Затем Certbot спросит, нужно ли настроить HTTPS:

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1 No redirect - Make no further changes to the webserver configuration.
2 Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number 1-2 then enter (press 'c' to cancel)

Сделайте свой выбор и нажмите ввод. Конфигурации обновятся, а Nginx будет перезапущен. Теперь запустите команду для второго домена:

sudo certbot --nginx -d test.io -d www.test.io

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

https//foobar.net/info.php

На появившейся странице найдите раздел PHP Variables. Для переменной SERVER_PORT установлено значение 443, а HTTPS — on, как если бы веб-сервер Apache был напрямую доступен через HTTPS.

Теперь давайте отключим прямой доступ к Apache.

Что значит 504 gateway time out

Обычно ошибка 504 означает ошибку на стороне сервера, однако что делать, если вы единственный, у кого она происходит? Или что делать, если она выходит на всех сайтах? Разберём несколько вариантов решения проблемы с ошибкой 504:

  • Обновите страницу. Причём сделайте это не клавишей F5, а выделив адрес в адресной строке и нажав Enter. Это предотвратит повторную передачу данных и соответственно их обработку;
  • Попробуйте использовать другой браузер. Некоторые данные, хранящиеся в нём, могут вызывать ошибку на стороне сервера. Если это так, чтобы продолжить использовать свой браузер, нужно очистить куки и удалить кэш;
  • Попробуйте очистить кэш DNS;
  • Если это не помогло, сделайте сброс сетевых настроек;
  • Попробуйте другое устройство и другого провайдера; Самый просто вариант не выходя из дома подключиться через к интернету через режим модема на телефоне;

Часто задаваемые вопросы по теме статьи (FAQ)

При использовании https нужно ли в режиме proxy_pass настраивать https и на бэкенде?

В общем случае не обязательно. Но есть некоторый софт, который не может корректно работать в таком режиме. Он не понимает, как корректно обрабатывать такую ситуацию. Может создавать ссылки вида http://site.ru:443, которые будут являться ошибочными. В таком случае необходимо настроить обмен между nginx и бэк сервером тоже https соединение.

Как наиболее простым спосбом передавать сертификат let’s encrypt с nginx на backend? Ведь обновдление и генерация сертификата происходят только на nginx.

Я в таких случаях использую 2 способа, в зависимости от ситуации. Самый простой — на сервере с nginx настроить nfs сервер, а на бэкенде подмонтировать по nfs к себе директорию /etc/letsencrypt и спокойно использовать сертификаты, как-будто они лежат локально. Второй вариант — использовать простой bash скрипт для копирования сертификатов к себе на сервер по scp. В обоих случаях надо не забыть на бэкенде перезапускать службы, которые использую сертификат, после его обновления.

При обращении с бэкенда по адресу сайта, запрос уходит на nginx proxy, так как в dns прописан его ip адрес. Из-за этого иногда не работают встроенные скрипты или проверки некоторых движков, так как они ожидают, что запрос вернется с того же сервера, с которого он был сделан. Но на практике он уходит на proxy и приходит оттуда.

В такой ситуации может помочь правка файла /etc/hosts на самом бэкенде. Сделайте там статическую запись с именем сайта и локальным ip адресом. Тогда запросы с самого сервера будут приходить на него же локально, а не на nginx proxy.

Что лучше использовать для проксирования http запросов nginx или haproxy?

Однозначного ответа на этот вопрос не может быть. В чем-то это схожий софт, но есть и существенные отличия. В общем случае, описанном в статье, принципиальной разницы нет. У haproxy в бесплатной версии есть функционал, который присутсвует только в nginx plus. Так что нужно смотреть по конкретным задачам и решать, какой продукт подойдет лучше.

Добавляет ли nginx в режиме proxy_pass дополнительные сетевые задержки?

Конечно да. Но на практике они очень малы, если nginx и целевой сервер находятся в общей локальной сети. С учетом задержек при передачи пакетов по сети интернет, этими локальными задержками можно пренебречь. Они будут ничтожно малы. Если же вы проксируете запросы через интернет, то нужно внимательно смотреть величину задержек между nginx и бэкендом. Желательно их делать минимальными, располагая сервера поближе друг к другу.

Как это будет работать?

Допустим, у нас есть несколько доменов example.com, sample.org, test.io. Первые два будут обрабатываться Apache, последний только Nginx. Все запросы будут поступать к Nginx, который работает на порту 80, если это запрос к одному из доменов Apache и он требует работы PHP, тогда он будет передан веб-серверу Apache, который работает на порту 8080.

Если же это запрос статического файла, то мы будем обрабатывать его тут же с помощью Nginx для увеличения производительности. Что касается поддержки SSL, то мы собираемся использовать модуль mod_pref чтобы заменить все необходимые заголовки для нормальной работы связки. Начнем с настройки Apache.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: