原文链接:nginx负载均衡配置及二级域名配置
nginx配置后实现功能如下:
0. 打印访问日志请求
-
设置不同域名/子域名的转发
-
定制不同域名/子域名的打印访问请求日志
-
实现某个域名下多台服务器的负载均衡配置
以下通过设置域名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*2) 180 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*2) 292 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 }