什么是NGINX ?
Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。
安装之前服务器安装环境准备:
nginx是C语言开发,建议在linux上运行,本教程使用Centos6.5作为安装环境。
n gcc
安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:yum install gcc-c++
n PCRE
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
yum install -y pcre pcre-devel
注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。
n zlib
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
yum install -y zlib zlib-devel
n openssl
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
yum install -y openssl openssl-devel
(注意:yum安装需要联网)
编译安装:
一、上传安装包
nginx-1.8.0.tar.gz
下载地址:http://nginx.org/en/download.html
二、解压
tar -zxvf nginx-1.8.0.tar.gz -C /usr/local/src/
三、目录结构
四、编译
(1)由于nginx安装包没有makeFile文件,所以在编译前需要先生成makefile文件
(makeFile文件主要作用就是指定应用安装路径以及临时输出文件、log日志文件等的保存路径)
1、 configure
./configure --help查询详细参数(参考本教程附录部分:nginx编译参数)
参数配置如下:(在home目录下执行下面命令 /usr/local/src/nginx-1.8.0)
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
注意:上边将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录
mkdir -p /var/temp/nginx
执行成功:
(2)make
出现下面问题:
说明安装前的环境没有准备好,回到文章开头安装环境。
更换yum源成阿里的镜像:
①首先备份/etc/yum.repos.d/CentOS-Base.repo
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
②获取阿里yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
或
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
④添加EPEL
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
(注意:换源后重新安装环境,并且重新执行 四、编译 重新执行生成makeFile文件,否则报错make: *** 没有规则可以创建“default”需要的目标“build" )
(3)make install ([root@hostname nginx-1.8.0]# make install)
五、启动nginx
cd /usr/local/nginx/sbin/
./nginx
nginx进程查看:
注意:执行./nginx启动nginx,这里可以-c指定加载的nginx配置文件,如下:
./nginx -c /usr/local/nginx/conf/nginx.conf
如果不指定-c,nginx在启动时默认加载conf/nginx.conf文件,此文件的地址也可以在编译安装nginx时指定./configure的参数(--conf-path= 指向配置文件(nginx.conf))
六、停止Nginx
方式1,快速停止:
cd /usr/local/nginx/sbin
./nginx -s stop
此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。
方式2,完整停止(建议使用):
cd /usr/local/nginx/sbin
./nginx -s quit
此方式停止步骤是待nginx进程处理任务完毕进行停止。
七、重启nginx
方式1,先停止再启动(建议使用):
对nginx进行重启相当于先停止nginx再启动nginx,即先执行停止命令再执行启动命令。
如下:
./nginx -s quit
./nginx
方式2,重新加载配置文件:
当nginx的配置文件nginx.conf修改后,要想让配置生效需要重启nginx,使用-s reload不用先停止nginx再启动nginx即可将配置信息在nginx中生效,如下:
./nginx -s reload
安装测试:
http://192.168.200.131:80/
八、Nginx做虚拟主机
用于作为图片服务器(将图片放到html目录下,便直接可以通过ip+图片名称 进行访问)
(现在图片服务器用FastDFS,支持图片过大时,横向扩展)
九、Nginx作为反向代理服务器
修改配置文件 : /usr/local/nginx/conf/nginx.conf
(注意:是安装路径下的配置文件)
关闭服务器的防火墙,否则访问不了服务器的8080端口:
当前关闭(重启后无效): service iptables stop 或者 service firewalld stop
查看防火墙关闭级别: chkconfig iptables --list
设置防火墙在所有情况下都默认关闭的: chkconfig iptables off
十、Nginx的负载均衡
修改配置文件: /usr/local/nginx/conf/nginx.conf
(就是在反向代理的基础上添加服务器,并且设置权重)
Nginx负载均衡实现功能:1.请求转发 2.故障移除 3.恢复添加
十一、服务器间跨机拷贝
scp --> system copy
文件夹拷贝: scp -r 目标文件夹 目标主机:目标路径
十二、keepalived+Nginx 实现主备高可用(HA)
openssl和keepalived的安装:
rpm软件安装命令: https://blog.csdn.net/AaronLin6/article/details/80158873
1.openssl
检查系统是不是已经安装了openssl,若已经安装则不需要再安装
2.安装keepalived
(1)、RPM方式安装
①上传安装包
②安装 rpm -ivh keepalived-1.2.13-5.el6_6.i686.rpm
(2)、Yum方式安装
①安装依赖插件 : yum install -y gcc openssl-devel popt-devel
② 下载keepalived安装包: wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz
③ 将压缩包解压到 /usr/local/src/ 目录下
[root@localhost ~]# tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/src/
④ 编译安装:
a. [root@localhost ~]# cd /usr/local/src/keepalived-1.2.18/
b. 进入 /usr/local/src/keepalived 进行配置检查:(make install时安装到/usr/local/src/keepalived 路径)
c. [root@localhost keepalived-1.2.18]# ./configure --prefix=/usr/local/src/keepalived
d. [root@localhost keepalived-1.2.18]# make
e. [root@localhost keepalived-1.2.18]# make install
⑤创建/etc/keepalived目录,我们需要把keepalived做成一个服务,这样可以开机自行启动
[root@localhost keepalived-1.2.18]# mkdir /etc/keepalived
⑥ 进入/usr/local/src/keepalived/etc/keepalived/,将keepalived.conf拷贝到/etc/keepalived/目录下。
[root@localhost keepalived]# cp keepalived.conf /etc/keepalived/
⑦进入/usr/local/src/keepalived/etc/rc.d/init.d/目录下,将keepalived拷贝到/etc/init.d/目录下
[root@localhost init.d]# cp keepalived /etc/init.d/
⑧进入/usr/local/src/keepalived/etc/sysconfig目录下,将keepalived拷贝到/etc/sysconfig/目录下
[root@localhost sysconfig]# cp keepalived /etc/sysconfig/
⑨.修改配置文件 ( /etc/keepalived 路径下的 keepalived.conf)
清空文件内容: [root@localhost ~]# > /etc/keepalived/keepalived.conf
讲内容粘贴进去:
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
keepalived.conf :
#全局配置 global_defs { notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个 XXX@XXX.com } notification_email_from XXX@XXX.com #指定发件人 #smtp_server XXX.smtp.com #指定smtp服务器地址 #smtp_connect_timeout 30 #指定smtp连接超时时间 router_id LVS_DEVEL #运行keepalived机器的一个标识 }
vrrp_instance VI_1 { state MASTER #标示状态为MASTER 备份机为BACKUP ,主备机的配置问价,就此处不同 interface eth1 #设置实例绑定的网卡,查看好自己主机的网卡名,按自己的配置 virtual_router_id 51 #同一实例下virtual_router_id必须相同,即主备服务器数字相同 priority 100 #MASTER权重要高于BACKUP 比如BACKUP为99 advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒 authentication { #设置认证 auth_type PASS #主从服务器验证方式 auth_pass 8888 } virtual_ipaddress { #设置vip 192.168.200.150 #可以多个虚拟IP,换行即可,主服务器这里写几个,备用服务器就也得写几个 192.168.200.151 } } |
⑩ 启动服务:
创建第一个软链接,ln -s /usr/local/src/keepalived/sbin/keepalived /usr/sbin/
[root@localhost ~]# ln -s /usr/local/src/keepalived/sbin/keepalived /usr/sbin/
设置为keepalived开机启动,chkconfig keepalived on
开启keepalived服务, service keepalived start
[root@localhost ~]# service keepalived start
如果没有创建软链接在启动时会出现下面错误:
Starting keepalived (via systemctl): Job for keepalived.service failed because the control process exited with error code. See "systemctl status keepalived.service" and "journalctl -xe" for details. [失败] |
检查keepalived是否生效:只需要查看vip (virsual ipaddress)是否成功生成
[root@localhost ~]# ip add show ens33
[root@localhost ~]# ip add show ens33 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:e5:f6:9c brd ff:ff:ff:ff:ff:ff inet 192.168.200.131/24 brd 192.168.200.255 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.200.150/32 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.200.151/32 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::fe2b:9750:cc6c:5414/64 scope link valid_lft forever preferred_lft forever |
这就表示keepalived已经生效了。爽
到这里就已经实现Keepalived的高可用了,在远程访问时,只要通过虚拟出来的IP (即:VIP) 192.168.200.150或者192.168.200.151进行访问Nginx就行了,主备两台机器只要有一台存活,就可以正常提供服务。