因为用 uptimerobot 监控着,每天都收到邮件,所以能估计每天掉线的时间。每天都在大约 12:05-12:25,浮动三两分钟的样子。访问失败的原因是 connection timeout 。
网站程序是 apache,运行自己写的 PHP+Mysql 程序,放在腾讯云上,刚才访问失败期间去排查了下,有以下几个现象:
现在没有头绪,不知是啥问题,请各位指教。
1
redford42 2021-08-15 17:07:16 +08:00
你的站点被别人访问的时候挂掉
还是别人的网站你的服务去访问的时候会挂掉呢 |
2
hefish 2021-08-15 18:00:17 +08:00
换 nginx 吧。
|
3
nowheretoseek OP @redford42 我的站挂掉,并且基本是每天按时挂掉,跟有无人访问关系并不大,毕竟流量很小。
|
4
nowheretoseek OP @hefish 一直没来得及学会 nginx 的配置,apache 学的早比较习惯了,希望先解决这个问题。
|
5
hefish 2021-08-15 20:17:06 +08:00
因为没有更具体的信息,建议还是自行谷歌来解决。
我谷歌下来,都说是 apache 2.2 与 2.4 配置的差别。因为不清楚具体配置,所以无法进一步判断。 |
6
ysc3839 2021-08-16 10:22:26 +08:00
“同 IP 上的某静态小站”是同一个端口吗?
出现 connection timeout 个人怀疑是服务商封端口了,因为用户模式的程序似乎制造不出无回应的效果。要不然是没监听端口,或者监听了但不 accept,内核在 SYN 阶段直接发个 RST,错误会是 connection refused 。要不然是连接建立后发送 RST,错误会是 connection reset 。 |
7
nowheretoseek OP @ysc3839 是同 80 端口,apache 下不同的 virtual host 。监控邮件显示”The monitor is currently DOWN (Connection Timeout)“
|
8
nowheretoseek OP @hefish 谷歌过,没找到类似描述的问题,用 2.4 很久了,配置模板也一直用,用了好几个地方,就这个出问题。
|
9
ysc3839 2021-08-16 17:08:21 +08:00
@nowheretoseek 那说明监控程序的报告有问题,建议自己访问看看是什么错误。
|
10
hefish 2021-08-17 10:18:35 +08:00
贴一下 <VirtualHost /> 部分的配置吧
|
11
nowheretoseek OP @ysc3839 中午问题重现时 curl 连接了以下,等了很久报错:`curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to xxx.com:443`
|
12
nowheretoseek OP @hefish 分了两部分,80 端口和 443 端口的,80 的自动跳到 443,并且 www 的自动跳到主域名;再就是为了减少恶意爬虫骚扰,用了个 https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker,以下是完整配置,去除了注释:
``` # xxx.conf <VirtualHost *:80> Protocols h2 h2c http/1.1 ServerName xxx.com ServerAlias www.xxx.com ServerAdmin webmaster@localhost DocumentRoot /var/www/html/xxx/public <Directory /var/www/html/xxx/public> Header set Access-Control-Allow-Origin * Options -Indexes +FollowSymLinks Include /etc/apache2/custom.d/globalblacklist.conf DirectoryIndex index.php AllowOverride All Require all denied </Directory> ErrorLog ${APACHE_LOG_DIR}/xxx_error.log CustomLog ${APACHE_LOG_DIR}/xxx_access.log combined RewriteEngine on RewriteCond %{SERVER_NAME} =xxx.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] RewriteCond %{SERVER_NAME} =www.xxx.com RewriteRule ^ https://xxx.com%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost> # xxx-le-ssl.conf <IfModule mod_ssl.c> <VirtualHost *:443> ServerName www.xxx.com RewriteEngine on RewriteCond %{SERVER_NAME} =www.xxx.com RewriteRule ^ https://xxx.com%{REQUEST_URI} [END,NE,R=permanent] SSLCertificateFile /etc/letsencrypt/live/xxx.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/xxx.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> <VirtualHost *:443> Protocols h2 h2c http/1.1 ServerName xxx.com ServerAdmin webmaster@localhost DocumentRoot /var/www/html/xxx/public <Directory /var/www/html/xxx/public> Header set Access-Control-Allow-Origin * Options -Indexes +FollowSymLinks Include /etc/apache2/custom.d/globalblacklist.conf DirectoryIndex index.php AllowOverride All Require all denied </Directory> RewriteEngine on RewriteRule .* - [E=REQ:%{THE_REQUEST}] ErrorLogFormat "[%{u}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client %a] %M% ~ Referer: %-{Referer}i ~ Request: %{REQ}e ~ UserAgent: %{User-Agent}i" ErrorLog ${APACHE_LOG_DIR}/xxx_error.log CustomLog ${APACHE_LOG_DIR}/xxx_access.log combined SSLCertificateFile /etc/letsencrypt/live/xxx.com-0001/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/xxx.com-0001/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule> ``` |
13
nowheretoseek OP 行首的空格没了,pastebin 发了一下: https://pastebin.com/Mr94f31q
|
14
nowheretoseek OP |
15
ysc3839 2021-08-17 16:30:36 +08:00
@nowheretoseek curl 加上 -vv 参数看输出什么,以及有试过在服务器本地访问吗?
|
16
nowheretoseek OP @ysc3839 就是在运行站点的服务器测试的,明天中午加-vv 试试。
|
17
nowheretoseek OP |
18
nowheretoseek OP 在手动运行备份任务十几分钟后,收到无法连接的监控邮件了,不清楚为什么有这么长时间的延迟,服务器端备份进程还在继续,本地监控的下载速度一直稳定在 120-160k 之间,可能是锁表什么的吧。无论如何问题明确了,hoory !感谢提供排查思路。
@nowheretoseek @redford42 @hefish @ysc3839 |