3

站点几乎完全包含在一个 html 文件中。所有其他文件可能是图像、css 或 javascripts,也可能是 json 文件。

server {

    listen 80;
    server_name git.vosnax.ru;

    location / {
        try_files $uri "/index.html";
        root   /home/sybiam/prod/blog;
        index  index.html;
    }
}

这是我目前的配置,但这并不完美。它会将每个请求重定向到 index.html ,除非该文件存在,这是可以的。

  • 由于某些原因,它删除了 GET 参数。我想保留它们,因为我可以在 javascript 中使用它们。

现在,我想为该站点添加一些持久性。就像使用非常简单的身份验证从服务器保存和加载 json 一样,它支持 GET 和 POST。这意味着我不能使用JSONP.

问题仅在于如何配置 nginx 以将所有请求转发/api/*给我的金字塔 Web 服务器以及其他所有请求到 index.html,除非该文件存在。

我可能可以将服务器托管在不同的域上以使事情变得更容易,但我不知道如何处理跨域请求。CORS旧 IE 不支持。

编辑: 显然查询参数总是可用的,所以这不再是问题了。我的 javascript 在加载时覆盖了路径名并删除了window.location.search.

4

1 回答 1

3

除非文件存在,否则 index.html 的所有其他内容都是try_files您在location /-block 中已经拥有的位

要将/api/*请求仅传递给您的其他服务器,您将以下内容添加到您的服务器块(作为您的location /-block 的兄弟):

location /api/ { 
  proxy_pass http://address_of_server_your_passing_to; 
}

如果您想了解有关在有多个位置块时如何匹配请求的更多信息,请参阅文档

于 2013-03-01T22:44:55.130 回答