让Nginx通过当前位置

时间:2018-10-03 04:10:12

标签: nginx nginx-location nginx-reverse-proxy

我有nginx反向代理到IIS上的站点,这是我的nginx配置:

更新

upstream backend  {
  server 43.128.77.101;
}

server {
  server_name domain.subdomain.com;   

  location /products {
    if ($query_string ~ Jeans){
      return 301 /get-all-products/?filter=jeans;
    }
    if ($query_string ~ Shirts){
      return 301 /get-all-products/?filter=shirts;
    }
    if ($query_string ~ Hats){
      return 301 /get-all-products/?filter=hats;
    }
  }

  location / {  
    proxy_pass  http://backend;

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }   
}

它通过查询字符串从/products页重定向到某些URL。但是对于页面/products-available,它失败并显示错误404。Nginx错误日志包含错误:

  

“ / usr / share / nginx / html / products-available”失败(2:无此类文件或目录)

页面/products-available不需要任何重定向。我希望它按原样传递到后端IIS服务器上。如何告诉nginx通过它?我在做什么错了?

谢谢。

1 个答案:

答案 0 :(得分:1)

这是因为您只为给定路径(/产品)定义了Nginx的行为。

如果要为与/ products路径不匹配的Nginx请求定义默认行为(例如/ products-available),可以在当前位置部分之后添加以下内容,以将其他任何路径请求代理到其他应用程序/端口。

location / {
    proxy_pass http://127.0.0.1:3000;
}

您可以在https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/#passing-a-request-to-a-proxied-server

中查看有关向其他应用程序发送请求的更多信息。