我在nginx后面example.com
运行了一个rails。 example.com/foobar
会使用路径/foobar
点击rails应用,这一切都很好。
我想要添加的是example.com/spa/*
从远程服务器加载特定文件(在这种情况下是s3存储桶,但这并不重要)。
所以,我希望nginx能像这样映射:
example.com/ -> rails app with path /
example.com/foo -> rails app with path /foo
example.com/bar?what=ever -> rails app with path /bar?what=ever
example.com/spa -> my-bucket.amazonaws.com/index.html
example.com/spa/foo -> my-bucket.amazonaws.com/index.html
example.com/spa/bar?what=ever -> my-bucket.amazonaws.com/index.html
前三个例子很简单 - 只是
location / {
proxy_redirect off;
proxy_pass http://app_server;
}
(其他地方定义了upstream app_server
)
第二个例子,我不知道该怎么做。
TLDR:如何将特定路径下的所有内容代理到远程服务器上的单个文件/路径?
答案 0 :(得分:1)
使用:
location ^~ /spa {
rewrite ^ /index.html break;
proxy_pass ...;
}
除非您在同一级别有一些正则表达式位置,否则可能不需要^~
修饰符。它会使此前缀位置优先。有关详细信息,请参阅this document。
rewrite ... break
导致在当前位置块内处理修改后的URI。有关详细信息,请参阅this document。