| настройка кеширующей nginx-прокси (reverse)Вводная
О правильный директивах кеширования на стороне web-сервера я уже писал.
Как оказалось, применяие nginx в качестве акселератора (reverse proxy) для имеет свои особенности.
По умолчанию nginx в режиме proxy просто игнорирует директивы управления кешированием ETag и Cache-Control, передаваемые между web-сервером
(например, apache) и клиентом. В результате динамический контент перестает обновляться.
Также, часть данных есть смысл отдать статически, тоже не забыв указать параметры кеша.
Ниже приведен фрагмент конфига, учитывающий сразу все необходимое.
 SettingsApache
На переносим web-сервер на внутренний сетевой интерфейс и другой порт, он будет недоступен снаружи.
httpd.conf, apache.conf 
#Listen *:80
Listen 127.0.0.1:8000
#Listen *:443
Listen 127.0.0.1:8443
 Nginx
В основном когфиге декларируем виртутальные хосты и использемые порты и протоколы. Поддержка IPv6 включается отдельной директивой.
Также есть смысл принудительно переводить клиентов на https (см. rewrite)
nginx.conf 
    # cache settings
    proxy_cache_path /var/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g 
                 inactive=60m use_temp_path=off;
    # HTTP
    server {
        #ipv6 support
        listen [::]:80;
        listen       80;
        #server_name  my.site.net;
        # here we allow ALL server names for virtual hosts support
        server_name  ~^.*$;
        # force redirect to https
        #rewrite ^ https://$http_host$request_uri? permanent;
        #access_log  /dev/null;
        access_log  /var/log/my-nginx.log;
        include my-cached-site.conf;
    }
    # HTTPS
    server {
        #ipv6 support
        listen [::]:443 ssl;
        listen       443 ssl;
        #server_name  my.site.net;
        server_name  ~^.*$;
        include https.conf;
        #access_log  /dev/null;
        access_log  /var/log/my-nginx.log;
        include my-cached-site.conf;
    }
    ssl_certificate      /etc/ssl/apache/my_site.crt;
    ssl_certificate_key  /etc/ssl/apache/my_site.key;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
Обработка различных секций сайта. Эти настройки одинаковы для http и https, поэтому выносим их в отдельный include-файл.
Здесь указан корневой каталог для статических файлов, фильтры, настройки проксирования и кеширования динамического контента
для разных разделов сайта. Порядок следования секций location значения не имеет, выбирается наиболее соответствующая запросу.
Для proxy-запросов нельзя использовать регулярные выражения в условии. Подробнее почитать о директиве location есть смысл на
www.digitalocean.com
и
www.keycdn.com
my-cached-site.conf 
	root /var/www/my_site/;
#	index index.php index.html;
        # deny what user should not see
        location ^~ /.ht {
            deny  all;
            return 404;
        }
        # forward dynamic content to cache/apache
        location / {
            proxy_pass http://127.0.0.1:80/;
            include cache-proxy_pass.conf;
        }
        location /images/img.php {
            proxy_pass http://127.0.0.1:80/;
            include cache-proxy_pass.conf;
        }
        # handle static content with proper cache settings
        location /css/ {
	  expires 1M;
	  access_log /dev/null;
	  add_header Cache-Control "public";
        }
        location /js/ {
	  access_log /dev/null;
	  add_header Cache-Control "public";
        }
        location /images/ {
	  expires 1y;
	  access_log /dev/null;
	  add_header Cache-Control "public";
        }
        location ~* \.(xml|m3u|ico)$ {
	  expires 1d;
	  access_log /dev/null;
	  add_header Cache-Control "public";
        }
Запрещаем gzip, т.к. он не совместим с директивами кеширования и передаем необходимые заголовки
веб-серверу (apache). proxy_set_header - от клиента, proxy_pass_header - к клиенту.
my-cached-site.conf 
    # gzip is not compatible with cache-control/etag
    gzip off;
    proxy_cache alfa_cache;
    proxy_buffering on;
    proxy_cache_revalidate on;
    proxy_cache_min_uses 3;
    proxy_cache_use_stale error timeout updating http_500 http_502
                               http_503 http_504;
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP       $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header If-None-Match $http_if_none_match;
    proxy_set_header If-Modified-Since $http_if_modified_since;
    proxy_pass_header Set-Cookie;
    proxy_pass_header ETag;
    proxy_pass_header Cache-Control;
2018.05.31
 
 
 
See also: 
 
 FB
  or mail alterX@alter.org.ua (remove X)
   
  Share     |