Nginx upstream превышает время ожидания (110: Неизвестная ошибка)

Вопрос или проблема

Я владею игровым сервером (Counter Strike 2) на Ближнем Востоке. Я пытаюсь настроить веб-панель для него, которая размещена в Европе на VPS с Ubuntu 22. На этом сайте есть инструмент, который позволяет выполнять удалённые команды на игровом сервере с сайта, используя протокол RCON от Source.

Сайт использует PHP (Laravel). Когда я пытаюсь использовать консоль RCON на сайте для выполнения команд, я получаю ошибку Nginx 504 – истечение времени ожидания шлюза.

Лог Nginx показывает следующее:

2024/12/25 22:21:34 [error] 1431#1431: *2081 upstream timed out (110: Unknown error) while reading response header from upstream, client: 88.196.213.143, server: some.domain.com, request: "GET /servers/1/players HTTP/1.1", upstream: "fastcgi://unix:/run/php/php8.3-fpm.sock", host: "some.domain.com", referrer: "https://some.domain.com/"

Сначала я подумал, что, возможно, есть проблема с подключением между VPS в Европе и моим игровым сервером, поэтому я установил rcon-cli на своем VPS в Европе, и с его помощью смог успешно подключиться к игровому серверу. В результате я пришел к выводу, что проблема связана только с инструментом RCON на PHP.

Поскольку многие люди используют эту веб-панель и не имеют проблем, у меня есть сомнения, что с кодом что-то не так. Единственное, что приходит мне в голову, это моя конфигурация Nginx.

Вот мой конфигурационный файл site.conf для Nginx:

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    server_name some.domain.com;
    root /var/www/html/aim1/public; ##<----ЭТО ФАКТИЧЕСКИЙ ПУТЬ 

    ssl_certificate     /root/cert/some.domain.com/fullchain.pem;
    ssl_certificate_key /root/cert/some.domain.com/privkey.pem;

 
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
 
    index index.php;
 
    charset utf-8;
 
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
 
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }
 
    error_page 404 /index.php;
 
    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_hide_header X-Powered-By;
    }
 
    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Может кто-то помочь мне избавиться от этой ошибки Nginx?

Ответ или решение

Решение проблемы с ошибкой Nginx "upstream timed out (110: Unknown error)"

Ошибка Nginx "504 Gateway Timeout" (или "upstream timed out") может возникать по разным причинам, и её диагностика может занять некоторое время. Давайте разберем вашу ситуацию, учитывая все представленные сведения.

Описание проблемы

Вы являетесь владельцем игрового сервера Counter Strike 2, размещенного на сервере в Ближнем Востоке, и парой веб-панели, хостящейся в Европе на VPS под управлением Ubuntu 22. Ваша панель использует PHP (Laravel) и выполняет команды на игровом сервере с помощью протокола RCON. При попытке выполнить команды через веб-панель появляется ошибка Nginx 504 Gateway Time-out, что указывает на проблему с взаимодействием между вашим веб-сервером и приложением.

Анализ логов Nginx

Лог ошибки:

2024/12/25 22:21:34 [error] 1431#1431: *2081 upstream timed out (110: Unknown error) while reading response header from upstream, client: 88.196.213.143, server: some.domain.com, request: "GET /servers/1/players HTTP/1.1", upstream: "fastcgi://unix:/run/php/php8.3-fpm.sock", host: "some.domain.com", referrer: "https://some.domain.com/"

Эта строка указывает на то, что Nginx не получал ответ от PHP-FPM в течение установленного времени ожидания. Возможно, это связано с тем, что запросы к API RCON выполняются слишком долго, и PHP-FPM не успевает ответить на них.

Потенциальные решения

Вот несколько направлений для решения вашей проблемы:

  1. Увеличение времени ожидания:
    Возможно, текущие настройки времени ожидания (timeout) слишком низкие. Параметры fastcgi_read_timeout и proxy_read_timeout можно увеличить. Добавьте следующие строки в секцию вашего конфигурационного файла Nginx:

    location ~ \.php$ {
       fastcgi_pass unix:/run/php/php8.3-fpm.sock;
       fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
       include fastcgi_params;
       fastcgi_hide_header X-Powered-By;
    
       # Увеличение времени ожидания
       fastcgi_read_timeout 300;
    }
  2. Проверка логов PHP-FPM:
    Обратите внимание на логи PHP-FPM, которые могут дать дополнительные сведения о том, почему выполнение ваших команд через RCON занимает много времени или выдает ошибку. Это можно сделать, проверив настройки логирования в конфигурационном файле /etc/php/8.3/fpm/pool.d/www.conf.

  3. Оптимизация кода Laravel:
    Если увеличение времени ожидания не помогло, рекомендую тщательно проверить код веб-приложения, отвечающего за выполнение RCON-команд. Убедитесь, что ваши асинхронные запросы и обработка ответов происходят эффективно. Использование адекватных методов кэширования может также ускорить процесс.

  4. Тестирование запроса:
    Попробуйте выполнить команду RCON через консольный клиент на вашем VPS, как вы уже делали. Сравните время отклика с веб-версией и убедитесь, что разница существенна. Если да, возможно, проблема действительно связана с обработкой в PHP.

  5. Настройки сети и безопасности:
    Проверьте настройки брандмауэра и сети на обоих серверах (игровом и VPS). Возможно, существует проблема с временными задержками или фрагментацией пакетов, которые могут вызывать тайм-ауты.

Заключение

Ошибка Nginx 504 Gateway Timeout может иметь множество причин. Важным шагом будет систематическая диагностика и устранение потенциальных проблем. Начните с увеличения времени ожидания и изучения логов, а затем проверяйте код и сетевые настройки. Эти шаги помогут вам добиться более стабильной работы вашего веб-приложения и устранить проблему с тайм-аутами.

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

Оцените материал
Добавить комментарий

Капча загружается...