Vagrant Docker Nginx 解析缓慢

Vagrant Docker Nginx Resolving slow

我遇到了一个小问题,希望有人能告诉我如何用我的开发环境解决这个问题。

我正在使用 MacOS,即,我们使用 docker 共享文件夹,性能很差。

我最初使用了一个具有一致同步的中间 docker 容器,但遇到了问题。 (同步停止不可预测,没有任何错误输出等)

我创建了一个虚拟机并在其中启动 docker。 在其中,我只有一个带有小型 php 和 nginx 配置的最小设置。 (用于从主机开发中执行代码生成 IDE)。 Nginx 配置为从 docker 容器内转发 https 到 http 请求。 (并摆脱 80xx 端口。

Vagrant 不转发任何端口,只能通过 nginx 服务器从端口 80 和 443 访问。

在 docker 我有一个自编译的 nginx 容器(有几个插件用于提供压缩文件(位于未压缩内容旁边)等附加功能),几个 php7.1- fpm instances, queue worker, mysql 主从数据库等。 环境就像我们的生产系统一样构建。 对我们来说,尽可能靠近是很重要的。

唯一的核心区别是第一个 nginx 位于我的主机和 vm 之间,用于路由等。

我的核心问题是目前对第一个 nginx 服务器的请求非常慢,我真的不知道为什么。 在浏览器检查器中,我可以看到 6 种连接状态:

  1. 排队(0s)
  2. 过时(5-15 秒)
  3. 解析域(5-30 秒)
  4. 请求已发送(0.000077 秒)
  5. 等待响应(0.2s)
  6. 正在下载响应(0.0009 秒)

我目前最大的工作问题是第 2 步和第 3 步,它们只出现在第一个连接中,每个正在进行的连接在最后一个请求后延迟超过 1 分钟。

我也不明白为什么它会尝试解析域。

但要事第一。 这是我的 vagrant 设置的一部分(只有重要的部分:

# -*- 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 很有用,因为它会在 vagrant 停止时从主机文件中删除条目。

这是我的主机文件

##
# 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;
    }
}

我会考虑任何方向的帮助建议。 我也已经尝试了几种方法,但到目前为止无法解决。 我希望有人能给我一个线索,我需要配置不同的东西。 如果您需要更多信息,请随时询问。

使用 Wireshark 检查网络流量后,我发现了问题。 我在 app.dev 上执行了一次挖掘,我发现检测到 IP 127.0.53.53。 在查看 Wireshark 之后,我发现每次访问 .dev 域时都会在 public dns 服务器而不是本地主机文件上进行查询。

似乎在 macOS 中,每个查询都曾经是 .dev 域,而不是检查主机文件。 由于这个请求需要额外的普通时间。 我将所有域切换为 .test