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 种连接状态:
- 排队(0s)
- 过时(5-15 秒)
- 解析域(5-30 秒)
- 请求已发送(0.000077 秒)
- 等待响应(0.2s)
- 正在下载响应(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
我遇到了一个小问题,希望有人能告诉我如何用我的开发环境解决这个问题。
我正在使用 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 种连接状态:
- 排队(0s)
- 过时(5-15 秒)
- 解析域(5-30 秒)
- 请求已发送(0.000077 秒)
- 等待响应(0.2s)
- 正在下载响应(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