Nginx反向代理、负载均衡详解

简介

官网: http://nginx.org Nginx 是一个高性能 HTTP 和反向代理服务器, 也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 由 IgorSysoev 为俄罗斯访问量排第二的 rambler.ru 网站开发, 第一个开源版本 0.1.0 发布于 2004年10月4号. 源码以 BSD 许可发布.

Nginx 相对于 Apache 的优点

  • 配置简单, 容易上手
  • 内存 和 CPU 占用极低, 约为 Apache 的 1/5 ~ 1/10
  • 高并发响应性能非常好, 官方测试: 支持处理每秒5万静态文件
  • 反向代理性能非常强, 支持多种方式的负载均衡
  • 支持对后端服务做健康检查
  • 支持 PHP cgi 和 fastcgi

安装编译环境

安装编译工具及库文件

yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

安装 PCRE 库

cd /usr/local

wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

tar -zxvf pcre-8.35.tar.gz

cd pcre-8.35

./configure
make
make install

下载并安装 Nginx

# 下载
cd /usr/local
wget http://nginx.org/download/nginx-1.14.0.tar.gz

# 解压
tar -zxvf nginx-1.14.0.tar.gz

# 编译并安装
cd /usr/local/nginx-1.14.0

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/pcre-8.35

make
make install

# 安装完成, 检查 Nginx 版本
/usr/local/nginx/sbin/nginx -v

配置反向代理

vim /usr/local/nginx/conf/nginx.conf

server {
        listen       192.168.1.252:80;
                        # 8000 端口主要用于路由器中的虚拟服务器, 外网转发
        listen       192.168.1.252:8000;
        server_name  192.168.1.252;

        location /wms5 {
                proxy_pass http://192.168.1.252:7070/wms5;
                proxy_read_timeout 900;
                # 客户端最大数据量: 如果大文件上传得修改
                client_max_body_size 1024m;
        }

        location /oms5 {
                proxy_pass http://192.168.1.252:7070/oms5;
                proxy_read_timeout 900;
                client_max_body_size 1024m;
        }
}

检查 conf 配置是否正确

/usr/local/nginx/sbin/nginx -t

启动

# 启动
/usr/local/nginx/sbin/nginx

# 停止
/usr/local/nginx/sbin/nginx -s quit
# 或者
pkill nginx

# 重新加载配置
/usr/local/nginx/sbin/nginx -s reload

Nginx 负载均衡

Upstream 负载均衡 5 中算法

  • 轮询(默认): 每个请求按时间先后逐一分配到不同的服务器, 如果后端某台服务器挂掉, 自动剔除, 待恢复自动添加上.
  • 权重 Weight: 指定轮询权重, 权重越高, 处理请求越多, weight 和 访问比率成正比, 用于后端服务器硬件配置不均的情况.
  • ip_hash: 每个请求根据访问的 IP 的 hash 值结果分配, 这样每个方可固定访问到后端服务器, 可以解决 Session 共享问题.
  • fair: 三方提供, 按后端服务器的响应时间来分配请求, 响应时间短的优先分配
  • url_hash: 三方提供, 根据 URL 的 hash 值结果分配
# 基于权重负载均衡
upstream cluster01 {
        # max_fails, fail_timeout 用来判断后端服务是否健康, 如果在 30s 内失败2次, 则失效
        server localhost:8081 weight=1 max_fails=2 fail_timeout=30s;
        server localhost:8082 weight=1 max_fails=2 fail_timeout=30s;
}

# 基于 ip_hash 负载均衡
upstream cluster02 {
        ip_hash;
        server localhost:8083 fail_timeout=30s;
        server localhost:8084 fail_timeout=30s;
}

配置文件详解

# 启动进程数, 生产设置成 CPU 核心数量
worker_processes  1;

# 错误日志
error_log  logs/error.log error;

events {
        # 单个进程最大并发连接数量
        worker_connections  1024;
}

http {
        # Mime 类型, 由 mime.type 文件定义
        include       mime.types;
        default_type  application/octet-stream;

        # 访问日志
        access_log  logs/access.log info;

        # 是否通过 zero copy 方式输出文件, 普通应用为 on, 对于下载类 中 I/O 应用, 可设置 off 用来平衡磁盘和网络 I/O 处理速度, 降低系统 uptime    
        sendfile        on;

        # 开启目录列表访问, 适合下载服务器, 默认关闭
        autoindex off;

        # 防止网络阻塞
        tcp_nopush     on;

        # 保持客户端连接的超时时间(秒)
        keepalive_timeout  65;

        # 压缩静态资源
        gzip  on;
        gzip_min_length 1k;
        gzip_buffers 4 16k;
        # 压缩级别, 值越小, 压缩比列也小, 但 CPU 处理更快
        gzip_comp_level 2;
        gzip_types text/html,text/xml,text/plain,text/css,text/javascript,application/json,application/xml,application/javascript,image/png

        # 基于权重负载均衡
        upstream cluster01 {
                # max_fails, fail_timeout 用来判断后端服务是否健康, 如果在 30s 内失败2次, 则失效
                server localhost:8081 weight=1 max_fails=2 fail_timeout=30s;
                server localhost:8082 weight=1 max_fails=2 fail_timeout=30s;
        }

        # 基于 ip_hash 负载均衡
        upstream cluster02 {
                ip_hash;
                server localhost:8083 fail_timeout=30s;
                server localhost:8084 fail_timeout=30s;
        }

        # 虚拟主机
        server {
                listen       80;
                server_name  192.168.1.252;

                ## gogs
                location /gogs/ {
                        proxy_pass http://192.168.1.252:3000/;
                        proxy_redirect default;
                        proxy_connect_timeout 900; # 连接超时时间 
                        proxy_read_timeout 900; # 连接成功后, 服务响应时间
                        proxy_send_timeout 900; # 服务回传响应时间
                        client_max_body_size 1024m; # 允许请求最大值
                }

                # 开启 Nginx 监控
                location /status {
                        stub_status on;
                }
        }

        # HTTPS server
        #
        #server {
        #    listen       443 ssl;
        #    server_name  localhost;

        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;

        #    ssl_session_cache    shared:SSL:1m;
        #    ssl_session_timeout  5m;

        #    ssl_ciphers  HIGH:!aNULL:!MD5;
        #    ssl_prefer_server_ciphers  on;

        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值