nginx配置反向代理,ssl证书,负载均衡
反向代理 ssl证书
server {
##监听端口号
listen 443;
listen 80;
##配置项目访问域名
server_name 你的域名:www.aaa.com;
##配置证书
ssl on;
ssl_certificate /usr/local/nginx/123456_www.aaa.com.pem;
ssl_certificate_key /usr/local/nginx/123456_www.aaa.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
#静态资源代理
location / {
##访问www.aaa.com 直接去找/www/server/www.aaa.com目录下的index.html
root /www/server/www.aaa.com;
index index.html index.htm;
}
#接口代理 /xfx-wechat/ 配置前缀, 只要是路径中有xfx-wechat就是去掉用接口
location /xfx-wechat/ {
#root /www/server/www.aaa.com/;
#index index.html index.htm;
#真实ip地址 及端口
proxy_pass http://localhost:8081/;
##因为代理之后请求头中的数据会改变,如拿不到原有请求头中的数据, 用户IP地址等等,如下设置就饿可以了
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
##若有多个需要配置 则继续添加server
server{
##内容如上
}
负载均衡
Nginx实现负载均衡,灰度发布
假设现有4台应用服务器,端口号分别为8080 和8081
1、Nginx的负载分发策略
Nginx 的 upstream目前支持的分配算法:
-----1)、轮询 ——1:1 轮流处理请求(默认)
每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,自动剔除,剩下的继续轮询。
-----2)、权重 —— 你行你多干点 weight=3 分配比重
通过配置权重,指定轮询几率,权重和访问比率成正比,用于应用服务器性能不均的情况。
-----3)、ip绑定_哈希算法
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个应用服务器,可以解决session共享的问题。
2、配置Nginx的负载均衡与分发策略
通过在upstream参数中添加的应用服务器IP后添加指定参数即可实现,如:
upstream webserver1 {
server 192.168.72.49:8080 weight=3; ##应用服务器1
server 192.168.72.50:8080; ##应用服务器2
}
upstream webserver2 {
server 192.168.72.51:8080 weight=3; ##应用服务器3
server 192.168.72.52:8080; ##应用服务器4
}
server {
listen 80;
server_name www.aaa.com;
location / {
##默认转发至webserver1 进行分配
proxy_pass http://webserver1;
##如果请求头中http_x_webserver2为true,则转发至webserver2进行分配
##再使用灰度测试的时候,可以让少量用户请求头转发到webserver2
if($http_x_webserver2 = "true"){
proxy_pass http://webserver2;
}
index index.html index.htm;
}
}
通过以上配置,便可以实现,在访问 www.aaa.com这个网站时,由于配置了proxy_pass地址,所有请求都会先通过nginx反向代理服务器,在服务器将请求转发给目的主机时,读取upstream为 tomcatsever1的地址,读取分发策略,配置tomcat1权重为3,所以nginx会将大部分请求发送给 应用服务器1,也就是8080端口;较少部分 给应用服务器2来实现有条件的负载均衡,当然这个条件就是服务器1、2的硬件指数处理请求能力。
upstream myServer {
server 192.168.72.49:9090 down;
server 192.168.72.49:8080 weight=2;
server 192.168.72.49:6060;
server 192.168.72.49:7070 backup;
}
>down
表示单前的server暂时不参与负载
Weight
默认为1.weight越大,负载的权重就越大。
max_fails
允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
fail_timeout
max_fails 次失败后,暂停的时间。
Backup
其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
**使用Nginx的高可用**
除了要实现网站的高可用,也就是提供n多台服务器用于发布相同的服务,添加负载均衡服务器分发请求以保证在高并发下各台服务器能相对饱和的处理请求。同样,负载均衡服务器也需要高可用,以防如果负载均衡服务器挂掉了,后面的应用服务器也紊乱无法工作。
实现高可用的方案:添加冗余。添加n台nginx服务器以避免发生上述单点故障。具体方案详见下文:keepalive+nginx实现负载均衡高可用