Vagrant Docker Nginx Медленное разрешение

У меня возникла небольшая проблема, и я надеюсь, что кто-нибудь может просветить меня, как я могу решить эту проблему с помощью моей среды разработки.

Я использую MacOS, который, если использовать докер с общими папками, имеет низкую производительность.

Первоначально я использовал промежуточный контейнер докеров с унисон-синхронизацией, но у меня были проблемы с ним. (Синхронизация остановилась непредсказуемо, без вывода ошибок и т. д.)

Я создал виртуальную машину, в которой загружаю докер. В нем у меня только минимальная настройка с небольшой конфигурацией php и nginx. (для выполнения генерации кода из среды разработки хоста). Nginx настроен на переадресацию HTTP-запросов из контейнеров Docker. (и чтобы избавиться от портов 80xx.

Vagrant не перенаправляет порты и доступен через сервер nginx только с портов 80 и 443.

В докере у меня есть один самокомпилируемый контейнер nginx (с несколькими плагинами для дополнительных функций, таких как обслуживание сжатых файлов (которые лежат рядом с несжатым содержимым) и т. д.), несколько экземпляров php7.1-fpm, обработчик очереди, главная подчиненная база данных mysql и т. д. Окружающая среда построена подобно нашей продуктивной системе. Нам важно быть как можно ближе.

Единственное основное отличие — это первый nginx, который находится между моим хостом и виртуальной машиной для маршрутизации и т. д.

Моя основная проблема в настоящее время заключается в том, что запрос к первому серверу nginx очень медленный, и я действительно не понимаю, почему. В инспекторе браузера я вижу 6 состояний соединения:

  1. В очереди (0 с)
  2. Несвежий (5-15с)
  3. Разрешение домена (5-30 с)
  4. Запрос отправлен (0,000077 с)
  5. Ожидание ответа (0,2 с)
  6. Загрузка ответа (0,0009 с)

Моя самая большая проблема в настоящее время при работе - это шаги 2 и 3, которые появляются только при первом соединении и каждом текущем соединении, которое задерживается более чем на 1 минуту после последнего запроса.

Чего я также не понимаю, так это того, почему он пытается разрешить домены.

Но обо всем по порядку. Вот часть моей бродячей установки (только важные части:

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
...
    #Network, Port Mapping, Hostname
    config.vm.network                   "forwarded_port", guest: 3306, host: 3306
    config.vm.network                   "forwarded_port", guest: 6379, host: 6379
    config.vm.network                   "private_network", ip: "192.168.56.142"
    config.hostsupdater.aliases         = ["app.dev", "errbit.dev", "redis.dev", "mailcatcher.dev", "pma.dev", "statsd.dev"]
    config.vm.hostname                  =   "docker.test"
...
end

Я использую hostmanager для управления файлом хоста, поскольку у меня есть другая среда разработки, которая использует совпадающие доменные имена, но для другой службы (pma...). Я нашел hostmanager полезным, поскольку он удаляет записи из файла хоста при остановке бродяги.

Вот мой хост файл

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1   localhost
255.255.255.255 broadcasthost
::1             localhost

192.168.56.142  docker.test  # VAGRANT: d8fa44be6d190c05689a5d1e3c0b4281 (default) / ca8de87a-7a95-4c7d-97df-2a1a4d606dad
192.168.56.142  app.dev  # VAGRANT: d8fa44be6d190c05689a5d1e3c0b4281 (default) / ca8de87a-7a95-4c7d-97df-2a1a4d606dad
192.168.56.142  errbit.dev  # VAGRANT: d8fa44be6d190c05689a5d1e3c0b4281 (default) / ca8de87a-7a95-4c7d-97df-2a1a4d606dad
192.168.56.142  redis.dev  # VAGRANT: d8fa44be6d190c05689a5d1e3c0b4281 (default) / ca8de87a-7a95-4c7d-97df-2a1a4d606dad
192.168.56.142  mailcatcher.dev  # VAGRANT: d8fa44be6d190c05689a5d1e3c0b4281 (default) / ca8de87a-7a95-4c7d-97df-2a1a4d606dad
192.168.56.142  pma.dev  # VAGRANT: d8fa44be6d190c05689a5d1e3c0b4281 (default) / ca8de87a-7a95-4c7d-97df-2a1a4d606dad
192.168.56.142  statsd.dev  # VAGRANT: d8fa44be6d190c05689a5d1e3c0b4281 (default) / ca8de87a-7a95-4c7d-97df-2a1a4d606dad
10.211.55.26    docker.test.shared docker.test #prl_hostonly shared

Хост-файл VM Docker nginx:

server {
    listen 443 ssl;
    server_name                 pma.dev;

    ssl_certificate             /vagrant/etc/ssl/server.crt;
    ssl_certificate_key         /vagrant/etc/ssl/server.key;
    ssl_protocols               TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers                 ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES:RSA+3DES:!ADH:!AECDH:!MD5:!DSS;
    ssl_prefer_server_ciphers   on;

    location / {
        proxy_pass http://localhost:8090;
        proxy_set_header Host $host;
    }
}

Я принимаю во внимание любые советы для помощи в любом направлении. Я также уже пробовал несколько подходов, но пока не смог решить эту проблему. Я надеюсь, что кто-то может дать мне понять, что мне нужно настроить по-другому. Если вам нужна дополнительная информация, не стесняйтесь спрашивать.


person Chris West    schedule 16.01.2017    source источник


Ответы (1)


После проверки сетевого трафика с помощью Wireshark я обнаружил проблему. Я выполнил раскопки на app.dev и обнаружил, что обнаружен IP-адрес 127.0.53.53. Изучив также Wireshark, я понял, что каждый доступ к домену .dev запрашивается на общедоступных DNS-серверах, а не на локальном файле hosts.

Кажется, что с macOS каждый запрашивает домен .dev вместо проверки файла hosts. Из-за этого запросы занимают очень много времени. Я переключаю все домены на .test

person Chris West    schedule 12.03.2017