Nginx负载均衡配置及二级域名配置

时间:2024-03-07 09:45:42

原文链接:nginx负载均衡配置及二级域名配置

nginx配置后实现功能如下:

      0. 打印访问日志请求

  1. 设置不同域名/子域名的转发

  2. 定制不同域名/子域名的打印访问请求日志

  3. 实现某个域名下多台服务器的负载均衡配置

 

以下通过设置域名www.hellosr.com、daxin.hellosr.com为例进行配置说明

对应的nginx的访问请求日志为:www.hellosr.com.access.log、daxin.hellosr.com.access.log

 

【打印访问日志请求】

在nginx可以配置http以及ftp的转发,其中在这里我们专门讲http的协议转发配置。

在http中,通过设置log_format参数对访问日志的格式进行配置。例如:

log_format main \'$remote_addr - $remote_user [$time_local] \'

 \'fwf[$http_x_forwarded_for] tip[$http_true_client_ip] \'

 \'$upstream_addr $upstream_response_time $request_time \'

 \'$http_host $request \'

 \'"$status" $body_bytes_sent "$http_referer" \'

 \'"$http_accept_language" "$http_user_agent" \';

对应的日志内容示例:

66.249.64.41 - - [08/Aug/2016:18:38:05 +0800] "GET /resource/css/responsive.css HTTP/1.1" 200 2590 "http://hellosr.com/" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

 

通过这种方式打印了http访问的大部分重要数据,后续程序可以通过分析nginx的访问日志,对用户的地域,访问习惯,操作行为等数据进行分析。

 

 

【设置不同域名的转发】

在一个nginx的http配置中,可以通过配置多个server,来实现多个域名的转发

 

 1    server {
 2 
 3 #侦听80端口
 4 
 5         listen       80;
 6 
 7         #定义使用www.xx.com访问
 8 
 9         server_name  www.hellosr.com;
10 
11         #设定本虚拟主机的访问日志
12 
13    access_log  logs/www.hellosr.com.access.log;
14 
15     }
16 
17  
18 
19 server {
20 
21 #侦听80端口
22 
23         listen       80;
24 
25         #定义使用www.xx.com访问
26 
27         server_name  daxin.hellosr.com;
28 
29         #设定本虚拟主机的访问日志
30 
31   access_log  logs/daxin.hellosr.com.access.log;
32 
33     }

 

 

通过server_name 进行指定不同的域名,server_name可以添加多个,每个中间用空格隔开,例如:server_name  www.hellosr.com localhost 127.0.0.1 ;

【定制不同域名的打印访问请求日志】

通过access_log 来指定不同server访问日志的打印路径。

 

【实现某个域名下多台服务器的负载均衡配置】

nginx的负载均衡配置是通过vhost和upstream进行设置,设置方式如下

 

 1 upstream daxin.hellosr.com {
 2 
 3 #weigth参数表示权值,权值越高被分配到的几率越大
 4 
 5 #本机上的Squid开启3128端口
 6 
 7 server 127.0.0.1:8180 weight=5;
 8 
 9 server 127.0.0.1:8180 weight=5;
10 
11     }
12 
13  
14 
15 server {
16 
17 #侦听80端口
18 
19         listen       80;
20 
21         #定义使用www.xx.com访问
22 
23         server_name  daxin.hellosr.com;
24 
25         #设定本虚拟主机的访问日志
26 
27 access_log  logs/daxin.hellosr.com.access.log;
28 
29 #默认请求
30 
31 location / {
32 
33 root   /root;      #定义服务器的默认网站根目录位置
34 
35 index index.htm;   #定义首页索引文件的名称
36 
37 proxy_pass  http://daxin.hellosr.com ;#请求转向daxin.hellosr.com定义的服务器列表  
38 
39 }
40 
41     }

 

在server中,通过对proxy_pass和upstream的配置来实现负载均衡。

负载均衡的策略也可以在upstream中进行定制。

 

 

 

【完整的配置文件如下】

 

  1 #运行用户
  2 
  3 #user www-data;    
  4 
  5 #启动进程,通常设置成和cpu的数量相等
  6 
  7 worker_processes  2;
  8 
  9  
 10 
 11 #全局错误日志及PID文件
 12 
 13 #error_log  /home/nginx/logs/error.log;
 14 
 15 #pid        /home/nginx/logs/nginx.pid;
 16 
 17 #工作模式及连接数上限
 18 
 19 events {
 20 
 21     use   epoll;             #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
 22 
 23     worker_connections  1024;#单个后台worker process进程的最大并发链接数
 24 
 25     # multi_accept on; 
 26 
 27 }
 28 
 29 #设定http服务器,利用它的反向代理功能提供负载均衡支持
 30 
 31 http {
 32 
 33      #设定mime类型,类型由mime.type文件定义
 34 
 35     include       /home/nginx/conf/mime.types;
 36 
 37     default_type  application/octet-stream;
 38 
 39     #设定日志格式
 40 
 41     #access_log    /var/log/nginx/access.log;
 42 
 43     #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
 44 
 45     #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
 46 
 47     sendfile        on;
 48 
 49     #tcp_nopush     on;
 50 
 51     #连接超时时间
 52 
 53     #keepalive_timeout  0;
 54 
 55     keepalive_timeout  65;
 56 
 57     tcp_nodelay        on;
 58 
 59     
 60 
 61     #开启gzip压缩
 62 
 63     gzip  on;
 64 
 65     gzip_disable "MSIE [1-6]\.(?!.*SV1)";
 66 
 67     #设定请求缓冲
 68 
 69     client_header_buffer_size    1k;
 70 
 71     large_client_header_buffers  4 4k;
 72 
 73 #日志格式
 74 
 75 log_format main \'$remote_addr - $remote_user [$time_local] \'
 76 
 77  \'fwf[$http_x_forwarded_for] tip[$http_true_client_ip] \'
 78 
 79  \'$upstream_addr $upstream_response_time $request_time \'
 80 
 81  \'$http_host $request \'
 82 
 83  \'"$status" $body_bytes_sent "$http_referer" \'
 84 
 85  \'"$http_accept_language" "$http_user_agent" \';
 86 
 87     #include /etc/nginx/conf.d/*.conf;
 88 
 89     #include /etc/nginx/sites-enabled/*;
 90 
 91     #设定负载均衡的服务器列表
 92 
 93 upstream www.hellosr.com {
 94 
 95 #weigth参数表示权值,权值越高被分配到的几率越大
 96 
 97 #本机上的Squid开启3128端口
 98 
 99 server 127.0.0.1:8280 weight=5;
100 
101 server 127.0.0.1:8280 weight=5;
102 
103     }
104 
105  
106 
107 upstream daxin.hellosr.com {
108 
109 #weigth参数表示权值,权值越高被分配到的几率越大
110 
111 #本机上的Squid开启3128端口
112 
113 server 127.0.0.1:8180 weight=5;
114 
115 server 127.0.0.1:8180 weight=5;
116 
117     }
118 
119  
120 
121    server {
122 
123 #侦听80端口
124 
125         listen       80;
126 
127         #定义使用www.xx.com访问
128 
129         server_name  www.hellosr.com;
130 
131         #设定本虚拟主机的访问日志
132 
133 access_log  logs/www.hellosr.com.access.log;
134 
135 #默认请求
136 
137  
138 
139  
140 
141 location / {
142 
143 root   /root;      #定义服务器的默认网站根目录位置
144 
145 index index.htm;   #定义首页索引文件的名称
146 
147  
148 
149 proxy_pass  http://www.hellosr.com ;#请求转向mysvr 定义的服务器列表
150 
151   
152 
153 #以下是一些反向代理的配置可删除.
154 
155 proxy_redirect off;
156 
157 #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
158 
159 proxy_set_header Host $host;
160 
161 proxy_set_header X-Real-IP $remote_addr;
162 
163 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
164 
165 client_max_body_size 10m;    #允许客户端请求的最大单文件字节数
166 
167 client_body_buffer_size 128k;  #缓冲区代理缓冲用户端请求的最大字节数,
168 
169 proxy_connect_timeout 90;  #nginx跟后端服务器连接超时时间(代理连接超时)
170 
171 proxy_send_timeout 90;        #后端服务器数据回传时间(代理发送超时)
172 
173 proxy_read_timeout 90;         #连接成功后,后端服务器响应时间(代理接收超时)
174 
175 proxy_buffer_size 4k;             #设置代理服务器(nginx)保存用户头信息的缓冲区大小
176 
177 proxy_buffers 4 32k;               #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
178 
179 proxy_busy_buffers_size 64k;    #高负荷下缓冲大小(proxy_buffers*2180 
181 proxy_temp_file_write_size 64k;  #设定缓存文件夹大小,大于这个值,将从upstream服务器传
182 
183  
184 
185 }
186 
187 # 定义错误提示页面
188 
189 error_page   500 502 503 504 /50x.html;  
190 
191 location = /50x.html {
192 
193 root   /root;
194 
195 }
196 
197 #静态文件,nginx自己处理
198 
199 location ~ ^/(images|javascript|js|css|flash|media)/ {
200 
201 root /home/nginx/virtual/htdocs;
202 
203 #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。
204 
205 expires 30d;
206 
207 }
208 
209  
210 
211 #设定查看Nginx状态的地址
212 
213 location /NginxStatus {
214 
215 stub_status            on;
216 
217 access_log              on;
218 
219 auth_basic              "NginxStatus";
220 
221 auth_basic_user_file  conf/htpasswd;
222 
223 }
224 
225 #禁止访问 .htxxx 文件
226 
227 #location ~ /\.ht {
228 
229 #    deny all;
230 
231 #}
232 
233     }
234 
235  
236 
237 server {
238 
239 #侦听80端口
240 
241         listen       80;
242 
243         #定义使用www.xx.com访问
244 
245         server_name  daxin.hellosr.com;
246 
247         #设定本虚拟主机的访问日志
248 
249 access_log  logs/daxin.hellosr.com.access.log;
250 
251 #默认请求
252 
253 location / {
254 
255 root   /root;      #定义服务器的默认网站根目录位置
256 
257 index index.htm;   #定义首页索引文件的名称
258 
259  
260 
261 proxy_pass  http://daxin.hellosr.com ;#请求转向mysvr 定义的服务器列表
262 
263   
264 
265 #以下是一些反向代理的配置可删除.
266 
267 proxy_redirect off;
268 
269 #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
270 
271 proxy_set_header Host $host;
272 
273 proxy_set_header X-Real-IP $remote_addr;
274 
275 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
276 
277 client_max_body_size 10m;    #允许客户端请求的最大单文件字节数
278 
279 client_body_buffer_size 128k;  #缓冲区代理缓冲用户端请求的最大字节数,
280 
281 proxy_connect_timeout 90;  #nginx跟后端服务器连接超时时间(代理连接超时)
282 
283 proxy_send_timeout 90;        #后端服务器数据回传时间(代理发送超时)
284 
285 proxy_read_timeout 90;         #连接成功后,后端服务器响应时间(代理接收超时)
286 
287 proxy_buffer_size 4k;             #设置代理服务器(nginx)保存用户头信息的缓冲区大小
288 
289 proxy_buffers 4 32k;               #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
290 
291 proxy_busy_buffers_size 64k;    #高负荷下缓冲大小(proxy_buffers*2292 
293 proxy_temp_file_write_size 64k;  #设定缓存文件夹大小,大于这个值,将从upstream服务器传
294 
295  
296 
297 }
298 
299 # 定义错误提示页面
300 
301 error_page   500 502 503 504 /50x.html;  
302 
303 location = /50x.html {
304 
305 root   /root;
306 
307 }
308 
309 #静态文件,nginx自己处理
310 
311 location ~ ^/(images|javascript|js|css|flash|media)/ {
312 
313 root /home/nginx/virtual/htdocs;
314 
315 #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。
316 
317 expires 30d;
318 
319 }
320 
321  
322 
323 #设定查看Nginx状态的地址
324 
325 location /NginxStatus {
326 
327 stub_status            on;
328 
329 access_log              on;
330 
331 auth_basic              "NginxStatus";
332 
333 auth_basic_user_file  conf/htpasswd;
334 
335 }
336 
337 #禁止访问 .htxxx 文件
338 
339 #location ~ /\.ht {
340 
341 #    deny all;
342 
343 #}
344 
345     }
346 
347  
348 
349 }