Nginx学习日记第四篇 -- 反向代理及缓存功能

一、Nginx反向代理

Nginx中的ngx_http_proxy_module模块可以实现后端服务器的反向代理功能,这样就可以实现客户端请求的动静分离以及负载均衡功能。

 1、实验场景

Nginx主机作为反向代理服务器将客户端请求发往node1主机web服务器

Nginx主机IP:192.168.0.110

node1主机IP:192.168.0.40

 

 2、Nginx主机配置

grep -Ev "#|^$" server.conf
    server {
        listen       80;
        server_name   localhost;

        location / {
	    proxy_pass http://192.168.0.40;
	    proxy_set_header Host    $host;
	    proxy_set_header X-Real-IP  $remote_addr;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
[[email protected] conf]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[[email protected] conf]# nginx -s reload

 3、node1主机配置为apache服务器

[[email protected] ~]# service httpd start
Starting httpd: httpd: Could not reliably determine the server‘s fully qualified domain name, using 192.168.0.15 for ServerName
                                                           [  OK  ]
[[email protected] ~]# curl 192.168.0.40
This is node1

4、测试反向代理

5、注意事项

如果是/uri反向代理到后端,那么/uri在后端可以为/newuri;

如果/uri是使用模式匹配的,则直接补在代理链接后面

如果proxy之前有定义rewrite的话,那么proxy将使用rewrite后的uri做代理

proxy_pass http://192.168.0.40;

proxy_set_header Host    $host; 自定义客户端请求的首部的值

proxy_set_header X-Real-IP  $remote_addr;  自定义头部信息加入客户端IP

6、自定义头部信息后的日志信息

[[email protected] ~]# vim /etc/httpd/conf/httpd.conf 
LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
[[email protected] ~]# service httpd reload
[[email protected] ~]# cat /etc/httpd/logs/access_log
192.168.0.109 - - [06/Feb/2017:13:56:20 +0800] "GET /user/ HTTP/1.0" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0"
192.168.0.109 - - [06/Feb/2017:13:56:21 +0800] "GET /user/ HTTP/1.0" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0"

 7、部分代理(动静分离)

Nginx部分

[[email protected] conf]# !grep
grep -Ev "#|^$" server.conf
    server {
        listen       80;
        server_name   localhost;

        location / {
	    root html/xn1;
	    index index.html;
	}
        location /user {
	    proxy_pass http://192.168.0.40;
	    proxy_set_header Host    $host;
	    proxy_set_header X-Real-IP  $remote_addr;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
[[email protected] conf]# nginx -s reload

node1部分

[[email protected] ~]# mkdir /var/www/html/user
[[email protected] ~]# echo "This is node1 user" >> /var/www/html/user/index.html
[[email protected] ~]# service httpd reload

测试:

本地处理请求的部分

反向代理的部分:

更多的proxy指令,详见:http://nginx.org/en/docs/http/ngx_http_proxy_module.html

二、proxy缓存功能

当Nginx将客户端请求反向代理至后端服务器时,建立的是keep-alive连接;代理服务器与客户端,代理服务器与后端web server都建立长链,这会降低Nginx性能,所以这时候,proxy模块的缓存功能就派上用场了,代理服务器与客户端之间依旧保持长链,而代理服务器与后端web server之间请求结束后,代理服务器将内容缓存在本地,与后端不建立长链,大大节省了系统资源;同时,当客户端请求来时,代理服务器会直接去缓存中寻找并返回给客户端。代理服务器将缓存存在内存中,以key-value形式存储,value存储的是指向本地文件系统中存储的URL的哈希值。

 1、配置缓存功能

1.创建缓存目录
[[email protected] conf]# mkdir -pv /cache/nginx/
mkdir: 已创建目录 "/cache"
mkdir: 已创建目录 "/cache/nginx/"
[[email protected] conf]# chown -R nginx:nginx /cache/nginx

2.在配置文件的http段定义缓存目录
[[email protected] conf]# vim nginx.conf
    proxy_cache_path /cache/nginx/ keys_zone=mycache:32m;
    
3.在server或location区段均可调用,根据实际情况使用,此处在location区段调用
[[email protected] conf]# !grep
grep -Ev "#|^$" server.conf
    server {
        listen       80;
        server_name   localhost;

        location / {
	    root html/xn1;
	    index index.html;
	}
        location /user {
	    proxy_cache mycache;
	    proxy_cache_valid 200 3h;
	    proxy_cache_valid 301 302 10m;
            proxy_cache_valid all 1m;
	    proxy_cache_use_stale error timeout http_500 http_502 http_503;
	    proxy_pass http://192.168.0.40;
	    proxy_set_header Host    $host;
	    proxy_set_header X-Real-IP  $remote_addr;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
[[email protected] conf]# nginx -s reload

4.请求后,缓存目录中出现缓存
[[email protected] conf]# ll /cache/nginx/
总用量 4
-rw------- 1 nginx nginx 462 2月   6 17:09 a8d7f3cb1968f4e6056774a5a3a73468

5.cache语句
proxy_cache_path /cache/nginx/ keys_zone=mycache:32m;
定义缓存在文件系统中的保存路径,定义key值在内存中的变量名与大小,其余诸多选项有默认配置,定义在哪个位置,就有哪些配置可使用缓存

proxy_cache mycache;
使用mycache缓存

proxy_cache_valid 200 3h;
以响应状态码定义缓存保存时长,可定义多个

proxy_cache_use_stale error timeout http_500 http_502 http_503;
定义在遇到什么情况下可以使用过期缓存响应客户端

2、补充说明

缓存功能可以定义在http,server,location区段,定义在哪个区段表示有哪些请求可以使用缓存;一般来说,我们把缓存路径定义在http段,调用缓存根据具体情况配置。

其他cache语句:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache

时间: 2024-10-06 00:45:18

Nginx学习日记第四篇 -- 反向代理及缓存功能的相关文章

Nginx自学手册(四)反向代理和缓存

(一)nginx反向代理 什么是代理服务器 :代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中,再发送给客户机. 为什么要使用代理服务器 1)提高访问速度 由于目标主机返回的数据会存放在代理服务器的硬盘中,因此下一次客户再访问相同的站点数据时,会直接从代理服务器的硬盘中读取,起到了缓存的作用,尤其对于热门站点能明显提高请求速度. 2)防火墙作用 由于所有的客户机请求都必须通

6、nginx的反向代理及缓存功能

nginx模块的应用 ngx_http_proxy_modulenginx 反向代理模块: http://nginx.org/en/docs/http/ngx_http_proxy_module.html server { listen server_name location / { proxy_pass http://192.168.184.141:80/;  //指明把用户所有对路径"/"的请求都转发到后端所指定的服务器:192.168.184.141:80 } } 格式: lo

Nginx学习日记第五篇 -- upstream及fastcgi

一.Nginx upstream Ngx_http_upstream_module模块可实现七层负载均衡,定义的服务器组可被proxy_pass.fastcgi_pass.uwsgi_pass.scgi_pass和memcached_pass所引用. 1.实验场景 Nginx upstream IP:192.168.0.110 apache node1 IP:192.168.0.40 apache node2 IP:192.168.0.30  2.Nginx upstream配置(结合proxy

nginx实战(四)反向代理配置缓存及负载均衡

前言 反向代理,是指用户通过同一服务器访问服务器后端各被代理服务器的访问方式.(详见百度百科 https://baike.baidu.com/item/反向代理/7793488 )? nginx 反向代理的应用场景 1.实现外网用户对内网服务器的访问,相对保护内网服务器安全及节约网络资源2.增加缓存,缓解对内网服务器访问的压力3.通过负载均衡提高业务处理能力及高可用性? 访问内网配置 ### 代理参数,设置头信息 cat>conf/conf.d/proxy.conf<<EOF proxy

Nginx反向代理、缓存、负载均衡服务器构建

代理服务可简单的分为正向代理和反向代理: 正向代理: 用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标Web服务器的HTTP请求先发送到代理服务器上,然后由代理服务器去访问Web服务器, 并将Web服务器的Response回传给客户端: 反向代理: 与正向代理相反,如果局域网向Internet提供资源,并让Internet上的其他用户可以访问局域网内资源, 也可以设置一个代理服务器, 它提供的服务就是反向代理. 反向代理服务器接受来

Nginx入门级简介,包括安装,基本使用,负载均衡,动静分离,反向代理,缓存应用等功能。

本文为Nginx入门级简介,包括安装,基本使用,负载均衡,动静分离,反向代理,缓存应用等功能. 依赖项准备 可能用到的依赖库,以下提供官方网站链接可自行下载: pcre http://www.pcre.org/ zlib http://zlib.net http://sourceforge.net/projects/libpng/files/zlib/ zlib.net上不去-是不是被墙了,我们可以使用另外一个链接zlib是 libpng的依赖库 openssl http://www.opens

python学习记录第四篇--数据库

只要用到MySQLdb,使用时请先安装MySQLdb,百度上可以下载! #coding=utf-8'''@author: 使用python操作MySQL数据库'''import MySQLdb#import MySQLdb.cursorsconn=MySQLdb.connect(user='root',passwd='root') #connect共三个值,user,passwd,host,无密码且连接本地数据库时,可以都为空.cur=conn.cursor() #创建游标,使用游标进行数据库操

Nginx 反向代理并缓存及缓存清除

Nginx 反向代理并缓存及缓存清除 原文地址:http://www.cnblogs.com/caoguo/p/5012447.html 一. Nginx 配置 #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_conne

nginx 反向代理、缓存

lvs+keepalive+nginx(realserver)两台+tomcat(后端服务器),nginx的配置文件nginx.conf如下 user  nobody nobody; worker_processes 12; error_log /var/log/nginx/error.log crit;(取消记录错误日志) #error_log  /var/log/nginx/debug.log  debug_http; #error_log  logs/error.log; #error_l