Nginx场景实践篇

一、静态资源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配置某些请求不缓存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值