Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nginx作为反向代理:提供不带扩展名的文件_Nginx_Reverse Proxy_Static Files - Fatal编程技术网

Nginx作为反向代理:提供不带扩展名的文件

Nginx作为反向代理:提供不带扩展名的文件,nginx,reverse-proxy,static-files,Nginx,Reverse Proxy,Static Files,我目前正在使用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\u html/app/storage/cache /home/website/public\

我目前正在使用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\u html/app/storage/cache
/home/website/public\u html/app/storage/views
/home/website/public\u 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;
}
还尝试添加
add_头内容类型应用程序/octet流在这两次尝试中,但没有更改

最后,这里是我的
nginx.conf

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
文件(是的,有一个double/app/,这是正常的;)


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

请注意,我正在使用
try\u 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;
    }
}

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

请注意,我正在使用
try\u 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;
    }
}

请发布您完整的
站点可用/默认
配置文件,我可以帮助您完成完整的配置和回答。当然,我刚刚用它更新了我的帖子。非常感谢。请发布您完整的
站点可用/默认
配置文件,我可以帮助您完成完整的配置和回答。当然,我刚刚用它更新了我的帖子。非常感谢。非常感谢,肉身研磨机。清晰的解释和帮助更好地理解Nginx工作原理的提示。像这样嵌套,文件看起来更符合逻辑!哦,我刚刚在第二个
try_文件中添加了预期的参数,像第一个文件一样添加了“404 if fails”,以及缺少的
过期后参数;)非常感谢,肉身研磨机。清晰的解释和帮助更好地理解Nginx工作原理的提示。像这样嵌套,文件看起来更符合逻辑!哦,我刚刚在第二个
try_文件中添加了预期的参数,像第一个文件一样添加了“404 if fails”,以及缺少的
过期后参数;)