Задать вопрос
@ElevenCalibre

Как реализовать выборочное кэширование в NGINX?

Приветствую, я не профессионал в администрировании, поэтому ищу помощи здесь, надеюсь добрые люди помогут. Совсем скоро должен быть открыт сайт, куда будет резкий приток пользователей, для обеспечения стабильности я решил использовать NGINX в режиме caching (другие предлагаемые в Vesta cp: default, hosting, http2). Именно в этом режиме при запуске виртуальных пользователей сервер показывает лучшие результаты отклика и не падает.
Но, я столкнулся с проблемой, сайт находится в стадии разработки и доступен только по паролю, но если я включаю кеширование, эта защита обходится, я так понимаю всем пользователям выдает загруженную мной страницу в обход авторизации.

Я бы хотел также исключить директорию администратора от кэширования, вписывая в конфиг:

location /administrator {
add_header Cache-Control no-cache;
expires -1;
}
получаю ошибку старта NGINX Error: nginx failed to start with new config

что я делаю не так? каким образом реализовать выборочное кэширование директорий и запрашивать пользователя вводить авторизационные данные, а не выдавать уже уже готовую страницу игнорируя обход авторизаиции? Исправьте меня пожалуйста, если ошибки в конфиге или иду неправильным путем, готов предоставить дополнительную информацию о сервере или других конфигах, если таковы нужны, спасибо!

CMS Joomla / Php 7.4.15 / CGI-FastCGI / nginx 1.18.0 2cores 4gb ram

настройки nginx

# Server globals
user nginx;
worker_processes 2;
worker_rlimit_nofile 65535;
error_log /var/log/nginx/error.log crit;
pid /var/run/nginx.pid;

# Worker config
events {
worker_connections 1024;
use epoll;
multi_accept on;
}

http {
# Main settings
sendfile on;
tcp_nopush on;
tcp_nodelay on;
client_header_timeout 11;
client_body_timeout 11;
client_header_buffer_size 2k;
client_body_buffer_size 2k;
client_max_body_size 15m;
large_client_header_buffers 8 4k;
send_timeout 4;
keepalive_timeout 11 11;
keepalive_requests 100;
reset_timedout_connection on;
server_tokens off;
server_name_in_redirect off;
server_names_hash_max_size 512;
server_names_hash_bucket_size 512;

# Log format
log_format main '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format bytes '$body_bytes_sent';
#access_log /var/log/nginx/access.log main;
access_log off;
error_log /var/log/nginx/error.log crit;

# Mime settings
include /etc/nginx/mime.types;
default_type application/octet-stream;

# Compression
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 512;
gzip_buffers 8 64k;
gzip_types text/plain text/css text/javascript text/js text/xml application/json application/javascript application/x-javascript application/xml application/xml+rss application/x-font-ttf image/svg+xml font/opentype;
gzip_proxied any;
gzip_disable "MSIE [1-6]\.";

# Proxy settings
proxy_redirect off;
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_pass_header Set-Cookie;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 30;
proxy_buffers 32 4k;

# Cloudflare https://www.cloudflare.com/ips
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 104.16.0.0/12;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
#set_real_ip_from 2400:cb00::/32;
#set_real_ip_from 2606:4700::/32;
#set_real_ip_from 2803:f800::/32;
#set_real_ip_from 2405:b500::/32;
#set_real_ip_from 2405:8100::/32;
#set_real_ip_from 2c0f:f248::/32;
#set_real_ip_from 2a06:98c0::/29;
real_ip_header CF-Connecting-IP;

# SSL PCI Compliance
ssl_session_cache shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";

# Error pages
error_page 403 /error/403.html;
error_page 404 /error/404.html;
error_page 502 503 504 /error/50x.html;

# Cache settings
proxy_cache_path /var/cache/nginx levels=2 keys_zone=cache:10m inactive=60m max_size=1000m;
proxy_cache_key "$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri $cookie_user";
proxy_temp_path /var/cache/nginx/temp;
proxy_ignore_headers Expires Cache-Control;
proxy_cache_use_stale error timeout invalid_header http_502;
proxy_cache_valid 200 301 302 304 5m;
proxy_hide_header "Set-Cookie";
proxy_cache_bypass $cookie_session;
proxy_no_cache $cookie_session;



# Cache bypass
map $http_cookie $no_cache {
default 0;
~SESS 1;
~wordpress_logged_in 1;
}

# File cache settings
open_file_cache max=200000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;

# Wildcard include
include /etc/nginx/conf.d/*.conf;
}

  • Вопрос задан
  • 173 просмотра
Подписаться 1 Средний 9 комментариев
Пригласить эксперта
Ответы на вопрос 1
@exmmth
CMS Joomla, JBZoo
Какой у вас трафик ожидается и что у вас внутри?
Из опыта есть сайт на joomla, крутится на обычном хостинге за 2к рублей в год с суточной посещаемостью 40к в сутки, там кеширование не включено joomla даже.
При повышении нагрузки используем родное кеширование джумла, там есть несколько вариантов,
прочитать тут joomla.center/baza-joomla/skorost-zagruzki-joomla/nastrojka-keshirovaniya-v-joomla
Если и этого мало, то в чате joomla спросить @jwebru он на конфигурировании серверов для joomla собак съел больше, чем корейцы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
YCLIENTS Москва
от 350 000 до 400 000 ₽
Viletech Москва
от 70 000 до 120 000 ₽
от 200 000 до 250 000 ₽