nginx反向代理时报no resolver defined to resolve
错误日志
2024/01/11 05:29:22 [error] 29#29: *44 no resolver defined to resolve www.test.com, client: 127.0.0.1, server: _, request: "GET /test/123 HTTP/1.1", host: "127.0.0.1:8080"
nginx配置
server {
listen 8080;
server_name _;
location ~ ^/test/(.*)$ {
proxy_set_header Host www.test.com;
proxy_pass https://www.test.com/$1;
}
网上搜索说是要手动指定resolver 8.8.8.8,但是此配置是放在docker镜像中的,有些业务地址需要走自己的dns解析,肯定不能写死。于是又去查找能不能让resolver自动读取/etc/resolv.conf,发现需要加脚本。所以我在想,这么基础的功能需要配置的这么麻烦吗?

好像以前也是直接写域名就可以用的。等等,好像不太一样,这次域名后面加了$1
这种模式下是不是也可以把$1加到域名里呢?此时的域名变成了变量域名,性质发生了变化。
所以这里虽然写的是静态域名,而nginx已经一刀切的认为是变量域名了,从而需要手动指定resolver才能工作。
那得想办法让nginx认为我这个域名不会发生变化,我想到了upstream
upstream test {
server www.test.com:443;
}
server {
listen 8080;
server_name _;
location ~ ^/test/(.*)$ {
proxy_set_header Host www.test.com;
proxy_pass https://test/$1;
}
结果测试成功。
小插曲:
2024/01/11 05:54:37 [error] 454#454: *790 SSL_do_handshake() failed (SSL: error:1408F10B:SSL routines:ssl3_get_record:wrong version number) while SSL handshaking to upstream, client: 127.0.0.1, server: _, request: "GET /test/123 HTTP/1.1", upstream: "https://193.169.203.141:80/123", host: "127.0.0.1:8080"
发现proxy_pass在以https方式访问80口,是因为upstream默认使用80端口,手动指定即可
upstream test {
server www.test.com:443;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix