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;
}
posted @   shn7798  阅读(188)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示