NGINX 重定向而不是代理

NGINX 重定向而不是代理

有几个问题类似,但最相似的问题没有答案,其余的问题都有混淆因素。之前工作正常的 nginx 的部署是重定向而不是代理。nginx.conf 的相关部分如下所示;

location /timesheets/ {
      gzip on;
      gzip_types    text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
      gzip_proxied   any;
      gzip_min_length 1000;
      gzip_comp_level 2;
      gzip_http_version 1.0;
      gzip_buffers 16 8k;

      gunzip on;
      gzip_static on;
      # Disable for IE < 6 because there are some known problems
      gzip_disable "MSIE [1-6].(?!.*SV1)";
      # Add a vary header for downstream proxies to avoid sending cached gzipped files to IE6
      gzip_vary on;

      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://timesheetserver.fqdn.com.au:8216$request_uri;
  proxy_intercept_errors on;
}

当通过 server_name 部分的 URL 访问服务器时,timesheetserver 端口 8216 上的内容应该被代理到它们。由于某种原因,它向 proxy_pass 服务器回复 302,并且由于用户无法访问端口 8216,因此它失败了。这是什么原因造成的?

更新:如果 index.html 遗漏在末尾,它会向 proxy_pass 服务器发送 302 错误。如果 index.html 是手动附加的,它会正常工作。我添加了 index index.html; 指令,但它似乎无法处理遗漏的文件 - 我该如何解决?

答案1

  1. 确认访问http://时间服务器:8216从你的 nginx 反向代理服务器使用 curl、wget 等。
  2. 如果您想要使用名称(而不是 IP 地址)进行 proxy_pass,请在 http、server、location 块中定义具有有效 ipv6 选项的解析器指令(DNS 服务器)。
  3. 附加定义 resolver_timeout 指令。

location /timesheets/ {
      # http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver
      resolver 127.0.0.1 valid=30s ipv6=off;
      # http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver_timeout
      # give up and response error 
      resolver_timeout 5s;
      ### your existing configuration :-)
}

最好使用 FQDN(完全限定域名)进行反向代理timesheetserver

参考: http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver

相关内容