2016-11-20 3 views
1

Я пришел сегодня с проблемой кэширования статических файлов в браузере.Правила перезаписи и истечения срока хранения с Apache/nginx

У меня есть сайт Prestashop на сервере Plesk, работающем с Apache и nGinx.

Prestashop генерирует файл .htaccess с правилами URL-адреса апач перезаписи:

RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$1$2$3.jpg [L] 
RewriteRule ^([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$1$2$3$4.jpg [L] 
RewriteRule ^([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$1$2$3$4$5.jpg [L] 
RewriteRule ^([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg [L] 
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg [L] 
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg [L] 
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg [L] 
RewriteRule ^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg [L] 

И Nginx был создан, чтобы добавить истекающую-заголовок к статическим файлам:

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { 
    expires 30d; 
    add_header Pragma public; 
    add_header Cache-Control "public"; 
    try_files $uri @fallback; 
} 

Это будет работать для статических файлов что их URL не были переписаны Apache:

URL-адрес: http://www.domain.tld/modules/homeslider/images/image_name.jpg

Server: nginx 
Date: Sun, 20 Nov 2016 19:32:33 GMT 
Content-Type: image/jpeg 
Content-Length: 50616 
Last-Modified: Thu, 17 Nov 2016 14:47:22 GMT 
Connection: keep-alive 
ETag: "582dc2fa-c5b8" 
Expires: Tue, 20 Dec 2016 19:32:33 GMT 
Cache-Control: max-age=2592000 
Pragma: public 
Cache-Control: “public” 
Accept-Ranges: bytes 

Но не для изображений продукта, что их URLs были переписал по правилам Apache:

Пример URL: http://www.domain.tld/156-home_default/image_name.jpg

Server: nginx 
Date: Sun, 20 Nov 2016 19:34:11 GMT 
Content-Type: image/jpeg 
Content-Length: 7587 
Connection: keep-alive 
Last-Modified: Thu, 17 Nov 2016 21:14:27 GMT 
Accept-Ranges: bytes 
X-Powered-By: PleskLin 

Вопрос: Как сделать nginx expires-header применяется к файлам, которые были переписаны правилами Apache Rewrite?

Заранее спасибо.

EDIT

управления Сервер обрабатывать с помощью Plesk 12.5.

nGinx используется для обработки статических файлов. Я не знаю много о его конфигурации.

В конфигурации Plesk domain.tld -> nGinx я проверил «Умные статические файлы» и «Подавать статические файлы напрямую nginx». И в «Дополнительные директивы nginx» я добавил код expires-header. Это все изменения, которые я сделал по этому поводу. Это как конфигурация plesk по умолчанию.

RE-EDIT файл конфигурации ВХост

Nginx:

#ATTENTION! 
# 
#DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY, 
#SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED. 

server { 
    listen xxx.xxx.xxx.xxx:443 ssl; 

    server_name domain.tld; 
    server_name www.domain.tld; 
    server_name ipv4.domain.tld; 

    ssl_certificate    /opt/psa/var/certificates/certP286MBP; 
    ssl_certificate_key   /opt/psa/var/certificates/certP286MBP; 

    client_max_body_size 128m; 

    root "/var/www/vhosts/domain.tld/httpdocs"; 
    access_log "/var/www/vhosts/system/domain.tld/logs/proxy_access_ssl_log"; 
    error_log "/var/www/vhosts/system/domain.tld/logs/proxy_error_log"; 

    location/{ 
     proxy_pass https://xxx.xxx.xxx.xxx:7081; 
     proxy_set_header Host    $host; 
     proxy_set_header X-Real-IP  $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     access_log off; 
    } 

    location @fallback { 
     proxy_pass https://xxx.xxx.xxx.xxx:7081; 
     proxy_set_header Host    $host; 
     proxy_set_header X-Real-IP  $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     access_log off; 
    } 

    location ~ ^/plesk-stat/ { 
     proxy_pass https://xxx.xxx.xxx.xxx:7081; 
     proxy_set_header Host    $host; 
     proxy_set_header X-Real-IP  $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     access_log off; 
    } 

    location ~ ^/(.*\.(ac3|avi|bmp|bz2|cue|dat|doc|docx|dts|eot|exe|flv|gz|htm|html|img|iso|mkv|mp3|mp4|mpeg|mpg|ogg|pdf|ppt|pptx|qt|rar|rm|svg|swf|tar|tgz|ttf|txt|wav|woff|woff2|xls|xlsx|zip))$ { 
     try_files $uri @fallback; 
    } 

    include "/var/www/vhosts/system/domain.tld/conf/vhost_nginx.conf"; 
} 

server { 
    listen xxx.xxx.xxx.xxx:80; 

    server_name domain.tld; 
    server_name www.domain.tld; 
    server_name ipv4.domain.tld; 

    client_max_body_size 128m; 

    root "/var/www/vhosts/domain.tld/httpdocs"; 
    access_log "/var/www/vhosts/system/domain.tld/logs/proxy_access_log"; 
    error_log "/var/www/vhosts/system/domain.tld/logs/proxy_error_log"; 

    location/{ 
     proxy_pass http://xxx.xxx.xxx.xxx:7080; 
     proxy_set_header Host    $host; 
     proxy_set_header X-Real-IP  $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     access_log off; 
    } 

    location @fallback { 
     proxy_pass http://xxx.xxx.xxx.xxx:7080; 
     proxy_set_header Host    $host; 
     proxy_set_header X-Real-IP  $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     access_log off; 
    } 

    location ~ ^/plesk-stat/ { 
     proxy_pass http://xxx.xxx.xxx.xxx:7080; 
     proxy_set_header Host    $host; 
     proxy_set_header X-Real-IP  $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     access_log off; 
    } 

    location ~ ^/(.*\.(ac3|avi|bmp|bz2|cue|dat|doc|docx|dts|eot|exe|flv|gz|htm|html|img|iso|mkv|mp3|mp4|mpeg|mpg|ogg|pdf|ppt|pptx|qt|rar|rm|svg|swf|tar|tgz|ttf|txt|wav|woff|woff2|xls|xlsx|zip))$ { 
     try_files $uri @fallback; 
    } 

    include "/var/www/vhosts/system/domain.tld/conf/vhost_nginx.conf"; 
} 
+0

Можете ли вы предоставить более некоторый контекст, как полный URL образца и больше конфигурации Nginx? Кроме того, я предполагаю, что nginx - это запросы на маршрутизацию, когда Apache является восходящим? –

+0

@JanPapenbrock, Спасибо за ваш ответ. Я отредактировал ответ. – JazZ

+0

Оба примера выше имеют ответ «Сервер: nginx», поэтому они обслуживаются nginx. Вам нужно разместить ваше местоположение ~ * \. (Js | css | png | jpg | jpeg | gif | ico) $ {ранее в вашем файле конфигурации nginx, потому что порядок имеет значение. – peixotorms

ответ

1

Я понял, как решить эту проблему. Не большая загадка ...

Я преобразовал правила перезаписи с apache в nginx и игнорировал .htaccess.

Это сделало трюк.

Новые «Дополнительные директивы Nginx»:

# Deny all for hidden files/directory (.htaccess, .htpasswd, etc...) 
location ~ /\. { 
    deny all; 
    access_log off; 
    log_not_found off; 
} 

rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last; 
rewrite ^/([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$1$2$3.jpg last; 
rewrite ^/([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$1$2$3$4.jpg last; 
rewrite ^/([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$1$2$3$4$5.jpg last; 
rewrite ^/([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg last; 
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg last; 
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg last; 
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg last; 
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg last; 
rewrite ^/c/([0-9]+)(\-[\.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2$3.jpg last; 
rewrite ^/c/([a-zA-Z_-]+)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last; 
rewrite ^/images_ie/?([^/]+)\.(jpe?g|png|gif)$ /js/jquery/plugins/fancybox/images/$1.$2 last; 
try_files $uri $uri/ /index.php$is_args$args; 
error_page 404 /index.php?controller=404; 

location ~* \.(gif)$ { 
    expires 2592000s; 
} 
location ~* \.(jpeg|jpg)$ { 
    expires 2592000s; 
} 
location ~* \.(png)$ { 
    expires 2592000s; 
} 
location ~* \.(css)$ { 
    expires 604800s; 
} 
location ~* \.(js|jsonp)$ { 
    expires 604800s; 
} 
location ~* \.(js)$ { 
    expires 604800s; 
} 
location ~* \.(ico)$ { 
    expires 31536000s; 
} 
location ~* \.(woff)$ { 
    expires 2592000s; 
} 
Смежные вопросы