用 Nginx 搭建一个具备缓存功能的反向代理服务

配置一个静态资源Web服务器作为上游服务器;再搭建一个Nginx作为反向 代理 然后向大家演示Nginx作为反向代理应该怎么使用,由于上游服务要处理非常复杂的业务逻辑而且强调开发效率;所以它的性能并不怎么样;我们使用Nginx作为反向代理以后尼,可以由一台Nginx把请求按照负载均衡算法代理给多台上游服务器工作;这样我们就实现了水平扩展,在用户无感知的情况下,我们添加更多的上游服务器;来提升我们的处理性能;而当上游服务器出现问题的时候,那么Nginx可以把请求从有问题出现灾难的服务器转交给正常的服务器

配置静态资源Web服务器

server {
    listen       8080;
    server_name geektime.pub;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        root   /data/webroot/mi;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

查看是否含有问题 nginx -t

重启nginx后访问web

配置反向代理服务器

把这个Nginx静态资源Web服务器变更为上游服务器,而上游服务器通常公网是不提供访问的;这个时候我们可以做一个非常简单的操作;这个简单的操作就是listen监听8080端口的时候前面加一个ip地址,比如127.0.0.1:8080;表示只能本机的进程才能访问8080端口;

首先添加个upstream,上游服务其中一台server为192.168.226.7:8080;如果有许多台上游服务,可以依次的放到这里;upstream定义的这一批服务器,我们给他个命名,比如这里命名为local;

反向代理的域名配置为: gettktime.pub,对所有的请求我们把它通过proxy_pass 这条指令代理到我们刚刚配置的上游服务里

因为有了反向代理获取一些值或数据可能出出错,所以

location 中 proxy_set-header 配置:
proxy_set_header Host $host; #添加请求首部 host 名称,由上游服务器处理 host 请求

#获取TCP连接的远端地址
proxy_set_header x-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

 

proxy_cache:
我们的nginx作为反向代理的时候;通常只有动态的请求;也就是不同的用户访问同一个url,看到的内容是不同的,这个时候才会交给上游服务去处理;但是有些内容是一段时间不会发生变化的;这个时候为了减轻上游服务的压力;我们就会使Nginx让上游服务返回的内容缓存一段时间,比如缓存一天;在一天之内即使上游服务对这个响应的内容发生改变我们也不管,我们只拿缓存住的内容向浏览器发送响应;因为Nginx的性能远远领先于上游服务器的性能;所以使用这样一个性能以后,对于我们一些小的站点会有一个非常大的性能提升
配置缓存服务器,首先我们需要通过proxy_cache_path 这条指令去配置我们的缓存参数

proxy_cache cache_one;              # 共享内存名
proxy_cache_key $host$uri$is_args$args; # 缓存的文件key
proxy_cache_valid 200 304 302 1d;       # 配置nginx cache中的缓存文件的缓存时间,如果配置项为:proxy_cache_valid 200 304 2m;说明对于状态为200和304的缓存文件的缓存时间是2分钟,两分钟之后再访问该缓存文件时,文件会过期,从而去源服务器重新取数据。

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    proxy_cache_path  /dev/shm/nginx_proxy_cache levels=1:2 keys_zone=cache_one:10m inactive=60m max_size=32g use_temp_path=off;

    #gzip  on;

    include upstream/*.conf;
    include vhost/*.conf;

    upstream local {
        server 192.168.226.7:8080;
    }
    server{
        server_name geektime.pub;
        listen 80;
        location / {
            proxy_set_header Host $host;
            proxy_set_header x-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_cache cache_one;
            proxy_cache_key $host$uri$is_args$args;
            proxy_cache_valid 200 304 302 1d;

            proxy_pass http://local;
        }
    }
}

先访问站点 然后把上游服务停掉,再去访问,发现停掉上游服务之前访问过的文件还能访问,这些能访问的数据就是从缓存里读取响应的;

 

其他:

1)配置nginx 可共享目录下文件 使用autoindex

2)由于公网带宽是非常有限的,那么当由许多并发用户使用带宽时,他们会形成一个争抢关系,我们可能会为了让某些用户访问某些大文件的时候要限制它的速度以期望能够分离出足够的带宽给用户访问一些必要的小文件,如css js 等小文件,可以使用set命令配合一些内置的变量来实现这样的功能:set $limit_rate 1k; 就是在限制Nginx向客户端浏览器发送响应的一个速度
location / {
    alias dilb;
    autoindex on;
    set $limit_rate 1k;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值