Бродячий докер Nginx Разрешение медленное
У меня возникла небольшая проблема, и я надеюсь, что кто-то сможет объяснить мне, как я могу решить эту проблему с помощью среды разработки.
Я использую MacOS, который использует докер с общими папками и имеет низкую производительность.
Первоначально я использовал промежуточный док-контейнер с унисон-синхронизацией, но у меня были проблемы с ним. (Синхронизация остановлена непредсказуемо без вывода ошибок и т. Д.)
Я создал виртуальную машину, в которой я загружаю докер. В нем у меня есть только минимальная настройка с небольшой конфигурацией php и nginx. (для выполнения генерации кода из среды разработки хоста). Nginx настроен для переадресации https на запросы http из контейнеров Docker. (и избавиться от портов 80xx.
Vagrant не перенаправляет порты и доступен через сервер nginx только через порты 80 и 443.
В Docker у меня есть один самоскомпилированный контейнер nginx (с несколькими плагинами для дополнительных функций, таких как обслуживание сжатых файлов (которые лежат рядом с несжатым содержимым) и т. Д.), Несколько экземпляров php7.1-fpm, работник очереди, база данных master-ведомого mysql и т. Д. Окружающая среда построена как наша производительная система. Для нас важно быть как можно ближе.
Единственным основным отличием является первый nginx, который находится между моим хостом и виртуальной машиной для маршрутизации и т. Д.
В настоящее время моя основная проблема заключается в том, что запрос к первому серверу nginx чрезвычайно медленный, и я не знаю, почему. В Инспекторе Браузера я вижу 6 Состояний Соединения:
- В очереди (0с)
- Несвежий (5-15сек)
- Разрешающий домен (5-30 с)
- Запрос отправлен (0.000077s)
- Ожидание ответа (0,2 с)
- Загрузка ответа (0,0009s)
Моя самая большая проблема в настоящее время при работе - это шаги 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 для управления hostfile, так как у меня есть другая среда разработки, которая использует соответствующие доменные имена, но для другой службы (pma...). Я нашел hostmanager полезным, так как он удаляет записи из файла хоста при vagrant stop.
Вот мой hostfile
##
# 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;
}
}
Я принимаю во внимание любые советы для помощи в любом направлении. Я также уже попробовал несколько подходов, но пока не смог решить. Я надеюсь, что кто-то может дать мне подсказку, что мне нужно настроить по-другому. Если вам нужна дополнительная информация, не стесняйтесь спрашивать.
1 ответ
После проверки сетевого трафика с помощью Wireshark я обнаружил проблему. Я выполнил копание на app.dev Я узнал, что ip 127.0.53.53 обнаружен. После изучения Wireshark я обнаружил, что каждый доступ к домену.dev запрашивается на общедоступных DNS-серверах, а не на локальном файле hosts.
Кажется, что с macOS каждый запрос домена.dev вместо проверки файла hosts. В связи с этим запросы занимают очень много времени. Я переключаю все домены на.test