nginx反向代理模块

2018-07-24  本文已影响29人  任总
代理服务和nat转发服务区别

一、nginx反向代理服务


[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                          *:*       

测试


测试主机设置host文件
测试访问

二、ngx_http_proxy_module反向代理模块:

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

1、proxy_pass URL;

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

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/。

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;

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

缓存功能

定义可用于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;

5、 proxy_cache_key string;

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

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

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

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

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

<h1>Server 1</h1>


三、ngx_http_headers_module模块

1、add_header name value [always];

添加自定义首部;

2、expires [modified] time;

上一篇 下一篇

猜你喜欢

热点阅读