Nginx反向代理自身实现CDN
源站:103.213.xxx.xxx bbs.xiaoz.org ,hosts可以访问
具体的配置如下:
server
{
listen 80;
server_name bbs.xiaoz.org;
location / {
resolver 101.37.xxx.xx;
proxy_pass http://bbs.xiaoz.org;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
已经在101.37.xxx.xx
安装dnsmasq指定hosts回源到103.213.xxx.xxx
指定了resolver让101.37.xxx.xx
来解析bbs.xiaoz.org,但是提示[emerg] host not found in upstream
,dig测试解析是生效的,但为什么nginx还是无法启动?
Nginx反向代理配置中,如果resolver
参数指定的host
无法找到,可能有以下几种原因:
配置错误:在server blocks
或upstream
配置中,host
参数与resolver
参数冲突。例如,server blocks
配置中可以使用host
参数指定主机,而在upstream
配置中可能需要使用resolver
参数来指定主机的DNS服务器。如果host
参数与resolver
参数冲突,Nginx将抛出host not found
错误。
DNS解析问题:如果你的host
参数指定的主机不在DNS解析时被解析到,那么Nginx将无法找到该主机对应的URL。例如,如果host
参数指定的主机为example.com
,但是你的系统中并没有这个主机,Nginx将无法找到对应的URL。
DNS缓存问题:如果你的主机正在被缓存,Nginx可能会将相同的URL重复解析到同一个主机上,导致重复解析。你可以使用resolver
参数的check
或timeout
参数来限制解析次数,例如:
server blocks {
server {
location / {
proxy_pass http://resolver.example.com;
proxy_set_header Host $host;
}
}
}
这样,Nginx将只解析resolver.example.com
一次,其他请求将被解析到resolver.example.com
,而不是重复解析。
服务器设置问题:如果你的resolver
参数设置为null
或localhost
,那么Nginx将默认使用localhost
作为host
参数,这可能会导致解析错误。在这种情况下,你需要确保resolver
参数设置为一个可以解析到主机的DNS服务器。
配置问题:在server blocks
或upstream
配置中,upstream
配置中需要包含host
参数的完整路径。例如:
server blocks {
server {
location / {
proxy_pass http://upstream.example.com;
proxy_set_header Host $host;
}
}
}
这样,upstream.example.com
是host
参数的完整路径,包括主机名和域名。
以上就是可能的原因和解决方法,你可以根据具体情况进行排查和配置。如果仍然无法解决,可能需要查看Nginx的日志,查看错误信息或查看nginx.conf
文件,定位可能的问题。