我目前正在使用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;
}
还尝试在这两次尝试中添加add_header Content-Type application/octet-stream;
,但没有更改。
最后,这是我的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
档(是的,有一个双/ 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;
}
}
答案 0 :(得分:0)
问题是,您需要一些东西来识别没有任何扩展名的文件。子目录或始终存在于请求中的内容。您的正则表达式仅匹配以点开头的请求(例如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;
}
}