我最近将几个 PHP 和 Django 网站从 apache 切换到 nginx/php-fpm。在某个时候,一些用户开始报告他们无法访问网站并收到“找不到服务器”的提示。他们说:
我尝试从我的电脑打开网站,但出现“找不到服务器”的情况。如果我通过工作时的其他电脑或手机访问,则一切正常。我的 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 请求。这是一个可怕的情况,我不得不进行优化来解决这个问题。谢谢大家的帮助!
答案1
您是否启用了任何类型的防火墙?例如,csf 有一个端口洪水设置部分。也许由于他们的 IP 上的某种网络活动而导致的临时 IP 禁令是他们收到“找不到服务器”错误的原因。
答案2
这听起来确实像是 DNS 服务问题,在我的实践中我还没有看到过与 DNS 以外的其他事物相关的这个问题。
您能否提供更多有关以下方面的信息:
- 您使用自己的 DNS 服务器吗?
- 如果有的话,那里有任何类型的防火墙吗?日志显示来自有问题的客户端的请求?
- 当问题发生时,让客户端尝试“ping domain.tld”,看看结果是什么
还可以尝试添加一个简单的 test.html(其中仅包含“测试”),并让用户/客户也尝试访问此文件(例如http://domain.tld/test.html)。确保文件可以正常访问,而无需强制进行某些重定向。
这样,我们可以尝试确保问题与某些虚假的外部资源无关(这些资源仅影响某些客户端/ip)。
答案3
这可能只是一般的网络问题。您遇到问题的用户之间是否存在地理相似性?我在澳大利亚,我与上一个主机也遇到过类似的问题,但这不是他们的错,因为中间的网络。在这种情况下,除了尝试联系导致问题的网络之外,您实际上能做的不多,但这可能或多或少取决于他们是谁。
答案4
未找到服务器意味着 DNS 解析失败。请检查您的 DNS。您是否同时设置了 www.domain.tld 和 domain.tld?这些 IP 是否出现在 access.log 中?