Wpis z mikrobloga

Używa ktoś może Laravela 5/5.1 na Nginx? (najlepiej 1.8)

Mam problem z keszowaniem zuploadowanych obrazków. Po dodaniu np. takiego wpisu do konfigu:

# Media: images, icons, video, audio, HTC
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
expires 1M;
access_log off;
add_header Cache-Control "public";
}

laravel przestaje mi pokazywać wrzucone obrazki.

Pełny config:

server {
listen 80;
server_name moja.strona.pl;

access_log /var/log/nginx/moja.strona.pl.log;
error_log /var/log/nginx/moja.strona.pl-error error;

root /var/www/moja,strona.pl/public;
index index.php index.html;

### root directory ###
location / {
#try_files $uri $uri/ /index.php?$args;
try_files $uri $uri/ /index.php?$query_string;

}

### security ###
error_page 403 =404;

### security ###
location ~* ^/uploads/.*.(html|htm|shtml|php)$ {
types { }
default_type text/plain;
}
### disable logging ###
location = /robots.txt { access_log off; log_not_found off; }
location = /favicon.ico { access_log off; log_not_found off; }

### php block ###
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
fastcgi_split_path_info ^(.+\.php)(.*)$;
}

location ~ /\.ht {
deny all;
}
}

Będę wdzięczny za wszelką pomoc!

#webdev #laravel #sysadmin
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

2015/06/15 15:25:24 [error] 13130#0: *4 open() "/var/www/moja.strona.pl/public/admin/upload/get/php3dv49M.jpg" failed (2: No such file or directory), client: 193.0.122.203, server: moja.strona.pl, request: "GET /admin/upload/get/php3dv49M.jpg HTTP/1.1", host: "moja.strona.pl", referrer: "http://moja.strona.pl/"

tylko to wyrzuca
  • Odpowiedz
tak. jak nie ustawię cache wszystko śmiga. dopiero po dodaniu tego location takie numery robi

EDIT: a nie, przepraszam. laravel sam sobie takie linki generuje. ja mam pliki w "/var/www/moja.strona.pl/storage/app"
  • Odpowiedz
@Dyzajash: Więc działa to inaczej nieco :) bo najpierw do nginx trafia URL: host.pl/upload/get/php3dv49M.jpg który poprzez reguły try_files trafia do bloku location ~* .php$ (bo takiego pliku nie ma na serwerze), Laravel przerabia tą ścieżkę na plik który jest w app/storage.
Dlatego cache możesz dodać jedną z dwóch metod:
1. W Laravelu dopisujesz regułki które po wykryciu pliku jpg/gif/png etc dodają odpowiednie nagłówki HTTP (gdzieś jakiś kontroler od tego musisz mieć, więc
  • Odpowiedz