1、静态资源web服务(文件读取sendfile、tcpnopush、tcpnodelay、压缩,预读gzip模块) 2、代理服务 3、负载均衡调度器SLB 4、动态缓存(添加cache-control、expires头)
nginx配置
server{
listen 80;
server_name localhost;
sendfile on;
access_log /var/log/nginx/log/static_access.log main;
#匹配图片
location ~ .*\.(jpeg|jpg|gif|png)$ {
#gzip on;
#gzip_http_version 1.1;
#gzip_comp_level 2;
#gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
root /home/project/nginx-code/images;
}
#匹配文本
location ~ .*\.(txt|xml)$ {
gzip on;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
root /home/project/nginx-code/doc;
}
#相当于预先压缩文件,这个文件夹下的可以由其他脚本生成压缩文件访问
location ~ ^/download$ {
gzip_static on;
tcp_nopush on;
root /home/project/nginx-code;
}
}
linux命令
#测试配置文件
nginx -tc /etc/nginx/nginx.conf
#重新加载配置文件
nginx -s reload -c /etc/nginx/nginx.conf
结果 开启压缩前:
开启压缩后:
其实gzip对于图片的压缩效率可能没那么高,大家可以试下对文件的压缩,会更高一些
总结 开启压缩主要是为了减少网络传输消耗,浏览器会对压缩的文件进行解压缩,这个过程要快很多。
nginx缓存配置
nginx配置
server{
listen 80;
server_name localhost;
location ~ .*\.(html|htm)$ {
#缓存开关
expires 24h;
root /home/project/nginx-code;
}
}
结果 没加缓存之前的请求:
加了缓存第一次请求:
加了缓存第二次请求:
结论
server{
listen 80;
server_name localhost;
location ~ .*\.(html|htm)$ {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
root /home/project/nginx-code;
}
}
location ~ .*\.(jpeg|jpg|gif|png)$ {
#gzip on;
#gzip_http_version 1.1;
#gzip_comp_level 2;
#gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
#防盗链配置 valid_referers none blocked 允许ip 可以设置正则表达式;
valid_referers none blocked 127.0.0.1 ~/google\./w;
if($invalid_referer) {
return 403;
}
root /home/project/nginx-code/images;
}
nginx作为负载均衡的场景下主要涉及到2点:第一点是如何选择配置nginx相关的负载均衡算法,第二点是nginx负载均衡时的参数配置。 - nginx负载均衡算法
配置 | 说明 |
---|---|
轮询 | 默认按照时间顺序分配 |
加权轮询 | weight越大,访问到的几率越高 |
ip_hash | 按照ip hash结果分配,注意ip是可能变化的 |
least_conn | 最少连接数 |
url_hash | 按照url hash |
hash关键数值 | hash自定义key |
- upstream配置项
配置 | 说明 |
---|---|
down | 当前的server暂时不参与负载均衡 |
backup | 预留的备份服务器 |
max_fails | 允许请求失败的次数 |
fail_timeout | 经过max_fails次失败后,服务暂停的时间 |
max_conns | 限制最大的接收的连接数 |
配置参考
upstream markdown-server {
#按照url hash,如果是ip_hash直接填上就行了。
hash $request_uri;
#配置参数直接跟后面
#如果是加权轮询加上weight。
#server localhost:8081 weight=5;
server localhost:8082;
server localhost:8083 backup;
server localhost:8084 down;
}
server {
listen 80;
server_name localhost;
#80端口全部转发到markdown-server
location / {
proxy_pass http://markdown-server;
}
}
清除指定缓存
自定义某些路径不缓存(见下)
参考配置
upstream markdown-server {
server localhost:8081;
server localhost:8082;
server localhost:8083;
}
#说明:缓存地址/data/nginx/cache,目录2层,创建nginx_cache缓存最大10m,所有缓存最大10g,不活跃的缓存60m删除,不使用临时文件路径
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=nginx_cache:10m max_size=10g inactive=60m use_temp_path=off;
#当匹配不缓存的url的时候,设置变量nginx_nocache=1
if($request_uri ~ ^/(login|admin|password\/reset)) {
set $nginx_nocache 1;
}
server {
listen 80;
server_name localhost;
location / {
#nginx_cache需要和上面设置的keys_zone对应上
proxy_cache nginx_cache;
proxy_pass http://markdown-server;
#200 和304的缓存有效期12h
proxy_cache_valid 200 304 12h;
#其他缓存有效期10m
proxy_cahce_valid any 10m;
#缓存的维度,可以看成是某个连接缓存的key
proxy_cache_key $host$uri$is_args$args;
#自定义头
add_header Nginx-Cache "$upstream_cache_status";
#自定义不缓存的url
proxy_no_cache $nginx_nocache;
#当服务出现500的时候,自动切换到下一服务
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
}