Vagrant Docker Nginx解析缓慢

时间:2017-01-16 07:05:04

标签: nginx docker vagrant parallels

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

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

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

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

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

在docker中我有一个自编译的nginx容器(有几个插件用于附加功能,如服务压缩文件(位于未压缩内容旁边)等),几个php7.1-fpm实例,队列工作者,mysql主从数据库等 环境就像我们的生产系统一样。 尽可能接近我们的重要性。

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

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

  1. 排队(0s)
  2. 陈旧(5-15s)
  3. 解析域名(5-30s)
  4. 请求已发送(0.000077s)
  5. 等待回复(0.2秒)
  6. 下载响应(0.0009s)
  7. 我目前正在工作的最大问题是第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非常有用,因为它会在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;
        }
    }
    

    我会在任何方向上考虑任何建议。 我也已经尝试了几个approches但到目前为止还无法解决它。 我希望有人能给我一些线索,我需要配置不同的东西。 如果您需要更多信息,请不要犹豫。

1 个答案:

答案 0 :(得分:1)

使用Wireshark检查网络流量后,我发现了问题。 我在app.dev上执行了挖掘,我认识到检测到了ip 127.0.53.53。 在查看Wireshark之​​后,我发现每次访问.dev域都会被查询到公共DNS服务器而不是本地主机文件。

似乎用macOS每次查询.dev域而不是检查hosts文件。 由于此请求需要额外的普通长。 我将所有域名切换为.test