今天学习了Nginx的安装以及相关配置,此处做记录
Nginx
- 简介:Nginx本质上是一个轻量级的Web服务器
- Nginx的主要作用包含以下两点:
- Nginx是一个反响代理服务器
- Nginx可作负载均衡
代理服务器
- 个人理解:代理服务器主要分为正向代理服务器和反向代理服务器
- 正向代理服务器:正向代理服务器主要”代理”的是客户端,向服务器隐藏了真实的客户端。常见的就是VPN
- 反向代理服务器:反向代理服务器主要”代理”的是服务端,向客户端隐藏了真实的服务器。常见的就是Java Web的Nginx服务器
Nginx的简单流程
- 当用户的请求到达Nginx的时候,Nginx根据url和端口根据conf配置文件将请求转发到后台服务器当中。
Nginx相关配置
- nginx的配置如下所示:
upstream plus_abc {
server 127.0.0.1:3000;
//1.可作负载均衡
//2.可对后端机器进行healthcheck
}
server {
listen 8080;
server_name hello.world.com
listen 443 ssl;
#ssl on;
ssl_certificate /home/q/nginx/conf/server.crt;
ssl_certificate_key /home/q/nginx/conf/server.key;
if ( $request_method !~ ^(GET|POST|HEAD)$ ) {
return 403;
}
gzip on;
gzip_http_version 1.1;
gzip_min_length 1000;
gzip_buffers 256 64k;
gzip_comp_level 5;
gzip_types text/css text/javascript application/x-javascript text/plain text/xml html;
#include qwaf.conf;
proxy_buffers 64 4k;
location /plus{ //location
proxy_pass http://plus_abc;
//相关配置
}
}
- 相关步骤讲解:
- 当nginx服务器监听到8080端口的请求,匹配location
- 当匹配上location /plus之后,获取proxy_pass的值,此时是http://plush_abc
- 再匹配up_stream,当匹配到对应的up_stream之后,将url请求转发到up_stream中对应的服务器上
upstream模块
- nginx配置中的upstream模块不仅可以将请求转发到后台服务器上,还可以起到负载均衡和对后端机器heathcheck的作用
负载均衡
- 在upstream中对后端机器做负载均衡的相关配置,nginx目前支持五种负载均衡的方式,如下所示:
- 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
upstream backserver {
server 127.0.0.1:8080; # 用于指定后端服务器的,默认方式
server 127.0.0.1:8081;
......
}
- weight:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况
upstream backserver {
server host:port weight=10;
server host:port weight=90;
}
- ip_hash:每个请求按访问ip的hash结果分配,可以将某个客户端的请求通过ip_hash算法打到同一台后端服务器上。缺点:无法保证后端服务器的负债均衡,因为ip的不均匀hash可能会导致后端服务器接收到的请求不均匀
upstream backserver {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
......
}
- fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver {
server server1;
server server2;
fair;
}
- url_hash(第三方):按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
healthcheck
- 相关配置如下:
upstream backserver {
server 192.168.237.186:10086;
healthcheck_enabled;
healthcheck_delay 10000;
healthcheck_timeout 1000;
healthcheck_failcount 2;
healthcheck_send 'GET /test HTTP/1.0' 'Host: xxcupid1.qunar.com' 'Connection: close';
}
- healthcheck_enabled ##启用此模块
- healthcheck_delay ##对同一台后端服务器两次检测之间的时间间隔,单位毫秒,默认为1000;
- healthcheck_timeout ##进行一次健康检测的超时时间,单位为毫秒,默认值2000;
- healthcheck_failcount ##对一台后端服务器检测成功或失败多少次之后方才确定其为成功或失败,并实现启用或禁用此服务器;
- healthcheck_send ##为了检测后端服务器的健康状态所发送的检测请求;如:healthcheck_send “GET /health HTTP/1.0” ‘Host: coolinuz.9966.org’;