nginx反向代理模块

nginx反向代理模块_第1张图片
代理服务和nat转发服务区别

一、nginx反向代理服务

  • vs服务器安装两块网卡 一个连接外网 ,一个连接后端服务器所在的内网

[root@vs ~]# vim /etc/yum.repos.d/nginx.repo#配置epel仓库
[epel]
name=epel repository
baseurl=https://mirrors.aliyun.com/epel/7Server/x86_64/
gpgcheck=0

[root@vs ~]# yum install nginx -y #安装nginx
[root@vs ~]# vim /etc/nginx/conf.d/ilinux.conf#配置文件

server {
        listen 80;
        server_name www.ilinux.io;
        location / {
                proxy_pass http://172.16.1.11:80; #后端rs1服务器地址
            proxy_ser_header X-Real-IP $remot_addr;#设定首部为客户端实际地址
add_header X-Via  $server_addr;#向客户端发送服务器地址
                 }

                 }
         location ~* \.(jpg|jpeg|png)$ {      #匹配图片
                proxy_pass http://172.16.1.12:80;  #代理到rs2服务器上
                 }

}
[root@vs ~]# nginx -t #语法检查
[root@vs ~]# systemctl start nginx
[root@vs ~]# ss -tnl
State       Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN      0      128             *:80                          *:*       

测试


nginx反向代理模块_第2张图片
测试主机设置host文件

nginx反向代理模块_第3张图片
测试访问

二、ngx_http_proxy_module反向代理模块:

ngx_http_proxy_module 模块允许将请求传递给另一个服务器。

1、proxy_pass URL;

  • 场景:location, if in location, limit_except
  • 注意:proxy_pass后面的路径不带uri时,其会将location的uri传递给后端主机;
server {
...
server_name www.ilinux.io;
location /aaa/ {
proxy http://1.1.1.1;#后端服务器地址
}
...
}

目的:访问http://www.ilinux.io/aaa ,实际访问http://1.1.1.1+location的/aaa

  • proxy_pass后面的路径是一个uri时,其会将location的uri替换为proxy_pass的uri;
server {
...
server_name www.ilinux.io;
location /aaa/ {
proxy http://1.1.1.1/bbb/;#后端服务器
}
...
}

目的:访问http://www.ilinux.io/aaa/ ,实际访问http://1.1.1.1/bbb/,/aaa/被替换成了/bbb/。

  • 如果location定义其uri时使用了正则表达式的模式,或在if语句或limt_execept中使用proxy_pass指令,则proxy_pass之后必须不能使用uri; 用户请求时传递的uri将直接附加代理到的服务的之后;
server {
...
server_name www.ilinux.io;
 location ~* \.(jpg|jpeg|png)$ {      #匹配图片
proxy_pass http://2.2.2.2;  #代理到rs2服务器上
}
...
}

目的:访问http://www.ilinux.io/morning.jpg,当匹配到jpg时候, 实际访问指定图片服务器http://2.2.2.2/morning.jpg;

2、proxy_set_header field value;

  • 设定发往后端主机的请求报文的请求首部的值;
  • 场景:http, server, location
server {
        listen 80;
        server_name www.ilinux.io;
        location / {
       proxy_pass http://192.168.1.11:80;
       proxy_set_header X-Real-IP $remote_addr;设定首部为客户端实际地址
add_header X-Via $server_addr;
                 }

                 }

3、proxy_cache_path

nginx反向代理模块_第4张图片
缓存功能

定义可用于proxy功能的缓存;Context: http

proxy_cache_path path
[levels=levels]#使用几级子目录
[use_temp_path=on|off]
keys_zone=name:size#内存中使用多少空间创建哈希表(名称:大小),键区域,不能重名
[inactive=time]#非活动时间,此活动时间过后会被清除,默认10分钟
[max_size=size] #最大使用磁盘空间大小
[manager_files=number]
[manager_sleep=time]
[manager_threshold=time]
[loader_files=number]
[loader_sleep=time]
[loader_threshold=time]
[purger=on|off]#是否启动缓存修剪功能
[purger_files=number] #一次修剪几个文件
[purger_sleep=time]#每隔多长时间修剪一次
[purger_threshold=time];

4、proxy_cache zone | off;

  • 指明要调用的缓存,或关闭缓存机制;Context: http, server, location

5、 proxy_cache_key string;

  • 缓存中用于“键”的内容;

  • 默认值:proxy_cache_key schemeproxy_host$request_uri;

6、proxy_cache_valid [code ...] time;

  • 定义对特定响应码的响应内容的缓存时长;

定义在http{...}中;
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:1:1 keys_zone=pxycache:20m max_size=1g;

定义在需要调用缓存功能的配置段,例如server{...};
proxy_cache pxycache;
proxy_cache_key $request_uri;
proxy_cache_valid 200 302 301 1h;
proxy_cache_valid any 1m;

7、proxy_cache_use_stale

  • proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ...;
  • 在出现指定种情况下,当与代理服务器通信时发生错误时,例如出现500、502等时候,可以使用陈旧的缓存响应。

8、proxy_cache_methods GET | HEAD | POST ...;

  • 如果在这个指令中列出了客户端请求方法,那么响应将被缓存。“GET”和“HEAD”方法总是被添加到列表中,尽管建议显式指定它们。

9、proxy_hide_header field;默认隐藏那些首部信息,不被客户端看到,

  • 例如Date”, “Server”, “X-Pad”, and “X-Accel-...

10、proxy_connect_timeout time;面对服务器端的超时时间,但不能超过75秒

  • 定义用于与代理服务器建立连接的超时。应该注意的是,这个超时时间通常不能超过75秒。
  • 默认为60s;最长为75s;

11、proxy_read_timeout time;读取响应超时,两次重传间隔

  • 定义用于从代理服务器读取响应的超时。超时仅设置在两个连续读取操作之间,而不是用于整个响应的传输。

12、proxy_send_timeout time;被代理服务器不接收超时时间

  • 设置用于向代理服务器发送请求的超时时间。他超时只设置在两个连续的写操作之间,而不是用于整个请求的传输。如果代理服务器在此时间内没有接收到任何信息,则关闭该连接。
示例:
[root@vs ~]# vim /etc/nginx/nginx.conf
http {
.........
proxy_cache_path /data/nginx/ccache levels=1:1:1 keys_zone=pcache:10m max_size=2g; #缓存路径、目录有几个子级、键区域是pcache空间10M,最大磁盘空间2G。
.......
server {
......
[root@vs ~]# mkdir /data/nginx/cache -pv #创建缓存目录
[root@vs ~]# vim /etc/nginx/conf.d/ilinux.conf 
 proxy_cache pcache;#使用名字叫pcache的缓存
        proxy_cache_key $request_uri;#指定uri为键值
        proxy_cache_methods GET HEAD;#使用get和head方法
        proxy_cache_valid 200 302 10m;#指定的响应码缓存时间
        proxy_cache_valid 404     1m;#指定的响应码缓存时间
        proxy_cache_use_stale http_502;#指定的502响应码出现可以使用过期缓存

server {
        listen 80;
        server_name www.ilinux.io;
        location / {#匹配路径
               proxy_pass http://192.168.1.11:80;#后端rs1服务器
                 }
         location ~* \.(jpg|jpeg|png)$ {#匹配图片
                proxy_pass http://192.168.1.12:80;#后端rs2服务器
                 }
}
[root@vs ~]# nginx -t#语法检查
[root@vs ~]# nginx -s reload #重载
---------------------------------
浏览器测试后:
[root@vs ~]# ls /data/nginx/cache/9/d/7
6666cd76f96956469e7be39d750cc7d9#查询缓存目录
[root@vs ~]# cat  /data/nginx/cache/9/d/7/6666cd76f96956469e7be39d750cc7d9 #查询此条缓存内容
[ϥO[«R[ՒҹXp"12-57148434b4deb"
KEY: /
HTTP/1.1 200 OK
Date: Fri, 20 Jul 2018 17:15:23 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
Last-Modified: Wed, 18 Jul 2018 16:07:44 GMT
ETag: "12-57148434b4deb"
Accept-Ranges: bytes
Content-Length: 18
Connection: close
Content-Type: text/html; charset=UTF-8

Server 1

三、ngx_http_headers_module模块

  • 模块允许向响应头添加“ExExcel”和“Cache控件”标题字段和任意字段。

  • 向由代理服务器响应给客户端的响应报文添加自定义首部,或修改指定首部的值;

1、add_header name value [always];

添加自定义首部;

  • add_header X-Via $server_addr;
  • add_header X-Accel $server_name;

2、expires [modified] time;

  • expires epoch | max | off;

  • 用于定义Expire或Cache-Control首部的值;

你可能感兴趣的:(nginx反向代理模块)