centos7 nginx安装并负载均衡高并发WCF/Web以及负载策略配置
最近需要在开发中使用到负载均衡,有两种选择,一个是HA一个就是nginx,考虑过后选择nginx做负载均衡,首先大家可以参考这篇文章:链接写的非常好,思路十分清晰并且有图,这里我就不在赘述,接下来给大家介绍:
- 如何在centos7 中安装nginx
- 如何配置负载均衡(nginx.conf配置)
负载策略配置
首先是安装nginx,参考:怪才(Kencery) 一枝花算不算浪漫 凌激冰
nginx包下载nginx由于nginx需要SSL功能,gzip模块,rewrite模块,以及编译安装需要安装gcc gcc-c++,所以需要openssl库openssl,zlib库zlib,pcre库pcre
这里为了方便就直接yum安装了:
[root@localhost nginx-1.10.1]# yum install -y zlib zlib-devel
[root@localhost nginx-1.10.1]# yum install -y pcre pcre-devel
[root@localhost nginx-1.10.1]# yum install -y openssl openssl-devel
[root@localhost nginx-1.10.1]# yum install -y gcc gcc-c++
[root@localhost nginx-1.10.1]# yum install -y pcre pcre-devel
已加载插件:fastestmirror, langpacks
base | 3.6 kB 00:00
extras | 3.4 kB 00:00
updates | 3.4 kB 00:00
updates/7/x86_64/primary_db | 3.6 MB 00:14
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 pcre.x86_64.0.8.32-15.el7_2.1 将被 升级
---> 软件包 pcre.x86_64.0.8.32-17.el7 将被 更新
---> 软件包 pcre-devel.x86_64.0.8.32-17.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
================================================================================
Package 架构 版本 源 大小
================================================================================
正在安装:
pcre-devel x86_64 8.32-17.el7 base 480 k
正在更新:
pcre x86_64 8.32-17.el7 base 422 k
事务概要
================================================================================
安装 1 软件包
升级 1 软件包
总计:902 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在更新 : pcre-8.32-17.el7.x86_64 1/3
正在安装 : pcre-devel-8.32-17.el7.x86_64 2/3
清理 : pcre-8.32-15.el7_2.1.x86_64 3/3
验证中 : pcre-devel-8.32-17.el7.x86_64 1/3
验证中 : pcre-8.32-17.el7.x86_64 2/3
验证中 : pcre-8.32-15.el7_2.1.x86_64 3/3
已安装:
pcre-devel.x86_64 0:8.32-17.el7
更新完毕:
pcre.x86_64 0:8.32-17.el7
完毕!
[root@localhost nginx-1.10.1]# yum install -y zlib zlib-devel
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
软件包 zlib-1.2.7-17.el7.x86_64 已安装并且是最新版本
正在解决依赖关系
--> 正在检查事务
---> 软件包 zlib-devel.x86_64.0.1.2.7-17.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
================================================================================
Package 架构 版本 源 大小
================================================================================
正在安装:
zlib-devel x86_64 1.2.7-17.el7 base 50 k
事务概要
================================================================================
安装 1 软件包
总计:50 k
安装大小:132 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : zlib-devel-1.2.7-17.el7.x86_64 1/1
验证中 : zlib-devel-1.2.7-17.el7.x86_64 1/1
已安装:
zlib-devel.x86_64 0:1.2.7-17.el7
完毕!
[root@localhost nginx-1.10.1]# yum install -y openssl openssl-devel
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 openssl.x86_64.1.1.0.1e-60.el7 将被 升级
---> 软件包 openssl.x86_64.1.1.0.2k-8.el7 将被 更新
--> 正在处理依赖关系 openssl-libs(x86-64) = 1:1.0.2k-8.el7,它被软件包 1:openssl-1.0.2k-8.el7.x86_64 需要
--> 正在处理依赖关系 libcrypto.so.10(OPENSSL_1.0.2)(64bit),它被软件包 1:openssl-1.0.2k-8.el7.x86_64 需要
---> 软件包 openssl-devel.x86_64.1.1.0.2k-8.el7 将被 安装
--> 正在处理依赖关系 krb5-devel(x86-64),它被软件包 1:openssl-devel-1.0.2k-8.el7.x86_64 需要
--> 正在检查事务
---> 软件包 krb5-devel.x86_64.0.1.15.1-8.el7 将被 安装
--> 正在处理依赖关系 libkadm5(x86-64) = 1.15.1-8.el7,它被软件包 krb5-devel-1.15.1-8.el7.x86_64 需要
--> 正在处理依赖关系 krb5-libs(x86-64) = 1.15.1-8.el7,它被软件包 krb5-devel-1.15.1-8.el7.x86_64 需要
--> 正在处理依赖关系 libverto-devel,它被软件包 krb5-devel-1.15.1-8.el7.x86_64 需要
--> 正在处理依赖关系 libselinux-devel,它被软件包 krb5-devel-1.15.1-8.el7.x86_64 需要
--> 正在处理依赖关系 libcom_err-devel,它被软件包 krb5-devel-1.15.1-8.el7.x86_64 需要
--> 正在处理依赖关系 keyutils-libs-devel,它被软件包 krb5-devel-1.15.1-8.el7.x86_64 需要
---> 软件包 openssl-libs.x86_64.1.1.0.1e-60.el7 将被 升级
---> 软件包 openssl-libs.x86_64.1.1.0.2k-8.el7 将被 更新
--> 正在检查事务
---> 软件包 keyutils-libs-devel.x86_64.0.1.5.8-3.el7 将被 安装
---> 软件包 krb5-libs.x86_64.0.1.14.1-26.el7 将被 升级
--> 正在处理依赖关系 krb5-libs(x86-64) = 1.14.1-26.el7,它被软件包 krb5-workstation-1.14.1-26.el7.x86_64 需要
---> 软件包 krb5-libs.x86_64.0.1.15.1-8.el7 将被 更新
---> 软件包 libcom_err-devel.x86_64.0.1.42.9-10.el7 将被 安装
--> 正在处理依赖关系 libcom_err(x86-64) = 1.42.9-10.el7,它被软件包 libcom_err-devel-1.42.9-10.el7.x86_64 需要
---> 软件包 libkadm5.x86_64.0.1.14.1-26.el7 将被 升级
---> 软件包 libkadm5.x86_64.0.1.15.1-8.el7 将被 更新
---> 软件包 libselinux-devel.x86_64.0.2.5-11.el7 将被 安装
--> 正在处理依赖关系 libselinux(x86-64) = 2.5-11.el7,它被软件包 libselinux-devel-2.5-11.el7.x86_64 需要
--> 正在处理依赖关系 libsepol-devel(x86-64) >= 2.5-6,它被软件包 libselinux-devel-2.5-11.el7.x86_64 需要
--> 正在处理依赖关系 pkgconfig(libsepol),它被软件包 libselinux-devel-2.5-11.el7.x86_64 需要
---> 软件包 libverto-devel.x86_64.0.0.2.5-4.el7 将被 安装
--> 正在检查事务
---> 软件包 krb5-workstation.x86_64.0.1.14.1-26.el7 将被 升级
---> 软件包 krb5-workstation.x86_64.0.1.15.1-8.el7 将被 更新
---> 软件包 libcom_err.x86_64.0.1.42.9-9.el7 将被 升级
--> 正在处理依赖关系 libcom_err(x86-64) = 1.42.9-9.el7,它被软件包 libss-1.42.9-9.el7.x86_64 需要
--> 正在处理依赖关系 libcom_err(x86-64) = 1.42.9-9.el7,它被软件包 e2fsprogs-libs-1.42.9-9.el7.x86_64 需要
--> 正在处理依赖关系 libcom_err(x86-64) = 1.42.9-9.el7,它被软件包 e2fsprogs-1.42.9-9.el7.x86_64 需要
---> 软件包 libcom_err.x86_64.0.1.42.9-10.el7 将被 更新
---> 软件包 libselinux.x86_64.0.2.5-6.el7 将被 升级
--> 正在处理依赖关系 libselinux(x86-64) = 2.5-6.el7,它被软件包 libselinux-python-2.5-6.el7.x86_64 需要
--> 正在处理依赖关系 libselinux(x86-64) = 2.5-6.el7,它被软件包 libselinux-utils-2.5-6.el7.x86_64 需要
---> 软件包 libselinux.x86_64.0.2.5-11.el7 将被 更新
---> 软件包 libsepol-devel.x86_64.0.2.5-6.el7 将被 安装
--> 正在检查事务
---> 软件包 e2fsprogs.x86_64.0.1.42.9-9.el7 将被 升级
---> 软件包 e2fsprogs.x86_64.0.1.42.9-10.el7 将被 更新
---> 软件包 e2fsprogs-libs.x86_64.0.1.42.9-9.el7 将被 升级
---> 软件包 e2fsprogs-libs.x86_64.0.1.42.9-10.el7 将被 更新
---> 软件包 libselinux-python.x86_64.0.2.5-6.el7 将被 升级
---> 软件包 libselinux-python.x86_64.0.2.5-11.el7 将被 更新
---> 软件包 libselinux-utils.x86_64.0.2.5-6.el7 将被 升级
---> 软件包 libselinux-utils.x86_64.0.2.5-11.el7 将被 更新
---> 软件包 libss.x86_64.0.1.42.9-9.el7 将被 升级
---> 软件包 libss.x86_64.0.1.42.9-10.el7 将被 更新
--> 解决依赖关系完成
依赖关系解决
================================================================================
Package 架构 版本 源 大小
================================================================================
正在安装:
openssl-devel x86_64 1:1.0.2k-8.el7 base 1.5 M
正在更新:
openssl x86_64 1:1.0.2k-8.el7 base 492 k
为依赖而安装:
keyutils-libs-devel x86_64 1.5.8-3.el7 base 37 k
krb5-devel x86_64 1.15.1-8.el7 base 266 k
libcom_err-devel x86_64 1.42.9-10.el7 base 31 k
libselinux-devel x86_64 2.5-11.el7 base 186 k
libsepol-devel x86_64 2.5-6.el7 base 74 k
libverto-devel x86_64 0.2.5-4.el7 base 12 k
为依赖而更新:
e2fsprogs x86_64 1.42.9-10.el7 base 698 k
e2fsprogs-libs x86_64 1.42.9-10.el7 base 166 k
krb5-libs x86_64 1.15.1-8.el7 base 747 k
krb5-workstation x86_64 1.15.1-8.el7 base 811 k
libcom_err x86_64 1.42.9-10.el7 base 40 k
libkadm5 x86_64 1.15.1-8.el7 base 174 k
libselinux x86_64 2.5-11.el7 base 162 k
libselinux-python x86_64 2.5-11.el7 base 234 k
libselinux-utils x86_64 2.5-11.el7 base 151 k
libss x86_64 1.42.9-10.el7 base 45 k
openssl-libs x86_64 1:1.0.2k-8.el7 base 1.2 M
事务概要
================================================================================
安装 1 软件包 (+ 6 依赖软件包)
升级 1 软件包 (+11 依赖软件包)
总计:6.9 M
总下载量:1.2 M
Downloading packages:
No Presto metadata available for base
openssl-libs-1.0.2k-8.el7.x86_64.rpm | 1.2 MB 00:21
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在更新 : libcom_err-1.42.9-10.el7.x86_64 1/31
正在更新 : libselinux-2.5-11.el7.x86_64 2/31
正在更新 : 1:openssl-libs-1.0.2k-8.el7.x86_64 3/31
正在更新 : krb5-libs-1.15.1-8.el7.x86_64 4/31
正在更新 : libkadm5-1.15.1-8.el7.x86_64 5/31
正在更新 : libss-1.42.9-10.el7.x86_64 6/31
正在安装 : libcom_err-devel-1.42.9-10.el7.x86_64 7/31
正在更新 : e2fsprogs-libs-1.42.9-10.el7.x86_64 8/31
正在安装 : libverto-devel-0.2.5-4.el7.x86_64 9/31
正在安装 : libsepol-devel-2.5-6.el7.x86_64 10/31
正在安装 : libselinux-devel-2.5-11.el7.x86_64 11/31
正在安装 : keyutils-libs-devel-1.5.8-3.el7.x86_64 12/31
正在安装 : krb5-devel-1.15.1-8.el7.x86_64 13/31
正在安装 : 1:openssl-devel-1.0.2k-8.el7.x86_64 14/31
正在更新 : e2fsprogs-1.42.9-10.el7.x86_64 15/31
正在更新 : krb5-workstation-1.15.1-8.el7.x86_64 16/31
正在更新 : 1:openssl-1.0.2k-8.el7.x86_64 17/31
正在更新 : libselinux-utils-2.5-11.el7.x86_64 18/31
正在更新 : libselinux-python-2.5-11.el7.x86_64 19/31
清理 : krb5-workstation-1.14.1-26.el7.x86_64 20/31
清理 : e2fsprogs-1.42.9-9.el7.x86_64 21/31
清理 : 1:openssl-1.0.1e-60.el7.x86_64 22/31
清理 : libkadm5-1.14.1-26.el7.x86_64 23/31
清理 : 1:openssl-libs-1.0.1e-60.el7.x86_64 24/31
清理 : krb5-libs-1.14.1-26.el7.x86_64 25/31
清理 : e2fsprogs-libs-1.42.9-9.el7.x86_64 26/31
清理 : libss-1.42.9-9.el7.x86_64 27/31
清理 : libselinux-python-2.5-6.el7.x86_64 28/31
清理 : libselinux-utils-2.5-6.el7.x86_64 29/31
清理 : libselinux-2.5-6.el7.x86_64 30/31
清理 : libcom_err-1.42.9-9.el7.x86_64 31/31
验证中 : libss-1.42.9-10.el7.x86_64 1/31
验证中 : libselinux-utils-2.5-11.el7.x86_64 2/31
验证中 : keyutils-libs-devel-1.5.8-3.el7.x86_64 3/31
验证中 : libselinux-2.5-11.el7.x86_64 4/31
验证中 : libselinux-python-2.5-11.el7.x86_64 5/31
验证中 : libsepol-devel-2.5-6.el7.x86_64 6/31
验证中 : libkadm5-1.15.1-8.el7.x86_64 7/31
验证中 : 1:openssl-1.0.2k-8.el7.x86_64 8/31
验证中 : libverto-devel-0.2.5-4.el7.x86_64 9/31
验证中 : libcom_err-devel-1.42.9-10.el7.x86_64 10/31
验证中 : 1:openssl-libs-1.0.2k-8.el7.x86_64 11/31
验证中 : 1:openssl-devel-1.0.2k-8.el7.x86_64 12/31
验证中 : libselinux-devel-2.5-11.el7.x86_64 13/31
验证中 : krb5-workstation-1.15.1-8.el7.x86_64 14/31
验证中 : libcom_err-1.42.9-10.el7.x86_64 15/31
验证中 : e2fsprogs-libs-1.42.9-10.el7.x86_64 16/31
验证中 : krb5-devel-1.15.1-8.el7.x86_64 17/31
验证中 : e2fsprogs-1.42.9-10.el7.x86_64 18/31
验证中 : krb5-libs-1.15.1-8.el7.x86_64 19/31
验证中 : libss-1.42.9-9.el7.x86_64 20/31
验证中 : libselinux-python-2.5-6.el7.x86_64 21/31
验证中 : libselinux-utils-2.5-6.el7.x86_64 22/31
验证中 : krb5-workstation-1.14.1-26.el7.x86_64 23/31
验证中 : 1:openssl-libs-1.0.1e-60.el7.x86_64 24/31
验证中 : 1:openssl-1.0.1e-60.el7.x86_64 25/31
验证中 : libselinux-2.5-6.el7.x86_64 26/31
验证中 : libcom_err-1.42.9-9.el7.x86_64 27/31
验证中 : e2fsprogs-libs-1.42.9-9.el7.x86_64 28/31
验证中 : libkadm5-1.14.1-26.el7.x86_64 29/31
验证中 : e2fsprogs-1.42.9-9.el7.x86_64 30/31
验证中 : krb5-libs-1.14.1-26.el7.x86_64 31/31
已安装:
openssl-devel.x86_64 1:1.0.2k-8.el7
作为依赖被安装:
keyutils-libs-devel.x86_64 0:1.5.8-3.el7 krb5-devel.x86_64 0:1.15.1-8.el7
libcom_err-devel.x86_64 0:1.42.9-10.el7 libselinux-devel.x86_64 0:2.5-11.el7
libsepol-devel.x86_64 0:2.5-6.el7 libverto-devel.x86_64 0:0.2.5-4.el7
更新完毕:
openssl.x86_64 1:1.0.2k-8.el7
作为依赖被升级:
e2fsprogs.x86_64 0:1.42.9-10.el7 e2fsprogs-libs.x86_64 0:1.42.9-10.el7
krb5-libs.x86_64 0:1.15.1-8.el7 krb5-workstation.x86_64 0:1.15.1-8.el7
libcom_err.x86_64 0:1.42.9-10.el7 libkadm5.x86_64 0:1.15.1-8.el7
libselinux.x86_64 0:2.5-11.el7 libselinux-python.x86_64 0:2.5-11.el7
libselinux-utils.x86_64 0:2.5-11.el7 libss.x86_64 0:1.42.9-10.el7
openssl-libs.x86_64 1:1.0.2k-8.el7
完毕!
[root@localhost nginx-1.10.1]# yum install gcc
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 gcc.x86_64.0.4.8.5-11.el7 将被 升级
--> 正在处理依赖关系 gcc = 4.8.5-11.el7,它被软件包 gcc-c++-4.8.5-11.el7.x86_64 需要
---> 软件包 gcc.x86_64.0.4.8.5-16.el7 将被 更新
--> 正在处理依赖关系 libgomp = 4.8.5-16.el7,它被软件包 gcc-4.8.5-16.el7.x86_64 需要
--> 正在处理依赖关系 cpp = 4.8.5-16.el7,它被软件包 gcc-4.8.5-16.el7.x86_64 需要
--> 正在处理依赖关系 libgcc >= 4.8.5-16.el7,它被软件包 gcc-4.8.5-16.el7.x86_64 需要
--> 正在检查事务
---> 软件包 cpp.x86_64.0.4.8.5-11.el7 将被 升级
---> 软件包 cpp.x86_64.0.4.8.5-16.el7 将被 更新
---> 软件包 gcc-c++.x86_64.0.4.8.5-11.el7 将被 升级
---> 软件包 gcc-c++.x86_64.0.4.8.5-16.el7 将被 更新
--> 正在处理依赖关系 libstdc++-devel = 4.8.5-16.el7,它被软件包 gcc-c++-4.8.5-16.el7.x86_64 需要
--> 正在处理依赖关系 libstdc++ = 4.8.5-16.el7,它被软件包 gcc-c++-4.8.5-16.el7.x86_64 需要
---> 软件包 libgcc.x86_64.0.4.8.5-11.el7 将被 升级
---> 软件包 libgcc.x86_64.0.4.8.5-16.el7 将被 更新
---> 软件包 libgomp.x86_64.0.4.8.5-11.el7 将被 升级
---> 软件包 libgomp.x86_64.0.4.8.5-16.el7 将被 更新
--> 正在检查事务
---> 软件包 libstdc++.x86_64.0.4.8.5-11.el7 将被 升级
---> 软件包 libstdc++.x86_64.0.4.8.5-16.el7 将被 更新
---> 软件包 libstdc++-devel.x86_64.0.4.8.5-11.el7 将被 升级
---> 软件包 libstdc++-devel.x86_64.0.4.8.5-16.el7 将被 更新
--> 解决依赖关系完成
依赖关系解决
================================================================================
Package 架构 版本 源 大小
================================================================================
正在更新:
gcc x86_64 4.8.5-16.el7 base 16 M
为依赖而更新:
cpp x86_64 4.8.5-16.el7 base 5.9 M
gcc-c++ x86_64 4.8.5-16.el7 base 7.2 M
libgcc x86_64 4.8.5-16.el7 base 98 k
libgomp x86_64 4.8.5-16.el7 base 154 k
libstdc++ x86_64 4.8.5-16.el7 base 301 k
libstdc++-devel x86_64 4.8.5-16.el7 base 1.5 M
事务概要
================================================================================
升级 1 软件包 (+6 依赖软件包)
总计:31 M
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在更新 : libgcc-4.8.5-16.el7.x86_64 1/14
正在更新 : libstdc++-4.8.5-16.el7.x86_64 2/14
正在更新 : libstdc++-devel-4.8.5-16.el7.x86_64 3/14
正在更新 : libgomp-4.8.5-16.el7.x86_64 4/14
正在更新 : cpp-4.8.5-16.el7.x86_64 5/14
正在更新 : gcc-4.8.5-16.el7.x86_64 6/14
正在更新 : gcc-c++-4.8.5-16.el7.x86_64 7/14
清理 : gcc-c++-4.8.5-11.el7.x86_64 8/14
清理 : libstdc++-devel-4.8.5-11.el7.x86_64 9/14
清理 : gcc-4.8.5-11.el7.x86_64 10/14
清理 : libstdc++-4.8.5-11.el7.x86_64 11/14
清理 : libgcc-4.8.5-11.el7.x86_64 12/14
清理 : cpp-4.8.5-11.el7.x86_64 13/14
清理 : libgomp-4.8.5-11.el7.x86_64 14/14
验证中 : libgcc-4.8.5-16.el7.x86_64 1/14
验证中 : cpp-4.8.5-16.el7.x86_64 2/14
验证中 : gcc-c++-4.8.5-16.el7.x86_64 3/14
验证中 : libstdc++-devel-4.8.5-16.el7.x86_64 4/14
验证中 : libstdc++-4.8.5-16.el7.x86_64 5/14
验证中 : libgomp-4.8.5-16.el7.x86_64 6/14
验证中 : gcc-4.8.5-16.el7.x86_64 7/14
验证中 : gcc-c++-4.8.5-11.el7.x86_64 8/14
验证中 : libgcc-4.8.5-11.el7.x86_64 9/14
验证中 : libgomp-4.8.5-11.el7.x86_64 10/14
验证中 : gcc-4.8.5-11.el7.x86_64 11/14
验证中 : libstdc++-4.8.5-11.el7.x86_64 12/14
验证中 : libstdc++-devel-4.8.5-11.el7.x86_64 13/14
验证中 : cpp-4.8.5-11.el7.x86_64 14/14
更新完毕:
gcc.x86_64 0:4.8.5-16.el7
作为依赖被升级:
cpp.x86_64 0:4.8.5-16.el7 gcc-c++.x86_64 0:4.8.5-16.el7
libgcc.x86_64 0:4.8.5-16.el7 libgomp.x86_64 0:4.8.5-16.el7
libstdc++.x86_64 0:4.8.5-16.el7 libstdc++-devel.x86_64 0:4.8.5-16.el7
完毕!
安装完依赖项就来安装nginx,首先解压包:
tar -zxvf nginx-1.10.1.tar.gz
接下来进入nginx目录:
[root@localhost nginx]# cd nginx-1.10.1
[root@localhost nginx-1.10.1]# ./configure
[root@localhost nginx-1.10.1]# make
[root@localhost nginx-1.10.1]# make install
到这里安装就结束了,那么我们如何确定我们是否已经成功安装了nginx呢?
因为我们编译时默认配置所以编译出来的文件目录是/usr/local/nginx/sbin/
,我们进入这个目录:
[root@localhost sbin]# cd /usr/local/nginx/sbin/
[root@localhost sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
执行 ./nginx -t出现下边两行说明成功,我们也能看出来test is successful
当确认安装完成之后,首先就需要启动和查看Nginx默认安装的端口是多少,两个命令分别如下:
[root@localhost sbin]# ./nginx
[root@localhost sbin]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10387/nginx: master
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 2982/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1327/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1167/cupsd
tcp6 0 0 :::3306 :::* LISTEN 2839/mysqld
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::22 :::* LISTEN 1327/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1167/cupsd
nginx默认是监听80端口
如果防火墙打开就要开放80端口:
[root@localhost sbin]# firewall-cmd --permanent --zone=public --add-port=80/tcpsuccess
[root@localhost sbin]# firewall-cmd --permanent --zone=public --add-port=80/udp
success
[root@localhost sbin]# firewall-cmd --reload
success
停止运行nginx:
[root@localhost sbin]# ./nginx -s quit
至此nginx就已经安装完成了并且能够访问到,那么接下来介绍如何使用nginx进行负载均衡:
这里借用使用nginx搭建高可用,高并发的wcf集群的说明来讲解吧,两个WCF服务,一个nginx,一个客户端
1. 两个WCF的windows服务器承载(192.168.25.23:9049,192.168.25.23:9047),一台Client的服务器
2. 一台Centos机器,用来承载web复杂均衡nginx(192.168.23.130)。
3. 3.在所有的Client的Hosts文件中增加host映射:【192.168.23.130
cluster.com】,方便通过域名的形式访问nginx所在服务器的ip地址。
WCF程序
1) HomeService实现类代码如下(输出当前server的ip地址,方便查看):
public class HomeService : IHomeService
{
public string DoWork(string msg)
{
var ip = Dns.GetHostAddresses(Dns.GetHostName()).FirstOrDefault(i => i.AddressFamily ==
AddressFamily.InterNetwork).ToString();
return string.Format("当前 request 由 server={0} 返回", ip);
}
}
2) App.Config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="WcfService.HomeService">
<endpoint address="/HomeService" binding="basicHttpBinding" contract="WcfService.IHomeService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://192.168.25.23:9049" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
部署wcf两台机器的ip地址是192.168.25.23:9049,192.168.25.23:9047,所以部署的时候注意一下config中的baseAddress地址。这里看下iis
的绑定端口
nginx负载配置
#user nobody;
worker_processes auto;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream cluster.com{
#这里写的就是我们的两台WCF服务的地址(因为我是在一台机器上部署两个WCF所以端口不一样,正常两台机器ip不一样端口相同)weight是一种负载算法 后文会详细说明
server 192.168.25.23:9049 weight=3;
server 192.168.25.23:9047 weight=1;
#ip_hash;
# server 192.168.25.23:9049 ;
#server 192.168.25.23:9047 ;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
#这里proxy_pass必须写,cluster.com与upstream 后面的名字是对应的,意思是nginx拦截http://cluster.com的请求,根据upstream 的负载规则进行负载均衡
proxy_pass http://cluster.com;
#设置主机头和客户端真实地址,以便服务器获取客户端真实IP
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# 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;
# }
#}
}
配置好之后重启nginx
- client端的程序搭建
1)第一件事就是将 192.168.23.190 映射到本机的host中去,因为服务不提供给第三方使用,所以加host还是很轻松的。修改本地host文件:
192.168.23.130 cluster.com
cluster.com 域名与nginx配置文件 proxy_pass http://cluster.com; 这里是对应的。
2) 然后就是client端程序添加服务引用,因为添加了host映射,所以服务引用地址就是
http://cluster.com/MaterialService.svc
这里就直接写个demo
static void Main(string[] args)
{
for (int i = 0; i < 20; i++)
{
var service = new ServiceReference1.MaterialServiceClient();
var result = service.DoWork("");
Console.WriteLine(result);
}
Console.ReadKey();
}
最后执行代码,
这里我们配置的就是1:3的比例,我们看到确实如此,只需要通过cluster.com进行服务访问,nginx会自动给我复杂均衡,这就是我们开发中非常简单化的wcf复杂均衡。
nginx负载策略有五种:
- 轮询(默认)
- 指定权重
- IP绑定 ip_hash
- fair(第三方)
- url_hash(第三方)
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream cluster.com{
server 192.168.25.23:9049 ;
server 192.168.25.23:9047 ;
}
2、指定权重
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream cluster.com{
server 192.168.25.23:9049 weight=3;
server 192.168.25.23:9047 weight=1;
}
3、IP绑定 ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream cluster.com{
ip_hash;
server 192.168.25.23:9049 ;
#server 192.168.25.23:9047 ;
}
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream cluster.com{
server 192.168.25.23:9049 ;
server 192.168.25.23:9047 ;
fair;
}
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream cluster.com{
server 192.168.25.23:9049 ;
server 192.168.25.23:9047 ;
hash $request_uri;
hash_method crc32;
}
举个例子IP绑定 ip_hash:
在需要使用负载均衡的server中增加
proxy_pass http://cluster.com;
upstream cluster.com{
ip_hash;
server 127.0.0.1:9090 down; (down 表示单前的server暂时不参与负载)
server 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大)
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器)
}
max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
fail_timeout:max_fails次失败后,暂停的时间
总结
至此已经全部讲解完了nginx的安装,配置负载均衡算法,在实际应用中非常有用,希望对大家有帮助