【发布时间】:2013-08-20 02:46:42
【问题描述】:
我正在尝试将我的 nginx 服务器配置为从 S3 提供根级资产,例如 www.domain.com/favicon.ico。
我认为,但不确定,我应该通过 proxy_pass 来完成此任务。我也被困在位置正则表达式上:
server {
listen 80;
server_name *.domain.com
# This is where I'm trying to catch URLs like /favicon.ico
location ~* /*\.(xml|txt|png|ico)$ { # wrong
proxy_pass http://<s3_bucket>?? # wrong
}
# Everything else goes to gunicorn/Django.
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
【问题讨论】:
-
所以只是一个小问题,使用 nginx 作为代理不会破坏使用 s3 的目的,人们使用 s3 来消除服务器的带宽消耗,并且通过使用 nginx 作为代理你'实际上是加倍而不是删除它( s3 -> nginx -> user ),为什么不让应用程序输出实际的 s3 URL 并且浏览器将处理其余部分?
-
@MohammadAbuShady 这是一个公平的问题。在我的应用程序生成的页面上引用这些资源时,我会按照您的建议进行操作。但是,通常可以直接访问这些资源(favicon.ico、apple-touch*、robots.txt、sitemap.xml 等)。 Django 不是为在生产环境中提供静态文件而设计的,所以我唯一的选择是将这些请求重定向到 S3。事实上,这是我去年发布的一个问题,询问如何在 Heroku 上做到这一点 - stackoverflow.com/questions/11589169/…
-
@MohammadAbuShady(续) 我正在处理一个在真实服务器上运行的不同项目。在这种情况下,据我所知,我可以而且应该通过 nginx 提供这些静态文件。
-
从服务器实际提供服务而不是代理 s3 会不会更便宜?并制定规则将它们从代理中排除到 django