反向代理也叫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; } }