Во-первых, преимущества кэширования nginx
Как показано на рисунке, кеш nginx может в определенной степени снизить нагрузку на исходный сервер при обработке запросов. Потому что многие статические файлы (такие как css, js, картинки) не часто обновляются. nginx использует proxy_cache для кэширования пользовательских запросов в локальный каталог. Следующий такой же запрос может напрямую вызывать кешированный файл, поэтому нет необходимости запрашивать сервер. В конце концов, обработка сервисов с интенсивным вводом-выводом — сильная сторона nginx.
2. Как настроить
Сначала каштан:
http{
proxy_connect_timeout 10;
proxy_read_timeout 180;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 96k;
proxy_temp_file_write_size 96k;
proxy_temp_path /tmp/temp_dir;
proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g;
server {
listen 80 default_server;
server_name localhost;
root /mnt/blog/;
location / {
}
#要缓存文件的后缀,可以在以下设置。
location ~ .*\.(gif|jpg|png|css|js)(.*) {
proxy_pass http://ip地址:90;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache cache_one;
proxy_cache_valid 200 302 24h;
proxy_cache_valid 301 30d;
proxy_cache_valid any 5m;
expires 90d;
add_header wall "hey!guys!give me a star.";
}
}
# 无nginx缓存的blog端口
server {
listen 90;
server_name localhost;
root /mnt/blog/;
location / {
}
}
}
потому что яПроведите эксперимент на сервере (стучите по клавише, проведите эксперимент), поэтому используются два порта80
и90
Для имитации взаимодействия между двумя серверами.
80
Порт подключен к общему доменному имени (http://wangxiaokai.vip
)доступ.
90
Ручки порта80
Доступ к ресурсам через прокси порта.
эквивалентно90
порт - исходный сервер,80
Порт — прокси-сервер обратного кэширования nginx.
Далее поговорим об элементах конфигурации:
2.1 настройки http-слоя
proxy_connect_timeout 10;
proxy_read_timeout 180;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 96k;
proxy_temp_file_write_size 96k;
proxy_temp_path /tmp/temp_dir;
proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g;
- proxy_connect_timeout
服务器连接的超时时间
- proxy_read_timeout
连接成功后,等候后端服务器响应时间
- proxy_send_timeout
后端服务器数据回传时间
- proxy_buffer_size
缓冲区的大小
- proxy_buffers
每个连接设置缓冲区的数量为number,每块缓冲区的大小为size
- proxy_busy_buffers_size
开启缓冲响应的功能以后,在没有读到全部响应的情况下,写缓冲到达一定大小时,nginx一定会向客户端发送响应,直到缓冲小于此值。
- proxy_temp_file_write_size
设置nginx每次写数据到临时文件的size(大小)限制
- proxy_temp_path
从后端服务器接收的临时文件的存放路径
- proxy_cache_path
设置缓存的路径和其他参数。被缓存的数据如果在inactive参数(当前为1天)指定的时间内未被访问,就会被从缓存中移除
2.2 настройки уровня сервера
2.2.1 Прокси-сервер с обратным кэшированием
server {
listen 80 default_server;
server_name localhost;
root /mnt/blog/;
location / {
}
#要缓存文件的后缀,可以在以下设置。
location ~ .*\.(gif|jpg|png|css|js)(.*) {
proxy_pass http://ip地址:90;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache cache_one;
proxy_cache_valid 200 302 24h;
proxy_cache_valid 301 30d;
proxy_cache_valid any 5m;
expires 90d;
add_header wall "hey!guys!give me a star.";
}
}
- proxy_pass
nginx缓存里拿不到资源,向该地址转发请求,拿到新的资源,并进行缓存
- proxy_redirect
设置后端服务器“Location”响应头和“Refresh”响应头的替换文本
- proxy_set_header
允许重新定义或者添加发往后端服务器的请求头
- proxy_cache
指定用于页面缓存的共享内存,对应http层设置的keys_zone
- proxy_cache_valid
为不同的响应状态码设置不同的缓存时间
- expires
缓存时间
Здесь я установил图片
,css
,js
Статические ресурсы кэшируются.
когда пользователь входитhttp://wangxiaokai.vip
Когда доменное имя разрешено,ip:port
адрес доступа.port
По умолчанию 80. Поэтому запрос страницы будет перехвачен текущим сервером для обработки запроса.
Когда статический ресурс, оканчивающийся на указанное выше имя файла, анализируется, статический ресурс будет получен из области кеша.
Если соответствующий ресурс получен, данные будут возвращены напрямую.
Если нет, перешлите запрос наproxy_pass
Указанный адрес обрабатывается.
2.2.2 Исходный сервер
server {
listen 90;
server_name localhost;
root /mnt/blog/;
location / {
}
}
Прямая обработка здесь90
Переносить полученные запросы в локальный каталог сервера/mnt/blog
Захватите ресурсы, чтобы ответить.
3. Как проверить, действителен ли кеш
Внимательные читатели должны обнаружить, что я оставил пасхалку в каштане во втором абзаце.add_header wall "hey!guys!give me a star."
.add_header
используется для установки пользовательской информации в заголовке.
Поэтому, если кеш действителен, заголовок, возвращаемый статическим ресурсом, обязательно будет нести эту информацию.
доступhttp://wangxiaokai.vip
Результат выглядит следующим образом:
4. Ссылка
[1] документация по nginx
[2] Подробное объяснение обратного кеш-прокси nginx
[3] Статические файлы кэш-сервера Nginx
5. Постскриптум
мой репозиторий GitHub
Give me a star,if it's work out for you.Thank you.