11 关于 nginx: [emerg] host not found in upstream “cdn.optimizely.com“ in nginx.con
·
前言
呵呵 这是最近帮助同事 搭建 pageplug 的时候碰到的一个问题, 当时 我觉得还蛮奇怪, 为什么启动服务 需要去验证访问 cdn.optimizely.com ?
然后 需要花点时间 看一下这个问题, 稍微梳理一下
然后 也发现了 自己理解的的一些问题, 这里并没有去 验证访问 cdn.optimizely.com, 只是尝试去解析 cdn.optimizely.com 的地址信息, 没有获取到 然后 nginx 报错了而已
测试用例
复现的方式很简答, 关闭 wifi 然后 使用如下配置文件启动 nginx
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 2;
#keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name 127.0.0.1;
location / {
proxy_pass http://127.0.0.1:3000;
}
location /favicon.ico {
proxy_pass http://127.0.0.1:3000/favicon.ico;
}
location /f {
proxy_pass https://cdn.optimizely.com/;
}
location /api {
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_pass http://127.0.0.1:8085;
}
location /oauth2 {
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_pass http://127.0.0.1:8085;
}
location /login {
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_pass http://127.0.0.1:8085;
}
location /data-gl {
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_pass https://echarts.apache.org/examples/data-gl;
}
}
}
然后 启动项目报错如下

问题的调试
问题 相对比较简单 我们省略掉一些 不相关的 步骤
可以看到的是 当前是在解析 nginx.conf 的阶段, 在初始化 upstream 相关
然后 这里需要尝试使用 getaddrinfo 函数获取地址信息, 然后 没有获取到, 因此走了 host not found 的相关流程

问题的解决
1. hosts 中增加 cdn.optimizely.com 的映射配置
2. 在 dns 中增加 cdn.optimizely.com 的相关配置
3. 解决掉机器 网络连接的问题
4. 如果这个 cdn.optimizely.com 的相关资源没有那么重要, 则丢弃这部分资源, 去掉对应的 block 或者 cdn.optimizely.com 更新为 127.0.0.1
5. 如果这个 cdn.optimizely.com 的相关资源比较重要, 则将这部分资源部署在机器能够访问的地方, 然后更新这部分服务的配置
完
更多推荐
所有评论(0)