今天有空分享一下Ngninx在实际开发过程中的一些只是,这篇《Nginx详解》带你掌握nginx知识。我写博客的目的是记录一下,将自己的知识分享给有需要的人。在这个世界上,唯一确定的就是不确定的人生。哪天自己不做程序员了,在互联网上留有自己的足迹,人活在世上总得留下点什么,证明自己曾经来过,是一件值得回忆和高兴的事。
(1) Nginx是什么,做什么事情
(2) 方向代理
(3) 负载均衡
(4) 动静分离
系统内部要访问外部网络时,统一通过一个代理服务器把请求转发出去,在外部网络看来就是代理服务器发起的访问,此时代理服务器实现的是正向代理
当外部请求进入系统时,代理服务器把该请求转发到系统中的某台服务器上,对外部请求来说,与之交互的只有代理服务器,此时代理服务器实现的是反向代理。
其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载均衡分发到不同的服务器,也就是我们所说的负载均衡。
比如共有15个请求,通过nginx将这些请求平均分发(理想状态下)到下面三个服务器上,每个服务器上又5个请求,这就是负载均衡。
原先一台服务器,动态资源(如:jsp,servlet)和静态资源(如:html,js)都在这台服务器上,导致服务器压力大。为了减小服务器压力,可以将动态和静态资源放到不同服务器上。
例子下载的是1.12.2版本,也可以根据自己实际项目的需求去选择版本
下载地址:http://nginx.org/en/download.html
安装nginx前要安装以下相关的依赖
第一步:安装编译工具和库文件(即安装pcre所需要的依赖)
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
第二步:安装pcre
下载pcre
wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
下载好的放到/usr/src下
解压
进入安装包目录
[root@bogon src]# cd pcre-8.35
编译安装
[root@bogon pcre-8.37]# ./configure
[root@bogon pcre-8.37]# make && make install
这样就安装好了
查看pcre版本
[root@bogon pcre-8.35]# pcre-config --version
第三步:安装nginx
1 解压缩包到/usr/src
2 进入解压目录,执行./configure
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35
ps: --prefix=/usr/local/nginx表示指定安装的目录。也可以不指定目录,直接./configure,默认安装的路径就是/usr/local/nginx
3 Make && make install
yum -y install gcc gcc-c++ autoconf automake make
解决方法
打开nginx解压包下面的src/os/unix/ngx_user.c
解决方法:
在nginx解压包下的vim objs/Makefile 把 -Werrori删掉 (-Werror,它要求GCC将所有的警告当成错误进行处理)
解决完问题后,再make和make install即可
安装完成后可以查看nginx的版本
安装完成后的启动脚本在sbin文件夹下
启动./nginx。启动完成后可以查看到nginx的进程
在conf的nginx.conf文件中可以看到80,表示nginx默认访问的端口是80端口
浏览器中访问服务的地址会出现nginx的欢迎界面
如果服务器中80端口没有开放就要在防火墙中开放端口才能访问
开放后可再次查,下面表示防火墙已经开放了
使用nginx操作命令前提条件:必须进入nginx的安装目录下的sbin目录(cd /usr/local/nginx/sbin)
1查看nginx版本号命令
./nginx -v
2 启动nginx命令
./nginx
3关闭nginx命令
./nginx -s stop
4 重新加载nginx
即修改了nginx的配置文件,默认不会马上生效,可以重启让它生效,但是现在我不想重启,让配置文件重新加载就会生效(即不要重启服务器也会生效)
./nginx -s reload
从配置文件开始,到events之前的都属于全局块
详细说明:
http全局块配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等
准备工作
流程图
在nginx的配置中文件中配置vim /usr/local/nginx/conf/nginx.conf
编写好后重新加载nginx
Window中C:\Windows\System32\drivers\etc本地域名解析
实现效果:使用nginx反向代理,根据访问的路径跳转到不同端口的服务中
Nginx监听端口为9001
访问http://127.0.0.1:9001/edu/ 直接跳转到127.0.0.1:8080
访问http://127.0.0.1:9001/vod/ 直接跳转到127.0.0.1:8081
准备工作
(2)中是在端口为8080的tomcat的webapps文件下下创建edu文件夹,文件夹下创建a.html(里面内容略)。8081的tomcat的webapps文件下下创建vod文件夹,文件夹下创建a.html(里面内容略)。
配置完成后,防火墙应该开放相应的端口9001 8080 8081
然后重新加载nginx
实现效果:
(1) 浏览器地址栏输入地址:http://服务器ip/edu/a.html,负载均衡效果,请求平均分担到8001,8002端口中。
保存推出,重新加载。浏览器访问http://172.16.53.139/edu/a.html.就会轮询请求8001和8002
Nginx提供了几种分配策略:
Iphash的方式:即第一次你访问地址,访问的是8080这台服务,只要你以后访问还是这个地址,就给指定你访问的还是8080这台服务器
动态请求:比如我数据要从数据库获取,这个可以理解为动态请求
准备工作,cd / 然后mkdir data 再data文件夹下创建www(用于存放静态页面),image(存放图片的文件夹)
修改nginx的配置文件,然后重新加载配置文件(root data访问的image或访问www的时候他会去访问data目录下的。。。)
访问就列出了image文件夹中的内容,因为上面配置autoindex on的作用
访问图片正常
从上面访问静态资源可以看到不是从请求tomcat,而是直接请求静态资源,实现了nginx静态访问
主从模式:
有一台住的nginx和从的nginx,当主nginx宕机了,就会自动切换到备份(从)nginx中。
通过备份nginx访问。
要实现这个效果要使用到keepalived软件。首先住服务ip绑定到虚拟的ip上,keepalived通过脚本检测到主服务器挂了,就会将从服务器绑定到ip中, keepalived作起到了路由的作用。
最终客户端访问都是通过虚拟ip进行访问的。
(3)安装keepalived的yum命令(主备两台机器都要安装)
yum install keepalived -y
安装完后可以用命令查看是否安装成功
安装完成后,在etc里面生成目录keepalived,有文件keepalived.conf
/etc/keeplived
(4)完成高可用配置(主从配置)
首先设置主服务器的内容,将keepalived.conf中的所有的内容替换成下面的内容
添加检测脚本;脚本中的内容。此脚本要存放的位置/usr/local/src/nginx_check.sh
备机中的配置和主机中类型。keepalived.conf中的内容需要改,脚本内容不用改。
备机中网卡改成备机的网卡,state MASTER改成BACKUP
主从服务器都绑定好ip后可以通过ip a命令查看到绑定的ip
主机和备机上的配置号好后,启动nginx和keepalived
然后测试
把主服务器的nginx和keeplived停掉,通过虚拟ip惊醒访问也能访问,可以看到nginx的欢迎界面。所以即使主服务器停掉了,也能自动切换到从服务器中