我如何代理传递一个URL在Nginx的位置匹配是一个URL和代理传递有另一个URL

我们在Amazon AWS的S3存储桶中托pipe了一些xml文件。 Web服务器由Nginx提供支持。 对于一个匹配'/super-shots.xml'的特定URL,Nginx必须通过S3位置进行代理传递: http ://mybucket.s3.amazonaws.com/depth0/depth1/depth2/sitemap.xml

我想要的是这个(Nginxconfiguration):

location ~* /super-shots.xml { proxy_pass http://mybucket.s3.amazonaws.com/depth0/depth1/depth2/sitemap.xml; } 

结果是一个错误:

nginx:[emerg]“proxy_pass”不能在正则expression式给出的位置,或者指定位置内,或者if语句内,或者在“limit_except”块内

如果我不做正则expression式匹配(〜* |〜),则没有语法错误,但是页面返回404.请注意,文件在系统path上不存在。

我曾尝试寻找解决scheme,但大多数处理path作为匹配。 我如何解决这个问题?

现在,我已经完成了一个基于path的代理通行证(在下面给出)。 但是,我想要与URL匹配。

 #Nginx Config: location /super-shots { proxy_pass http://mybucket.s3.amazonaws.com/depth0/depth1/depth2/sitemap.xml; } # On file system : Empty directory mkdir $docroot/depth0/depth1/depth2/ nginx -s reload 

更新1:基于Alexey Ten的评论。 Nginxconfiguration示例可以在这里find

你试过简单吗?

 location = /super-shots.xml { proxy_pass http://mybucket.s3.amazonaws.com/depth0/depth1/depth2/sitemap.xml; } 

本地文件系统上不需要任何东西。

你的问题是请求/super-shot.xml匹配location ~* \.(js|ico|...xml...使用=后缀我们告诉nginx这个确切的请求应该在这里处理,它不能寻找其他可能的匹配位置。