2015-10-31 4 views
3

Один из сайтов, которые я хочу реализовать кэширование браузера для изображений имеет этот конкретный сервер {} блок на virtual.confNginx приносит 404 не найден

server { 

    listen  80; 
    server_name www.example.net example.net; 

    location/{ 
     root /var/www/example.net/public_html; 
     index index.html index.htm index.php; 
    } 

    error_page 404    /404.html; 
    location = /404.html { 
     root /var/www/example.net/public_html; 
    } 

    # redirect server error pages to the static page /50x.html 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /var/www/example.net/public_html; 
    } 

    location ~* \.(jpg|jpeg|png|gif)$ { 
     expires 180d; 
    } 

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
    location ~ \.php$ { 
     root   /var/www/example.net/public_html; 
     error_log  /var/www/example.net/public_html/error.log error; 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include  fastcgi_params; 
    } 
} 

Обычно эта директива

location ~* \.(jpg|jpeg|png|gif)$ { 
     expires 180d; 
    } 

Должен заботиться о кешировании изображений на стороне пользователя. Но вместо этого, когда я получаю изображение на моем сайте, я получаю 404 не найден. Я не знаю, почему это я вызвал.

Да. Я перезагрузил/перезапустил nginx после добавления директивы.

изображение находится в папке, как:
example.net/images/dir1/user_photos/photo.jpg
или
example.net/images/dir1/user_photos/photo.jpg

Любые помощь будет оценена. Спасибо.

+0

У меня такая же проблема - если я удалить директиву, он показывает файлы, и если я добавлю его снова, то через некоторое время я снова получу проблему 404. Вот подробности моей проблемы: http://stackoverflow.com/questions/33495113/getting-404-for-static-files-on-nginx-with-caching-enabled – user1658296

+0

Умеете ли вы решить это? У меня такая же проблема в Digital Ocean. Пожалуйста, дайте мне знать, как вам удалось заставить его работать. – Larrydx

ответ

1

Параметр Root должен находиться вне директивы местоположения.

Это не лучшая практика, чтобы иметь корни в месте

Изменить

location/{ 
     root /var/www/html; 
     index index.php index.html index.htm; 
     try_files $uri $uri/ /index.php?$args; 
} 

To:

root /var/www/html; 
location/{ 
     index index.php index.html index.htm; 
     try_files $uri $uri/ /index.php?$args; 
} 
+1

Имейте ту же проблему, что и OP, но мой корневой параметр находится вне директивы местоположения. – Larrydx

Смежные вопросы