Недавно я переключился с 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.
Не могли бы вы дать дополнительную информацию о:
Также попробуйте добавить простой 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?