项目中总有些研究性的工作来做,记得一年多之前也是在研究Nginx,当时也是苦战了一周左右;时隔一年对它的理解又加深了许多,不过也下了些功夫将它又进行了深入的研究
虽然网上已经有很多文章在写,并且这种技术已经很成熟,不过根据具体的业务场景应用不同以及自己研究的时候还是踩了许多的坑;还是有写出来一是整理一下自己最近的实验,二是或许会对读者有些帮助。
由于这次没有用到集群所以Session的问题不再存在,但是对它的反向代理进行了深入的理解。
一、概述:
1、Keepalived和Nginx的简介
(1)Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat、corosync、pacemaker。但是它一般不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一起工作来达到集群的高可用。
(2)Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。
参考文章: Nginx+Keepalived实现站点高可用
2、本教程所使用的环境
(1)操作系统 CentOS 7.0.1406 最小安装版
(2)所装软件 Keepalived-1.3.4,Nginx-1.10.3(写此篇博客时官网最新的稳定版,建议装最新版本)
(3)辅助工具 Xsheel-5,WinSCP(非必须使用)
3、达到的效果图
(1)本教程所达到效果图
(2)高校云平台生产环境达到的效果图
二、Nginx安装及相关配置:
1、Nginx安装前需要的环境:wget、gcc、pcre、openssl、zlib
(1)wget 用于从外网上下载插件
①检查系统中是否已经安装wget,使用命令wget –V 若出现下图wget相关版本描述则说明系统中已经安装wget 若报系统找不到命令说明wget未安装
②若wget未安装则进行安装,安装命令yum -y install wget
(2)gcc安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境
①检查系统中是否已经安装gcc,使用命令gcc –v 若出现下图gcc相关版本描述则说明系统中已经安装gcc 若报系统找不到命令说明gcc未安装
②若gcc未安装则进行安装,安装命令yum install gcc-c++
若出现问题:
则解决方案为:
参考: SSH and Yum don't work in clean CentOS 7
若出现问题:
解决方案:清理一下安装包,命令: yum clean all
然后重新执行安装命令: yum install gcc-c++
(3)PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库;
①检查系统中是否已经安装pcre,使用命令man pcre 若出现下图pcre相关描述则说明系统中已经安装pcre 若报系统找不到命令说明pcre未安装
②若pcre未安装则进行安装,安装命令yum install -y pcre pcre-devel
(4)OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用; nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库
①检查系统中是否已经安装openssl,使用命令openssl 若出现下图openssl相关描述则说明系统中已经安装openssl 若报系统找不到命令说明openssl未安装
②若pcre未安装则进行安装,安装命令yum install -y openssl openssl-devel
(5)zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库
①检查系统中是否已经安装zlib,使用命令man zlib若出现下图zlib相关描述则说明系统中已经安装zlib 若报系统找不到命令说明zlib未安装
②若zlib未安装则进行安装,安装命令yum install -y zlib zlib-devel
2、Nginx的安装及配置:
(1)进入一个目录(随便一个目录即可,用来存放下载的Nginx的包,在此以/root目录为例)命令:cd /root
(2)下载最新稳定版本(目前最新为nginx1.10.3通过官网--- http://nginx.org/download可查看)命令:wget http://nginx.org/download/nginx-1.10.3.tar.gz
(3)解压nginx的tar包,命令: tar -zxvf ./nginx-1.10.3.tar.gz
(4)查看是否解压成功,命令: ls
(5)进入刚解压的的目录,命令: cd nginx-1.10.3
(6)进行配置(在此将nginx安装指向/usr/local/nginx-1.10.3/ 目录下,命令: ./configure --prefix=/usr/local/nginx-1.10.3/
(7)进行编译和安装(在源码的位置,本教程中为 /root/nginx-1.10.3)命令:make && make install
(8)整个验证、编译、安装过程不应该报任何错误,如果在(6)使用prefix设置了安装目标目录,那么还需要在/etc/profile文件中设置环境变量,在最末尾加入export PATH=/usr/local/nginx-1.10.3/sbin:$PATH (其中的# add nginx path为注释建议加上)命令:vi /etc/profile
用命令: source /etc/profile 使环境变量生效
用命令export 查看环境变量发现刚设置的Nginx目录没有进去
(9)检查是否安装成功,命令: nginx –t 若正确如下图,若不正确则会给出相应的错误提示
(10)对Nginx配置文件进行配置,Nginx配置文件的位置: /usr/local/nginx-1.10.3/conf/nginx.conf ,在此用WinSCP进行编辑,也可以用Linux的vi编辑器进行编辑
(11)将配置文件修改为配置文件在Nginx安装目录下的conf中的nginx.conf,命令: /usr/local/nginx-1.10.3/sbin/nginx -c /usr/local/nginx-1.10.3/conf/nginx.conf
(12)启动nginx 命令:nginx
相关操作Nginx的命令
重启Nginx,一般在修改Nginx配置文件后可使用;命令:nginx -s reload
停止Nginx,命令:nginx -s stop
查看Nginx状态,命令: ps -ef | grep nginx
(13)测试,启动Nginx的情况下在外部用浏览器访问刚才在配置文件中配置的地址(本教程中为:192.168.22.224:80)
(14)若访问不到查看Linux防火墙,确保开放80端口(该端口根据配置文件中配置监听端口所定在本教程中为80端口)或关闭防火墙;为安全起见建议采用开放端口形式
A.防火墙相关检查相关命令
①查看状态:firewall-cmd --state
开启状态---running
关闭状态---not runing
②关闭防火墙:service firewalld stop
③打开防火墙: service firewalld start
B.开放端口相关检查相关命令(确保防火墙是打开情况下再检查端口开放情况才是有意义的)
①查看防火墙中开放端口命令--- iptables -L
②将某个端口(在此以80为例)开放firewall-cmd --zone=public --add-port=80/tcp --permanent
1、亲身经历收获会更多;
2、根据不同的业务场景来配置也很重要;
3、遇到问题多去网上查和其他人多交流。