欢迎您, 来到 宁时修博客.^_^

Nginx系列---7、具备缓存能力的反向代理服务

2019/07/25 言则行 Nginx 308
Nginx系列

一、重新安装一个Nginx

    需要重新安装一个nginx服务,已安装的是nginx-1.16.0,现在安装nginx-1.17.2作为反向代理服务,用不同版本区分。

[root@lynn ~]# cd /usr/local/src/
[root@lynn src]# wget http://nginx.org/download/nginx-1.17.2.tar.gz
[root@lynn src]# tar xf nginx-1.17.2.tar.gz 
[root@lynn src]# cd nginx-1.17.2/
[root@lynn nginx-1.17.2]# ./configure --prefix=/usr/local/nginx-1.17.2 --with-pcre
[root@lynn nginx-1.17.2]# make
[root@lynn nginx-1.17.2]# make install

    这样就新安装了一个nginx服务。



二、配置nginx反向代理

    反向代理涉及两个模块:ngx_http_proxy_module 和 ngx_http_upstream_module

    官方介绍:

    http://nginx.org/en/docs/http/ngx_http_proxy_module.html

    http://nginx.org/en/docs/http/ngx_http_upstream_module.html

    这两个模块都是默认编译进nginx的。


    先配置下原先安装的nginx-1.16.0:

[root@lynn nginx-1.17.2]# cd /usr/local/nginx-1.16.0/conf/
[root@lynn conf]# vim nginx.conf


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


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;

    gzip  on;
    gzip_buffers  16 8k;
    gzip_comp_level  5;
    gzip_min_length  100;
    gzip_proxied   any;
    gzip_types  text/plain text/css text/javascript;
    gzip_vary on;

    server {
        listen     127.0.0.1:8080;  # 更改监听端口,80变成8080,并且只允许本机访问
        #server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            alias  bootstrap/;
            index  bootstrap.html index.html index.htm;
        }

        location /files {
            alias  bootstrap/bootstrap_files;
            autoindex on;
        }   
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

}

# 保存配置,然后关闭nginx-1.16.0进程,再启动nginx,防止之前打开的端口任然可以使用
[root@lynn conf]# /usr/local/nginx-1.16.0/sbin/nginx -s stop
[root@lynn conf]# /usr/local/nginx-1.16.0/sbin/nginx


    访问 http://132.232.32.154:8080时, 已然不能通过外网IP访问,访问失败。

        

   接下来配置下新安装的nginx-1.17.2:

[root@lynn conf]# cd /usr/local/nginx-1.17.2/conf/
[root@lynn conf]# vim nginx.conf

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


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;

    #gzip  on;


    upstream backend {
        server 127.0.0.1:8080;    # 后端真实服务器
        #server backend1.example.com       weight=5;
    }


    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host      $host;   # 向后端真实服务器传输变量
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

# 保存配置,然后启动 反向代理nginx-1.17.2
[root@lynn conf]# /usr/local/nginx-1.17.2/sbin/nginx


    这时,我们通过 访问 http://132.232.32.154 又可以看到 HTML页面了。

    查看浏览器调试抓包:

    802123109.png


    显示的是 nginx/1.17.2,并且没有启用gzip压缩传输。

    现在简单的nginx反向代理服务已经实现。

    更多的模块使用方法请查看官方介绍:http://nginx.org/en/docs/



三、缓存服务

    nginx作为反向代理时,通常只有动态的请求才会交由后端服务器处理。

    有些内容可能是一段时间不会发生变化,为了缓解后端真实服务器的压力,就会让nginx把后端服务返回的内容缓存一段时间,比如一天,在一天之内,即使后端服务内容发生了改变,也只会去拿缓存处的内容。


    配置nginx.conf:

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


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;

    #gzip  on;

    proxy_cache_path /tmp/nginxcache levels=1:2 use_temp_path=off keys_zone=my_cache:10m inactive=60m max_size=10g;

    upstream backend {
        server 127.0.0.1:8080;    # 后端真实服务器
        #server backend1.example.com       weight=5;
    }


    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://backend;
            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 my_cache;

            proxy_cache_key $host$uri$is_args$args;
            proxy_cache_valid  200 302 301 1d;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

[root@lynn conf]# /usr/local/nginx-1.17.2/sbin/nginx -s reload

    

    保存重启 nginx,然后浏览器访问:http://132.232.32.154

    然后将 后端真实 nginx服务关闭,再将浏览器缓存清空。

[root@lynn conf]# /usr/local/nginx-1.16.0/sbin/nginx -s stop


    再访问 http://132.232.32.154  看有没有返回内容。

    有就代表已被nginx反向代理缓存了,数据内容就是从nginx缓存中取的。


点赞
说说你的看法

所有评论: (0)