Nginx - 反向代理尝试通过 IP 而不是域名访问后端

Nginx - 反向代理尝试通过 IP 而不是域名访问后端

我正在尝试在 nginx 中设置反向代理来提供静态内容。我在正确设置时遇到问题;以下是我的 nginx 配置:

server {
    listen       80;
    server_name  mysub.domain.com;
    access_log off;

   resolver 8.8.8.8 valid=5s;
   set $backend "www.originaldomain.com";
   location / {

      proxy_cache my_cache;
      proxy_pass https://$backend;
   }
}

如果我尝试通过 mysub.domain.com 访问 originaldomain 的资源,它将不起作用。如果我看到错误日志,则似乎 nginx 正在向 originaldomain 的 IP 请求资源,如下所示;

2018/06/09 17:47:13 [crit] 9825#0:*111 mkdir()“/store/cache/1”读取上游时失败(13:权限被拒绝),客户端:112.123.121.11,服务器:mysub.domain.com,请求:“GET /path/to/image.png HTTP/1.1”,上游:“https://101.181.11.120:443/路径/到/image.png", 主机: "mysub.domain.com"

而通过IP查找image.png时,是找不到的,要正确下载资源,需要通过域名而不是IP来查找。

有任何想法吗?

提前致谢。

答案1

nginx 只能连接到 IP 地址,这就是 TCP/IP 的工作方式。

你需要在location /节中添加一行

proxy_set_header Host $backend;

将该标题行传递到后端。

我也会调查该mkdir() "/store/cache/1" failed (13: Permission denied)错误。要么为缓存文件配置另一个位置,要么/store/cache为 nginx 正在运行的 ID 创建适当的权限。

相关内容