nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录

来源:互联网 发布:阿里云开放华北区域 编辑:程序博客网 时间:2024/06/05 11:51

一、后端的Real Server的准备

两台RS服务器(192.168.1.104/192.168.1.105)要事先配置好nginx。
并且nginx访问均是用ip访问即可,方便实验效果!

二、nginx代理服务器192.168.1.103(假设外网ip是111.112.114.23)的配置

1.nginx反向代理和缓存

0)安装依赖软件(如果是ubuntu系统,则sudo apt-get update && sudo apt-get upgrade && sudo apt-get install libpcre3 libpcre3-dev zlib1g-dev libssl-dev build-essential openssl libssl0.9.8 libssl-dev)
[root@node1 ~]# yum install -y pcre pcre-devel openssl openssl-devel gcc

1)首先添加用户nginx,实现以之运行nginx服务进程:
[root@node1 ~]# groupadd -r nginx
[root@node1 ~]# useradd -r -g nginx -s /bin/false -M nginx                  #-M参数表示创建用户时不创建用户家目录

2)接着开始编译和安装:
[root@node1 ~]# cd /usr/loca/src
[root@node1 src]# wget http://nginx.org/download/nginx-1.8.0.tar.gz
[root@node1 src]# tar -zxvf nginx-1.8.0.tar.gz
[root@node1 src]# cd nginx-1.8.0
[root@node1 nginx-1.8.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre 
[root@node1 src]# make && make install

#以上编译安装nginx后,--http-client-body-temp-path、--http-proxy-temp-path、--http-fastcgi-temp-path、--http-uwsgi-temp-path、--http-scgi-temp-path默认的路径就在/usr/local/nginx下,分别是client_body_temp、proxy_temp、fastcgi_temp、scgi_temp、uwsgi_temp

[root@node1 src]# cd /usr/local/nginx/
[root@node1 nginx]# ls
conf html logs sbin
[root@node1 nginx]# /usr/local/nginx/sbin/nginx     //nginx启动后,就会出现下面的目录
[root@node1 nginx]# ls /usr/local/nginx/
client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp

3)反代的实现,和缓存的开启(可参考:nginx缓存配置的操作记录梳理)

[root@node1 src]# vim /usr/local/nginx/conf/nginx.conf 
worker_processes 1; 
events { 
worker_connections 1024; 

http { 
include mime.types; 
default_type application/octet-stream; 
sendfile on; 
  keepalive_timeout 65;

#要想开启nginx的缓存功能,需要添加此处的两行内容!

#这一行分别表示:定义缓存存储目录,手动创建;缓存级别,表示缓存目录的第一级目录是1个字符,第二级目录是2个字符;内核中建立用于缓存缓存数据源数据的空间,查找缓存的时候,先从这个内核空间中找到,缓存数据的源数据,然后再到对应目录中查找缓存;这一行分别表示:缓存空间最大值;缓存的数据,60分钟内没有被访问过就删除 
  proxy_cache_path /var/www/cache levels=1:2 keys_zone=mycache:20m max_size=2048m inactive=60m;

#这一行分别表示:创建缓存的时候可能生成一些临时文件存放的位置,自动创建 
  proxy_temp_path /var/www/cache/tmp; 

server { 
listen 80; 
server_name localhost; 

location / { 
#root html; 
#index index.html index.htm; 
  proxy_pass http://192.168.1.104/;                       #代理哪个web服务器 
  proxy_cache mycache;                                          #内存缓存源数据空间名字,对应我们前面的设定 
  proxy_cache_valid 200 302 60m;                          #页面返回码为200 302 的缓存60分 
  proxy_cache_valid 404 1m;                                   #页面错误响应吗404缓存时间1分 

error_page 500 502 503 504 /50x.html; 
location = /50x.html { 
root html; 

  }

[root@node1 src]# mkdir /var/www/cache 
[root@node1 src]# /usr/local/nginx/sbin/nginx

4)验证结果
访问http://111.112.114.23,则显示的是http://192.168.1.104的访问结果(如上配置,RS2的反向代理类似)

---------------------------------------------------------------------------------------------------------
再看如下的一个实例配置(nginx.conf文件中已开启缓存功能)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
upstream LB-WWW {
      ip_hash;
      server 192.168.1.101:80 max_fails=3 fail_timeout=30s weight=100;   #max_fails = 3 为允许失败的次数,默认值为1
      server 192.168.1.102:80 max_fails=3 fail_timeout=30s weight=100;   #fail_timeout = 30s(也可以是fail_timeout = 30,即后面的秒单位不带) 当max_fails次失败后,暂停将请求分发到该后端服务器的时间
      server 192.168.1.118:80 max_fails=3 fail_timeout=30s weight=50;    #由于这三台机器中,前两台配置高,后一台118机器配置低点,三台机器开启的nginx线上数是一样的,所以118机器设置的weight权重低。
    }                                                                    #weight权限设置低,命中率就会低,这样机器压力就会减轻(若是权重不设置低点,也可以通过减少nginx线程数来减少机器压力);
 
 
server {
     listen       80;
     server_name  www.wangshibo.com;
   
      access_log  /usr/local/nginx/logs/www-access.log main;
      error_log  /usr/local/nginx/logs/www-error.log;
   
     location / {
         proxy_pass http://LB-WWW;
         proxy_redirect off ;
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header REMOTE-HOST $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_connect_timeout 300;             #跟后端服务器连接超时时间,发起握手等候响应时间
         proxy_send_timeout 300;                #后端服务器回传时间,就是在规定时间内后端服务器必须传完所有数据
         proxy_read_timeout 600;                #连接成功后等待后端服务器的响应时间,已经进入后端的排队之中等候处理
         proxy_buffer_size 256k;                #代理请求缓冲区,会保存用户的头信息以供nginx进行处理
         proxy_buffers 4 256k;                  #同上,告诉nginx保存单个用几个buffer最大用多少空间
         proxy_busy_buffers_size 256k;          #如果系统很忙时候可以申请最大的proxy_buffers
         proxy_temp_file_write_size 256k;       #proxy缓存临时文件的大小
         proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
         proxy_max_temp_file_size 128m;
         proxy_cache mycache;                   #内存缓存源数据空间名字,对应我们前面的设定                     
         proxy_cache_valid 200 302 60m;                     
         proxy_cache_valid 404 1m;
        }
}

proxy_set_header参数解释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
1)proxy_redirect off
语法:proxy_redirect [ default|off|redirect replacement ]
默认值:proxy_redirect default
使用字段:http, server, location
 
proxy_redirect功能比较强大,其作用是对发送给客户端的URL进行修改。
如果需要修改从被代理服务器传来的应答头中的"Location""Refresh"字段,可以用这个指令设置。
设置为off,表示禁止所有的proxy_redirect指令.
 
假设被代理服务器返回Location字段为:http://localhost:8000/two/some/uri/
这个指令:
proxy_redirect http://localhost:8000/two/ http://frontend/one/;
将Location字段重写为http://frontend/one/some/uri/
在代替的字段中可以不写服务器名:
 
proxy_redirect http://localhost:8000/two/ /;
这样就使用服务器的基本名称和端口,即使它来自非80端口。
如果使用“default”参数,将根据location和proxy_pass参数的设置来决定。
 
例如下列两个配置等效:
location /one/ 
    proxy_pass  http://upstream:port/two/
    proxy_redirect   default;
}
 
location /one/ 
    proxy_pass  http://upstream:port/two/
    proxy_redirect  http://upstream:port/two/ /one/;
  }
 
 
在指令中可以使用一些变量:
proxy_redirect  http://localhost:8000/ http://$host:$server_port/;
 
 
这个指令有时可以重复:
proxy_redirect   default; 
proxy_redirect   http://localhost:8000/  /; 
proxy_redirect   ; 
/;
 
参数off将在这个字段中禁止所有的proxy_redirect指令:
proxy_redirect   off; 
proxy_redirect   default; 
proxy_redirect   http://localhost:8000/  /; 
proxy_redirect   ; 
/;
利用这个指令可以为被代理服务器发出的相对重定向增加主机名:
 
---------------------------------------------------------------------------------------------------
实例说明:
比如在做nginx反向代理时出了一点点问题,原来后端节点用的端口是8080,通过反向代理后,使用wireshark抓包发现location头域数值为http://192.168.1.154:8080/huihui/
如果把这个返回给客户端肯定是不可以的,看起来别扭而且还暴露了后端节点的具体信息。所以在这里用到了nginx的proxy_redirect指定修改被代理服务器返回的响应头中的location头域跟refresh头域数值。
 
前期配置(暴露了后端节点信息)
[root@localhost nginx]# cat test.conf
server {
       listen       80;
阅读全文
0 0
原创粉丝点击