nginx学习笔记

nginx是什么

类似于tomcat,web应用服务器,tomcat一般处理需要编译的动态资源。一般都是静态资源服务器和动态资源服务器是分开部署的。为了提高服务器的效率,静态资源可以大量使用缓存。

Apache 静态资源服务器和nginx都可以作为静态资源服务器

nginx是一个反向的静态资源服务器。

反向代理一般是用在服务器端,做请求的分发,能实现负载均衡。

nginx 安装和服务启动

1、安装nginx服务需要的插件

yum install -y yum-utils

nginx学习笔记_第1张图片

2、安装 nginx

在官方yum源中也是没有nginx的,但是我们可以在本机去配置nginx的yum源,来实现nginx的yum安装。

nginx学习笔记_第2张图片

然后再创建一个nginx.repo的文件:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
vim nginx.repo

nginx学习笔记_第3张图片

i 插入后,esc,:wq 保存退出

使用yum源安装 nginx

[root@localhost yum.repos.d]# yum install -y nginx

安装成功

nginx学习笔记_第4张图片

3、nginx服务的管理命令:

启动nginx服务

systemctl start nginx

停止nginx服务

systemctl stop nginx

禁用nginx服务

sysemctl disable nginx

查看nginx服务的启动状态

systemctl status nginx

4、查看下nginx服务是否开启

[root@localhost yum.repos.d]# systemctl status nginx

nginx服务没有开启

在这里插入图片描述

启动nginx服务,并查看nginx服务状态

[root@localhost yum.repos.d]# systemctl start nginx
[root@localhost yum.repos.d]# systemctl status nginx

nginx学习笔记_第5张图片

启动之后,在宿主机(windows电脑上)的浏览器测试是否能连接上nginx服务器。

nginx服务器默认端口号是 80

注意:防火墙一定要关闭

[root@localhost yum.repos.d]# systemctl stop firewalld
[root@localhost yum.repos.d]# systemctl status firewalld

nginx学习笔记_第6张图片

在浏览器上输入 http://192.168.25.10/

nginx学习笔记_第7张图片

nginx学习笔记_第8张图片

nginx 安装成功。

5、需要关闭linux操作系统的selinxu服务

selinux是linux的安全服务套件。

修改 vi /etc/selinux/confifig文件,修改如下内容:

[root@localhost yum.repos.d]# vi /etc/selinux/config

nginx学习笔记_第9张图片

修改过之后,必须重启linux。

测试实例:nginx代理百度

比如我们想让nginx代理百度,可以修改它的配置文件。

[root@localhost ~]# vi /etc/nginx/nginx.conf

nginx学习笔记_第10张图片

  • user nginx; ---- nginx使用的默认的用户名

可以查看下系统用户

vi /etc/passwd

nginx学习笔记_第11张图片

可以看到,创建了一个nginx的用户。

worker_processes 1; ----- nginx工作的进程数

进程数一般配置成跟操作系统的核心一样,效率最高,比如电脑是4核的,这里可以配置4,或者是操作系统核心数的2倍也可以。

error_log 错误日志

pid nginx启动的进程号

worker_connections 1024; #每个nginx进程最大支持多少个并发连接

计算nginx最多支持多少并发量 :worker_processes 乘以 worker_connections

keepalive_timeout 65;

配置http协议的长连接的超时时间为65秒。

我们以后经常修改的配置文件是 /etc/nginx/conf.d/default.conf

[root@localhost ~]# cd /etc/nginx/conf.d
[root@localhost conf.d]# ls
default.conf
[root@localhost conf.d]# vi default.conf

nginx学习笔记_第12张图片

重启nginx服务,查看nginx服务启动状态

[root@localhost conf.d]# systemctl restart nginx
[root@localhost conf.d]# systemctl status nginx

在浏览器中访问 http://192.168.25.10/,跳转到百度页面

nginx学习笔记_第13张图片

补充:如果没有跳转到百度页面,可以清楚下浏览器的缓存,重新加载页面。

使用nginx实现tomcat的负载均衡

1、首先要在我们linux服务器上启动两个tomcat

准备好tomcat 和 jdk的linux版本的安装包,

nginx学习笔记_第14张图片

通过Xftp上传到linux系统中

nginx学习笔记_第15张图片

先配置jdk。

解压缩jdk

[root@localhost opt]# tar -xvf jdk-8u171-linux-x64.tar.gz

配置jdk环境变量

nginx学习笔记_第16张图片

[root@localhost jdk8]# vim /etc/profile

nginx学习笔记_第17张图片

JAVA_HOME=/opt/jdk8/
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME PATH

然后 保存退出 ,在命令行执行 source 命令 编译环境变量文件,让环境变量立刻生效:

source /etc/profile

nginx学习笔记_第18张图片

[root@localhost jdk8]# cd ..
[root@localhost opt]# ls
apache-tomcat-8.5.32.tar.gz  cluster  jdk8  redis-5.0.4  redis-5.0.4.tar.gz
[root@localhost opt]# tar -xvf apache-tomcat-8.5.32.tar.gz

tomcat 启动:

nginx学习笔记_第19张图片

在浏览器访问 http://192.168.25.10:8080

nginx学习笔记_第20张图片

查看tomcat有没有启动

ps -ef|grep tomcat

nginx学习笔记_第21张图片

关闭tomcat服务

./shutdown.sh

在这里插入图片描述

2、准备两个tomcat 一个端口号弄成8000 另外一个9000

nginx学习笔记_第22张图片

将端口号改为 8000

nginx学习笔记_第23张图片

另一个tomcat端口号为9000

nginx学习笔记_第24张图片

nginx学习笔记_第25张图片

nginx学习笔记_第26张图片

生产环境中,不能把两个tomcat部署到一起,nginx也不能把tomcat部署到一起,请求会通过nginx服务器分发到两台电脑上。部署项目,一个项目需要部署两份相同的。访问8080,其实访问的也是一个项目,访问的是webapps目录下root的根项目,部署项目也可以把项目打成war包放到webapp下面。

nginx学习笔记_第27张图片

访问doc项目,http://192.168.25.10:8000, 不写项目名访问的是 ROOT项目。

nginx学习笔记_第28张图片

访问 http://192.168.25.10:8000/docs

nginx学习笔记_第29张图片

访问 http://192.168.25.10:8000/examples

nginx学习笔记_第30张图片

判断访问的是8000的项目还是9000的项目。

nginx学习笔记_第31张图片

nginx学习笔记_第32张图片

访问 http://192.168.25.10:8000

nginx学习笔记_第33张图片

按照同样的步骤改下 tomcat9000的项目

[root@localhost ROOT]# vim /opt/tomcat9000/webapps/ROOT/index.jsp

nginx学习笔记_第34张图片

启动tomcat9000

[root@localhost opt]# ./tomcat9000/bin/startup.sh
Using CATALINA_BASE:   /opt/tomcat9000
Using CATALINA_HOME:   /opt/tomcat9000
Using CATALINA_TMPDIR: /opt/tomcat9000/temp
Using JRE_HOME:        /opt/jdk8/
Using CLASSPATH:       /opt/tomcat9000/bin/bootstrap.jar:/opt/tomcat9000/bin/tomcat-juli.jar
Tomcat started.
[root@localhost opt]# 

查看下服务进程

nginx学习笔记_第35张图片

浏览器访问 http://192.168.25.10:9000

nginx学习笔记_第36张图片

3、修改nginx的配置文件

[root@localhost opt]# vim /etc/nginx/conf.d/default.conf

shift + o, 在第一行配置负载均衡的服务器, nginx服务转发的服务器i 和端口号

#配置负载均衡的服务器
upstream aaa{
     
    server 192.168.25.10:8000;
    server 192.168.25.10:9000;
}

nginx学习笔记_第37张图片

注意: proxy_pass http://aaa; 和upstream的命名一致。

保存退出。

重新启动nginx

systemctl restart nginx

nginx学习笔记_第38张图片

浏览器访问 http://192.168.25.10 ,刷新一次是访问8000,再刷新一次是访问9000。

默认是轮询。

nginx支持的负载均衡的策略

轮询策略

默认nginx 支持的策略 。 来了请求之后 排队把请求一个一个的分发出去。

权重策略

##配置负载均衡的服务器
upstream aaa{
     
    server 192.168.25.10:8000 weight=3;
    server 192.168.25.10:9000 weight=1;
}

数字是可以自定义的。上面的权重配比,比如发了4个请求,3个请求是转发给8000的服务器,1个请求时转发给9000的服务器。

如果不配置权重,就是一次8000,一次9000

nginx学习笔记_第39张图片

重启nginx服务。

在浏览器访问 http://192.168.25.10

IP_HASH方式

根据 客户端ip地址 固定分配到一台服务器上,以后这个ip来的所有请求 都会只到这一个服务器上。

nginx学习笔记_第40张图片

重启nginx,在浏览器测试访问 http://192.168.25.10, 如果第一次访问的是某个服务器,那么以后都访问这个服务器。

好处:解决session共享问题。

nginx学习笔记_第41张图片

保存退出。重启nginx。

结束tomcat9000的进程

浏览器访问 http://192.168.25.10 , 一直访问的是8000

重新启动tomcat9000服务器,浏览器测试访问,又可以轮询访问了。只要服务器没有全部挂掉,可以持久的提供服务。

keepalived实现高可用

上面我们实现的集群方式 可以解决tomcat 服务器单点故障的问题,但是解决不了 nginx服务器单点故

障的问题。

解决nginx 单点故障问题,市场上通用的解决方案就是使用keepalived 这种插件。

安装keepalived服务

yum install -y keepalived

安装成功

nginx学习笔记_第42张图片

下面修改keepalived的配置文件: vim /etc/keepalived/keepalived.conf文件

vim /etc/keepalived/keepalived.conf
global_defs {
     
	notification_email {
     
    	#keepalived如果检测到nginx服务不能用会往这个邮件发信息
    	[email protected] 
    }
    #配置邮件服务器的信息
    notification_email_from keepalived@localhost
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id LVS_MASTER
}
#声明一个脚本
vrrp_script chk_http_port {
     
    #检测本机nginx的服务是否能用的脚本 这个脚本等下要自己编写
    script "/usr/local/src/check_nginx_pid.sh"
    #每隔多长时间自动调用上述脚本
    interval 2
    #权重
    weight 2 
}
vrrp_instance VI_1 {
     
	#state MASTER 
	#配置当前的nginx服务器是主机还是备机
    state BACKUP
    #配置当前nginx服务是是否非抢占模式
    #nopreempt
    #配置心跳网卡的名称
    interface ens33
    #所有的keepalived的服务器的虚拟化路由都要一致
    virtual_router_id 50
    #nginx服务器的初始化权重
    priority 100
	#心跳连接发送的间隔
    advert_int 1
    #认证方式和认证密码 要保证所有keepalive的服务器的验证方式和 密码都一样
    authentication {
      
    	auth_type PASS 
    	auth_pass 1111 
    }
    #启用上述脚本
    track_script {
      
    	chk_http_port
    }
    virtual_ipaddress {
     
    	#配置了keeplived服务器之后再访问tomcat集群虚拟的ip地址时多 少
    	192.168.25.222#虚拟ip
    }
}

d + G 把原来的删掉,i 插入,复制粘贴。

下一步,写/usr/local/src/check_nginx_pid.sh这个脚本:

vim /usr/local/src/check_nginx_pid.sh
#! /bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
systemctl start nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi

创建好这个脚本之后,不要忘记修改文件的权限, 可以执行

[root@localhost src]# chmod 777 check_nginx_pid.sh

nginx学习笔记_第43张图片

下面启动keepalived服务:

systemctl start keepalived

nginx学习笔记_第44张图片

nginx如果关掉,keepalived会自动把nginx服务启动。

nginx学习笔记_第45张图片

克隆一个虚拟机,192.168.25.12

启动tomcat8000,tomcat9000服务

[root@localhost opt]# ./tomcat8000/bin/startup.sh
[root@localhost opt]# ./tomcat9000/bin/startup.sh

启动keepalived服务

[root@localhost opt]# systemctl start keepalived
[root@localhost opt]# systemctl status nginx

keepalived默认启动nginx服务。

nginx学习笔记_第46张图片

在浏览器中访问 192.168.25.222

nginx学习笔记_第47张图片

windows系统下的dos命令里执行如下命令, 访问物理主机的物理地址

arp -a 192.168.25.222

nginx学习笔记_第48张图片

在192.168.25.12中执行ip addr

nginx学习笔记_第49张图片

在192.168.25.10中执行ip addr

nginx学习笔记_第50张图片

可以看到现在访问的是nginx服务器或者keepalived是192.168.25.12的

现在模拟192.168.25.12挂了,是否能切换到192.168.25.10。
关闭keepalived服务
关闭nginx服务

[root@localhost opt]# systemctl stop keepalived
[root@localhost opt]# systemctl stop nginx

nginx学习笔记_第51张图片

现在切换到了192.168.25.10

高可用就配置好了

你可能感兴趣的:(nginx,nginx)