我是 nginx 新手并试图实现以下行为:我想将标头传递给 nginx,并根据给定的标头将请求传递给另一台服务器。我想从文件中加载我的地图,所以我使用以下代码
worker_processes 1;
error_log logs/error.log;
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"';
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
map $http_dest $new_server{
include port_to_address.map;
default google.com;
}
server {
listen 200;
server_name localhost;
access_log logs/host.access.log main;
location / {
proxy_pass http://$new_server;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
使用以下格式的 port_to_address.map
value_1 yahoo.com;
value_2 neflix.com;
使用此配置,nginx 正常启动,但是当我将文件中存在的标头传递给他时,他返回以下错误
2021/04/18 21:52:49 [error] 17352#20504: *3 no resolver defined to resolve yahoo.com, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", host: "localhost:200"
当我使用 IP 地址而不是服务器名称时,它可以正常工作。我还得到了另一个 nginx,即它从文件(带有上游)读取的节点之间的循环请求,尽管我使用服务器的名称而不是它们的 ip,但我没有得到任何异常。
我阅读了有关使用解析器的信息,但它不起作用,我更愿意避免使用它。有没有其他方法可以在不使用解析器或服务器 ip 的情况下使其工作?(如果需要,我不介意更改地图文件结构)