1. 什么是Nginx代理服务器?
Nginx是一个高性能的HTTP和反向代理服务器,它可以在Linux、Unix、BSD和Windows下运行。它的主要作用是作为Web服务器和反向代理服务器,可以轻松地处理大量的并发连接,节省服务器资源。
反向代理服务器指的是代理服务器将请求转发到内部资源,并将响应返回给外部客户端。通常情况下,反向代理服务器和Web服务器是分离的,客户端只能访问反向代理服务器。这种方式可以提高服务器的安全性和性能。
2. Nginx如何实现Web服务的缓存和预加载?
2.1 缓存
缓存是指将传输过的数据存储在本地或远程的缓存中,以便下次使用时可以快速访问。Nginx缓存模块可以帮助我们实现Web服务的缓存,提高访问速度、减轻后端服务器压力和降低带宽成本。
Nginx缓存模块有两种方式:proxy_cache和fastcgi_cache。proxy_cache适用于反向代理和动态缓存,而fastcgi_cache适用于FastCGI服务的静态内容缓存。下面我们重点介绍proxy_cache的使用。
2.2 配置proxy_cache
配置proxy_cache主要有以下几个步骤:
2.2.1 启用缓存
首先需要在nginx.conf中启用缓存功能。
http {
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m;
}
其中,/path/to/cache是缓存文件存储的路径,levels是缓存路径的层级,keys_zone是缓存区的名称和内存大小,inactive是如果在inactive时间内没有请求,那么缓存就会被清除。
2.2.2 配置缓存
配置缓存的方式有两种:proxy_cache_key和proxy_cache_valid。
2.2.2.1 proxy_cache_key
proxy_cache_key是用来生成缓存文件名的,可以根据请求的URL、参数、Cookie、User-Agent等信息来生成一个唯一的缓存文件名。
location / {
proxy_cache_key "$scheme$request_method$host$request_uri";
}
2.2.2.2 proxy_cache_valid
proxy_cache_valid用于配置缓存过期时间。
location / {
proxy_cache_valid 200 1h;
}
以上配置表示当响应状态码为200时,缓存有效期为1小时。
2.3 刷新缓存
当我们手动修改了资源文件后,需要刷新缓存。刷新缓存的方式有两种:物理删除和更新时间戳。
2.3.1 物理删除
在nginx.conf中添加下面的配置即可:
location /clear_cache {
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m;
add_header X-Cache-Status $upstream_cache_status;
proxy_cache_bypass $http_pragma;
proxy_cache_revalidate on;
if ($arg.secret != "xxxx") {
return 403;
}
proxy_cache_bypass $http_secret;
add_header Cache-Control "no-cache";
proxy_cache_purge my_cache "$scheme$request_method$host$request_uri";
return 200;
}
之后,我们只需要访问http://your-domain/clear_cache?secret=xxxx即可清除缓存。
2.3.2 更新时间戳
在nginx.conf中添加下面的配置即可:
location / {
proxy_cache_bypass $http_pragma;
proxy_cache_revalidate on;
if ($upstream_cache_status !~ "(HIT|UPD)") {
add_header X-Cache-Status "updating";
set $memcached_key "$scheme$request_method$host$request_uri";
memcached_pass 127.0.0.1:11211;
error_page 404 = @generate_response;
}
default_type text/html;
try_files $uri @static_content;
}
location @static_content {
proxy_cache_key "$scheme$request_method$host$request_uri:$upstream_response_time:$memcached_key";
proxy_cache_valid 200 1d;
proxy_cache_valid any 5m;
proxy_cache_valid 404 1m;
proxy_cache_bypass $http_pragma;
proxy_cache_revalidate on;
add_header X-Cache-Status $upstream_cache_status;
proxy_pass http://backend;
}
以上配置会在响应头中添加Last-Modified字段,表示缓存文件的最后修改时间。使用if_modified_since字段验证缓存是否过期,如果缓存有效,则返回304,否则返回200。
3. 预加载
预加载指的是在客户端发起请求之前,主动将资源文件缓存到本地或CDN的预加载服务器上,以便在后续访问时可以快速访问。
3.1 配置预加载
配置预加载的方式有两种:preload和sub_filter。
3.1.1 preload
在nginx.conf中添加下面的配置即可:
location / {
proxy_pass http://backend;
sub_filter '
' '';
sub_filter_once off;
}
以上配置会在HTML的
标签中自动添加preload指令,用于预加载字体文件。可以配置多个sub_filter。3.1.2 sub_filter
在nginx.conf中添加下面的配置即可:
location / {
proxy_pass http://backend;
sub_filter_once off;
}
以上配置会将HTML中的标签替换为预加载指令。
4. 总结
Nginx代理服务器可以帮助我们实现Web服务的缓存和预加载,提高访问速度、减轻后端服务器压力和降低带宽成本。缓存有两种方式:proxy_cache和fastcgi_cache,其中proxy_cache适用于反向代理和动态缓存,fastcgi_cache适用于FastCGI服务的静态内容缓存。预加载有两种方式:preload和sub_filter。