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

Доказательство проблем с DNS / сетью в клиентской сети

Проблема

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 на предложение в этом ответ