
一、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 *:*
测试


二、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

定义可用于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
<h1>Server 1</h1>
三、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首部的值;
网友评论