Назад | Перейти на главную страницу

Nginx: случайные пользователи получают сообщение «сервер не найден»

Недавно я переключился с apache на nginx / php-fpm с несколькими сайтами PHP и Django. В какой-то момент некоторые пользователи начали сообщать, что они не могут получить доступ к веб-сайтам и получать «сервер не найден». Они говорят:

Я пытаюсь открыть сайт со своего компьютера и получаю сообщение «сервер не найден». Если я использую другой компьютер на работе или телефон, все в порядке. Мой IP: xxx.xxx.xxx.xxx

Я использовал grep в журнале ошибок, чтобы найти эти IP-адреса, но ничего не получил. Кажется, что когда пользователь «заблокирован» таким образом, он больше не может получить доступ к сайту - он не лечится сам по себе. С другой стороны, более 30 000 человек ежедневно посещают сайты без проблем.

В этих заблокированных вроде нет ничего особенного - разные браузеры, разные подсети. Это не имеет смысла.

Вы можете посоветовать, как диагностировать и исправить эту проблему?

Одна из моих конфигов:

server {
    server_name example.net;
    root /var/www/example/httpdocs;
    index index.php;
    charset utf-8;
    error_log /var/www/example/nginx_error.log;

    # banned users
    include /var/www/example/ban.conf;

    # rewrite rule
    location / {
        if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php?path=$1 last;
        }
    }

    location /admin {
        auth_basic "Restricted";
        auth_basic_user_file  /var/www/example/chronicler/htpasswd;
    }

    # including file with PHP related configuration parameters
    include php_support;
}

ban.conf содержание:

deny 178.49.145.133;
deny 109.237.124.172;
deny 95.24.207.110;

Команда IpTables:

sudo iptables -L -n

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

ОБНОВИТЬ

Проблема заключалась в брандмауэре моего хостинг-провайдера. Людей блокировали и забанивали за SYN-флуд, потому что мой веб-сайт заставлял их выполнять более 50 HTTP-запросов за один раз. Это ужасная ситуация, и мне пришлось провести оптимизацию, чтобы решить ее. Всем спасибо за помощь!

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

Не могли бы вы дать дополнительную информацию о:

  • вы используете свои собственные DNS-серверы?
  • если да, то есть ли там какой-нибудь брандмауэр? журналы, показывающие запросы от проблемных клиентов?
  • попросите клиента попробовать «ping domain.tld», когда возникнет проблема, и посмотрите, каков результат

Также попробуйте добавить простой test.html (только с 'Test' в нем) и попросите пользователей / клиентов также попробовать использовать этот файл (например, http: //domain.tld/test.html). Убедитесь, что к файлу можно получить доступ в обычном режиме без перенаправления.

Таким образом мы можем попытаться убедиться, что проблема не связана с какими-то поддельными внешними ресурсами [которые влияют только на определенных клиентов / IP-адресов].

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

Включен ли у вас какой-либо брандмауэр? Например, csf имеет разделы настроек Port Flood. Может быть, временный запрет IP из-за какой-либо сетевой активности с их IP-адреса является причиной того, что они получают ошибку «сервер не найден».

А как насчет вашего раздела http {} в вашем nginx.conf, любого набора send_timeout (или чего-то подобного? Похоже больше на сетевую проблему, чем на перезапись или что-то в этом роде.

Вы можете попробовать установить эти настройки немного выше:

client_body_timeout   90;
client_header_timeout 90;
keepalive_timeout     90 90;
send_timeout          90;

Вы установили в том же конфигурационном файле такие вещи, как limit_zone? Это может быть проблемой для клиентов с NAT.

Можете ли вы скопировать сюда свой nginx.conf? Еще что-то вроде tcp_nodelay off и / или tcp_nopush on?

Сервер не найден, значит, не удалось разрешить DNS. Проверьте свой DNS. У вас установлены оба www.domain.tld и domain.tld? Отображаются ли IP-адреса в access.log?