1 из ~ 150 клиентов сервера (в разных местах и с разными сетевыми настройками) не перенаправляется через мою службу apache. Мне нужно знать, в чем проблема, но я не могу ее понять.
Все клиенты обращаются к виртуальному хосту и отправляют одинаковые запросы к прокси:
<VirtualHost *:80>
ServerName update.***.tld
ServerAdmin mail@company.tld
CustomLog /var/log/apache2/update.***.tld_access.log combined
ErrorLog /var/log/apache2/update.***.tld_error.log
# redirect all http request to https
RewriteEngine on
Options +FollowSymLinks
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
</VirtualHost>
<VirtualHost *:443>
ServerName update.***.tld
LogLevel warn
SSLEngine on
SSLCertificateFile /etc/ssl/certs/wildcard.***.tld.cert
SSLCertificateKeyFile /etc/ssl/private/wildcard.***.tld.key
SSLCertificateChainFile /etc/ssl/certs/wildcard.***.tld.combined.cert
CustomLog /var/log/apache2/update.***.tld_access.log combined
ErrorLog /var/log/apache2/update.***.tld_error.log
TimeOut 3600
KeepAlive On
AddDefaultCharset UTF-8
SSLProxyEngine on
ProxyPreserveHost Off
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
ProxyTimeout 15
ProxyRequests Off
ProxyPass / https://***-***-prod.aws.tld/
ProxyPassReverse / https://***-***-prod-prod.aws.tld/
<Proxy *>
AddDefaultCharset UTF-8
Require all granted
</Proxy>
</VirtualHost>
tcpdump на поврежденном клиенте:
tcpdump -i eth0 -vvv host update.***.tld > dump
https://gist.github.com/herz0g/e02ef883688c904667164a175955ecc0
Я предполагаю, что это проблема в сети на стороне клиента, иначе это не сработало бы для 150 других клиентов, но я не уверен, как это доказать или что можно было бы отладить дальше.
Как упоминал @PatrickMevzek, это не проблема сети или DNS. Я проверил логи с включенным уровнем отладки и заметил эту ошибку:
[Fri Jul 24 12:33:11.463639 2020] [ssl:info] [pid 9792:tid 139651482162944] [client clientip:26294] AH01964: Connection to child 441 established (server default.virtual.host:443)
[Fri Jul 24 12:33:11.463917 2020] [ssl:debug] [pid 9792:tid 139651482162944] ssl_engine_kernel.c(2096): [client clientip:26294] AH02043: SSL virtual host for servername update.***.tld found
[Fri Jul 24 12:33:11.612839 2020] [core:debug] [pid 9792:tid 139651482162944] protocol.c(1158): [client clientip:26294] AH02427: Request header value is malformed: TOKEN ******\r
[Fri Jul 24 12:33:11.612873 2020] [core:debug] [pid 9792:tid 139651482162944] protocol.c(1318): [client clientip:26294] AH00567: request failed: error reading the headers
Похоже, что мой файл конфигурации на клиенте был испорчен по какой-либо причине, но содержимое в файле было таким же, как и у других моих агентов, а также права и владелец были правильными. Я удалил файл и создал новый. Сейчас все работает.
Спасибо, что указали мне правильное направление.
На самом деле вы частично отвечаете на свой вопрос:
когда я отправляю wget от клиента на свой прокси-сервер на порт 443, он правильно перенаправляется на виртуальный хост и регистрируется в моем настраиваемом журнале
У вас возникла проблема с неправильным перенаправлением Apache, потому что вы полагаетесь на явный номер порта, а это не очень часто.
RewriteCond% {SERVER_PORT}! ^ 443 $
Это предполагает, что у клиента нет номера порта в URI вызова API, и когда он отсутствует, происходит сбой.
Попробуйте изменить конфигурацию перенаправления в Apache на предложение в этом ответ