一、静态资源WEB服务
1.什么是静态资源
HTML、CSS、JS、
JPEG、GIF、PNG、
FLV、MPEG
TXT等等。。。
2.静态资源服务场景
CDN
架设Nginx分节点,总结点的静态资源回源到分节点,用户发送请求,使用智能DNS解析请求的地址,然后把请求分配给最近的分节点,可以减少传输延迟。
3.静态资源服务配置
sendfile
发送文件
tcp_nopush
在sendfile开启的情况下,提高网络包的传输效率。把多个包放在一起发送。
tcp_nodelay
与nopush对应,在keepalive连接下,收到包就要发送,不能等,提高传输的实时性。
压缩gzip_comp_level
服务端对文件压缩
配置:
server {
listen 80;
server_name localhost;
sendfile on;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location ~ .*\.(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 /opt/app/code/images;
}
location ~ .*\.(txt|xml)$ {
gzip on;
gzip_http_version 1.1;
gzip_comp_level 1;
gzip_types text/plain application/javascript allpication/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jepg image/gif image/png;
root /opt/app/code/doc;
}
location ~ ^/download {
gzip_static on; #开启文件预读,文件压缩后后缀会加上.gz,客户端请求时,根据这个配置,会在服务器找相关文件.gz格式的文件
tcp_nopush on;
root /opt/app/code;
}
....
}
4.客户端缓存
1.客户端请求
2.判断缓存是否过期?
2.1.缓存没过期,直接从缓存获取数据
2.2.缓存过期,进行Etag校验
2.2.1.Etag校验成功,由服务器决定200(请求服务器)或304(读取缓存)
2.2.2.Etag校验失败,进行Last-Modified校验
2.2.2.1.LM校验成功,由服务器决定200或304
2.2.2.2.LM校验失败,直接请求服务器
5.静态资源压缩
见3
6.防盗链
http_refer
location ~ .*\.(jpg|gif|png)$ {
....
valid_referers none blocked 1.2.3.4(你的IP或者正则匹配都可以);
if ($invalided_referer) {
return 403;
}
root /opt/app/code;
}
7.跨域访问
location ~ .*\.(htm|html)$ {
addr_header Access-Control-Allow-Origin www.xxx.com(你希望允许跨域访问的域名,即通过输入www.xxx.com可以进行跨域访问而不被拦截);
addr_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
root /opt/app/code;
}
二、代理服务
反向代理:
proxy_pass
正向代理:
在1.2.3.4服务器上的配置:
proxy_pass http://$http_host$request_uri;
在正向代理服务器上的配置:
if ( $http_x_forwarded_for !~* "^1\.2\.3\.4") { #判断x_forwarded_for里是否有访问IP:1.2.3.4
return 403;
}
补充:
location / {
proxy_pass http://127.0.0.1:8080;
proxy_redirect default;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 32k;
proxy_buffering on;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;
}
三、负载均衡
upstream
调度算法:
轮询:一次轮询访问
加权轮询:weight越大,几率越高
ip_hash:请求按照ip的hash结果分配
url_hash:请求按照url的hash结果分配
least_conn:请求分给连接数最少的机器
hash关键数值:自定义要被hash的key,如:在upstream里加配置 hash $request_uri
四、缓存服务
proxy_cache
upstream myserver {
....
}
proxy_cache_path /opt/app/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
....
location / {
proxy_cache my_cache;
proxy_pass http://myserver;
proxy_cache_valid 200 304 12h;
proxy_cache_valid any 10m;
proxy_cache_key $host$uri$is_args$args;
add_header Nginx-Cache "$upstream_cache_status";
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
....
}
也可以使用proxy_nocache配置某些请求不缓存