【问题标题】:Nginx as reverse-proxy: serving files without extensionNginx 作为反向代理:提供没有扩展名的文件
【发布时间】:2013-06-23 09:59:22
【问题描述】:

我目前正在使用 Nginx 和 Apache,成功地提供了以下静态文件

摘自我的/sites-enabled/default:

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|txt|xml)$ {
root /home/website/public_html/app/public;
}

但我也有一些缓存文件位于此处: /home/website/public_html/app/storage/cache /home/website/public_html/app/storage/views /home/website/public_html/app/storage/sessions

/cache/sessions 也有子目录。所有子目录和文件的文件名都是随机的,没有扩展名。

我希望 Nginx 也提供这些文件。

我试过这个(/views 文件夹的例子),但没有成功。我什至没有任何日志,但 Nginx 正确重启,网站加载没有错误。

location /views {
             alias /home/website/public/app/app/storage/views;
             access_log /var/log/nginx/web.views.access.log;
             error_log /var/log/nginx/web.views.error.log;
}

也试过了,效果和上面一样:

location ~* ^.$ {
             root /home/website/public/app/app/storage/views;
             access_log /var/log/nginx/web.views.access.log;
             error_log /var/log/nginx/web.views.error.log;
}

还尝试在这 2 次尝试中添加 add_header Content-Type application/octet-stream;,但没有任何变化。

最后,这是我nginx.conf的http部分

http {
include       /etc/nginx/mime.types;
access_log  /var/log/nginx/access.log;

sendfile        on;

keepalive_timeout  65;
tcp_nodelay        on;

gzip  on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

/var/log/nginx/access.log/var/log/nginx/error.log 也没有显示与我的问题相关的任何内容)。

感谢任何线索和帮助!

编辑

完成当前/sites-enabled/default文件(是的,有一个双/app/,这很正常;))

# You may add here your
# server {
#   ...
# } 
# statements for each of your virtual hosts

server {

listen   80; ## listen for ipv4
listen   [::]:80 default ipv6only=on; ## listen for ipv6

server_name  www.website.com website.com;

#access_log  /var/log/nginx/localhost.access.log;

location / {
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;        
proxy_pass http://127.0.0.1:8080/;
    access_log off;
    #root   /var/www;
    #index  index.html index.htm;
}

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|txt|xml)$ {
  root /home/website/public_html/app/public;
  expires 30d;
}


location ~* ^.$ {
    add_header Content-Type application/octet-stream;
    root /home/website/public/app/app/storage/views;
    access_log /var/log/nginx/bt.views.access.log;
    error_log /var/log/nginx/bt.views.error.log;
}

}

【问题讨论】:

  • 请贴出你完整的sites-available/default配置文件,我可以帮你比完整的配置和答案。
  • 当然,我刚刚用它更新了我的帖子。谢谢!

标签: nginx reverse-proxy static-files


【解决方案1】:

问题是,您需要一些东西来识别没有任何扩展名的文件。请求中始终存在的子目录或其他内容。您的正则表达式仅匹配以点开头的请求(例如http://example.com/.)。以下服务器配置假定所有 URL 都以 storage 开头,因为这是识别这些文件的唯一可能性。

请注意,我使用try_files 指令重写了 nginx 应该在其中查找文件的内部路径。 root 指令并不适用于您想要实现的目标。

最后但同样重要的是,您应该始终使用正则表达式嵌套位置块。嵌套级别没有限制。 nginx 将创建某种树数据结构来搜索最佳匹配位置。所以在写积木的时候想一棵树。

server {
    listen        80 default;
    listen        [::]:80 default ipv6only=on;
    server_name   www.website.com website.com;
    root          /home/website/public_html/app;

    location / {

        # Matches any request for a URL ending on any of the extension
        # listed in the regular expression.
        location ~* \.(jpe?g|gif|css|png|js|ico|txt|xml)$ {
            expires     30d
            access_log  off;
            try_files   /public$uri =404;
        }

        # Matches any request starting with storage.
        location ~* ^/storage {
            access_log  /var/log/nginx/bt.views.access.log;
            error_log   /var/log/nginx/bt.views.error.log;
            try_files   /app$uri;
        }

        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header  X-Forwarded-For $remote_addr;
        proxy_set_header  Host $host;        
        proxy_pass        http://127.0.0.1:8080/;
        access_log        off;
    }
}

【讨论】:

  • 非常感谢,Fleshgrinder。清晰的解释和提示,以帮助更好地理解 Nginx 的工作原理。像这样嵌套,文件对我来说似乎更合乎逻辑!哦,我刚刚在第二个try_files 中添加了预期的参数,就像你在第一个中一样添加了“404 if failed”,以及在过期参数之后缺少的; ;)
猜你喜欢
  • 2021-03-09
  • 2023-04-09
  • 2018-10-19
  • 2018-02-04
  • 2015-03-10
  • 2013-11-25
  • 2018-10-29
  • 2021-02-25
  • 1970-01-01
相关资源
最近更新 更多