反向代理也叫reverse proxy,指的是代理外网用户的请求到内部指定web服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式。
ngx_http_prixy_module:将客户端的请求以http协议转发至指定服务器进行处理。
ngx_stream_proxy_module:将客户端的请求以tcp协议转发至指定服务器处理。
ngx_http_fastcgi_module:将客户端对php的请求以fastcgi协议转发至指定服务器处理。
ngx_http_uwsgi_module:将客户端对python的请求以uwsgi协议转发至指定服务器处理。
1、在163服务器上的nginx中的mobile.hu.com.conf添加如下内容
[root@localhost server]# vim mobile.hu.com.conf //需要注意,proxy_pass后面最好跟ip地址 location /test { proxy_pass http://192.168.31.161:80; } //在161服务器上配置test文件夹并在文件夹中创建index.html [root@localhost test]# pwd /data/nginx/pc/test [root@localhost test]# ls index.html [root@localhost test]# //然后在web页面访问mobile.hu.com/test,观测是否能够访问到161服务器中test目录下的index.html
proxy_hide_header;
//配置上proxy_hide_header Etag;则相应信息不会带上Etag
#可以更改或者添加客户端的请求头部信息内容并转发至后端服务器,比如在后端服务器想要获取客户端的真实ip的时候,就要更改每一个报文的头部,比如:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#配置nginx服务器与后端服务器尝试建立连接的超时时间,默认为60s
proxy_connect_timeout;
proxy_http_version
#用于设置nginx提供代理服务的http协议的版本,默认为1.0
proxy_buffering on}off; 默认on
#开启时,从后端被代理服务器的相应body缓冲
#如果proxy_buffering开启,nginx会假设被代理的后福安服务器会以最快速度相应,并把内容保存在由指令proxy_buffer_size和proxy_buffers指定的缓冲区里边
proxy_cache zone|off; 默认off
#指明调用的缓存,或关闭缓存机制,zone为用于存放缓存的内存区域名称。
proxy_cache_key
#通过后面的参数变量,来缓存哪些数据,默认值:$scheme$proxy_host$uri$is_args
proxy_cache_valid
#为不同的相应状态码设置不同的缓存时间。例如
proxy_cache_valid 200 302 10m;
proxy_cache_valid 400 1m;
pro_cache_path path
path指定缓存文件目录
levelS = 1:2:2定义了缓存的层次结构
keys_zone=proxycache:20m #指内存中缓存的大小,主要用于存放key和metadata(metadata表示使用次数等)(一般设置500M或者更大)
inactive=120s; #缓存的有效时间
max_size=1g; #最大磁盘占用空间,磁盘存入文件内容的缓存空间最大值
proxy_cache_use_stale error http_502 http_503;
#在被代理的服务器出现502、503等情况下,可直接使用过期的缓存响应客户端(默认是关闭)
2、nginx反向代理配置示例
配置示例 在nginx.conf文件下的http模块中配置 1、nginx.conf access_log /apps/nginx/logs/access_json.log access_json; #access_log logs/access.log main; proxy_cache_path /apps/nginx/proxycache levels=1:2:2 keys_zone=proxycache:512m inactive=10m max_size=1g sendfile on; 2、在server.conf中调用 location /test { proxy_pass http://192.168.31.161:80; proxy_hide_header Etag; proxy_set_header HOST $remote_addr; proxy_connect_timeout 60s; proxy_cache proxycache; proxy_cache_key $request_uri; proxy_cache_valid 200 302 301 1h; proxy_cache_valid any 1m; } 验证一下配置是否生效,可以直接看是否生成proxycache文件 [root@localhost conf]# nginx -s reload [root@localhost conf]# cd /apps/nginx/proxy proxycache/ proxy_temp/ [root@localhost conf]# cd /apps/nginx/proxycache/
添加头部报文信息
nginx基于ngx_http_header_moudle模块可以实现对头部报文添加指定的key-value
add_header X-Via $server_addr; #显示被代理服务器的地址,通常不给用户看,可以不用配置 add_header X-Cache $upstream_cache_status; #只有开启缓存才能使用$upstream_cache_status变量,展示缓存是否命中 add_header X-Accel $server_name;
upstream配置
通常情况后端被代理服务器是集群服务,因此需要使用upstream来进行配置
upstream name{
}
#自定义一组服务器,配置在http内
server address 配置一个后端web服务器,配置在upstream内,至少要有一个server服务器配置 #server支持的parameters如下: weight=number #设置权重,默认为1 max_conns=number #给当前server设置最大活跃连接数,默认为0表示没有限制 max_fails=number #对后端服务器连续监控失败多少次就标记为不可用 fail_timeout=time #对后端服务器的单次监测超时时间,默认为10s backup #设置为备份服务器,当所有服务器不可用时,将重新启用次服务器 down #标记为down状态 resolve #当server定义的是主机名的时候,当A记录发生变化会自动应用新IP而无需重启nginx least_conn; #最少连接调度算法,优先将客户端请求调度到当前连接最少的后端服务器(代理数据库使用的相对较多)
hash $request_uri consisyent;
#基于用户请求的uri做hash
配置如下:
[root@localhost server]# vim mobile.hu.com.conf upstream app1 { server 192.168.31.161:80 weight=1 max_fails=3 fail_timeout=5; server 192.168.31.162:80 weight=1 max_fails=3 fail_timeout=5;
least_conn;
hash $request_uri consisyent; } server { listen 80; listen 443 ssl; ssl_certificate /apps/nginx/certs/mobile.hu.com.crt; ssl_certificate_key /apps/nginx/certs/mobile.hu.com.key; ssl_session_cache shared:sslcache:20m; ssl_session_timeout 10m; server_name mobile.hu.com; charset utf-8; access_log /data/nginx/logs/mobile_hu_com_access.log access_json; error_log /data/nginx/logs/mobole_hu_com_error.log; location / { root /data/nginx/mobile; index index.html index.htm; } location /nginx_status { stub_status; } location /test { proxy_pass http://app1; proxy_hide_header Etag; proxy_set_header HOST $remote_addr; proxy_connect_timeout 60s; proxy_cache proxycache; proxy_cache_key $request_uri; proxy_cache_valid 200 302 301 1h; proxy_cache_valid any 1m; } location /image { index index.html; root /data/nginx/mobile; try_files $uri $uri.jtml $uri/index.html /default.html; } }