我需要将 nginx 设置为托管在 DO 空间(S3 类型对象存储)上的静态站点的反向代理。
他们的 s3 的问题是,如果我请求一个没有任何特定文件名的路径名,那么它不会将 index.html 作为默认值(这是我们所期望的)
如果我请求 s3.example.com/some/path/,它会给出错误,而不是在该文件夹中提供 index.html。DO 知道这个问题,但不会很快解决它。
我们陷入困境,因为我们花费了大量的时间和精力来迁移到 DO。我们所有的路径都是这种格式,因为我们是从其他设置迁移而来的。我们希望 s3.example.com/some/path/ 加载 s3.example.com/some/path/index.html - 这是正常的 Web 服务器行为。
nginx 可以作为反向代理吗?无论如何,我们都会在子域前面使用反向代理并执行 proxy_pass,即 example.com/some/path/ 将是 proxy_pass 到 s3.example.com/some/path/ - 这是使用普通的 proxy_pass
我想知道我们是否可以在执行 proxy_pass 时添加 index.html - 但仅限于没有任何文件名的请求。对于那些与某些文件名关联的请求,如 example.com/som/path/image.jpg 或其他 html 或其他文件,我们当然不想添加 index.html。
问题是,很多时候 URL 中没有以 / 结尾的 URL,例如 1 example.com/some/path 或 2 example.com/some/path/
在其他一些情况下,它将是 3 example.com/some/path/ex.html (或 jpg 或其他)
在第一种情况下,我们要添加 index.html 在第二种情况下,添加 /index.html 在第三种情况下,什么也不添加
在这种情况下配置会是什么样子?
先感谢您...
答案1
您可以重写每个以 结尾/
或不包含.
最后一个路径元素的 URI,然后再将其传递给上游服务器。
例如:
server {
...
location / {
...
rewrite ^(.*)/$ $1/index.html break;
rewrite ^(.*/[^./]+)$ $1/index.html break;
proxy_pass ...;
}
}
看这个文件了解详情。