【问题标题】:Nginx - Forward root-level URL (eg, favicon.ico) to Amazon S3?Nginx - 将根级 URL(例如 favicon.ico)转发到 Amazon S3?
【发布时间】: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

标签: nginx amazon-s3 config


【解决方案1】:

使用 proxy_pass 是正确的。如果您有问题,您可以将错误日志设置为调试级别以跟踪问题。从跟踪日志中,您应该关注两点:

  1. /*\.(xml|txt|png|ico)$ 是否符合您的要求?
  2. 传递的url是否正确并访问成功?

【讨论】:

    猜你喜欢
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 2019-05-23
    • 2014-03-12
    • 1970-01-01
    相关资源
    最近更新 更多