Nginx从入门到精通(全)

前言

本文主要是

反向代理,负载均衡,动静分离以及实例
nginx安装,常用命令,原理和配置文件
配置高可用的集群

优点:

  • 内存少,并发能力强
  • 注重效率,经受高负载的考验
  • 热部署,启动容易运行

1. 相关概念

正向代理:依赖代理服务器,即客户端配置代理,访问internet
反向代理:将请求发送到反向服务器,由反向代理服务器转发到不同服务器,暴露的只是访问代理服务器,隐藏了真实的服务器
负载均衡:由于请求量多,并发量多,容易造成服务器崩溃。所以应该增加服务器的数量,将请求分发到各个单独的服务器,即负载到不同服务器。
在这里插入图片描述
动静分离:动静态的网页分别由不同服务器解析,降低原先单个服务器压力
在这里插入图片描述

2. 软件安装

安装nginx
1.下载安装包

cd /usr/local/src/
wget http://nginx.org/download/nginx-1.6.2.tar.gz

2.ngnix所需要的其他依赖包
由于博主所使用的是ubuntu版本,没有yum,所以用的apt

gcc
$ sudo apt-get install gcc
zlib
$ sudo apt-get install zlib1g-dev
pcre
$ sudo apt-get install libpcre3 libpcre3-dev
openssl
$ sudo apt-get install openssl libssl-dev

检查依赖文件是否安装成功

pcre-config --version

3.压缩并且安装

tar zxvf nginx-1.6.2.tar.gz
cd nginx-1.6.2
./configure
make
make install

如果安装过程中遇到其他的问题
可参考我上一片的文章
Nginx:objs/Makefile:432: recipe for target ‘objs/src/core/ngx_murmurhash.o‘解决方法

安装成功之后,在usr多出来一个文件夹/usr/local/nginx/sbin
内有一个nginx的启动脚本
4.启动
在该路径下 /usr/local/nginx/sbin执行

./nginx

在这里插入图片描述

启动之后 查看是否启动成功

ps -ef | grep nginx

在这里插入图片描述

在window不能访问的话,是因为ubuntu开启了防火墙

查看开放的端口号

firewall -cmd --list

设置开放的端口号:

firewall-cmd --add-service=http –permanent

firewall-cmd --add-port=80/tcp --permanent

重启防火墙:

firewall-cmd --reload

3. nginx常用的命令

使用命令的前提是必须进入nginx的目录

/usr/local/nginx/sbin

查看版本号

./nginx -v

启动nginx

./nginx

关闭nginx

./nginx	-s	stop

重新加载nginx

./nginx -s reload

启动与关闭是否成功,可以查看其进程号

ps -ef | grep nginx

4. nginx配置文件

配置文件在/usr/local/nginx/conf下的nginx.conf
配置文件的组成,由三部分组成:全局块、events块,http块
1.全局块:开头到events,影响服务器运行的配置指令

worker_processes  1; #配置处理并发处理量
#pid        logs/nginx.pid;  #进程号

2.events块:服务器与用户网络连接

events {
    worker_connections  1024; #最大的连接数
}

3.http块:包括http块,server块。代理缓存日志等都在这一块配置
在这里插入图片描述

5. nginx配置实例-反向代理案例1

tomcat的window版本配置
可查看我上一篇文章
Tomcat详细配置(全)
1.前期准备工作:
安装tomcat,并且开放8080端口
tomcat官网
下载之后解压
之后进入tomcat的bin目录 ./startup.sh启动
在这里插入图片描述
还需要开放8080的端口号并且重启防火墙

firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload

通过window浏览器测试访问
在这里插入图片描述
2.访问过程的分析:
在这里插入图片描述
3.设置过程:
在window设置host文件C:\Windows\System32\drivers\etc
配置ip 以及域名为 172.22.109.86 www.123456.com

如果单纯在浏览器中访问 www.123456.com即默认访问172.22.109.86即为nginx服务器,如果加了端口号8080 默认访问了tomcat,更进一步。
那么要在nginx中进行请求转发配置(反向代理配置)
在nginx的配置文件中进行地址转发,打开/usr/local/nginx/conf
修改如下地址

server {
        listen       80;
        server_name  192.168.17.129;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            proxy_pass http://127.0.0.1:8080;
            index  index.html index.htm;
        }

将localhost改为虚拟机ip地址,将html改为主机本地地址proxy_pass http://127.0.0.1:8080;
在这里插入图片描述
即可成功访问

6. nginx配置实例-反向代理案例2

在这里插入图片描述
和第5步一样,设置两个服务器和端口号
修改配置文件的端口号/Tomcat8081/apache-tomcat-7.0.106/conf

gedit server.xml

修改服务器的端口号,服务器端口号可以随意
在这里插入图片描述

修改端口号
在这里插入图片描述
在这里插入图片描述
端口号的权限在命令行记得打开 ,需要开放的有9001,8080,8081

具体配置反向代理需要在nginx配置

server {
        listen       9001;
        server_name  192.168.17.129;


        location ~/edu/ {
            proxy_pass http://127.0.0.1:8080;
        }
        location ~/edu/ {
            proxy_pass http://127.0.0.1:8081;
        }

location的样式
在这里插入图片描述
~ 区分大小写
~* 不区分大小写

在这里插入图片描述

7. nginx配置实例-负载均衡

负载分摊到不同的服务器,服务的可用性,速度,以及用户体验
1.输入一个网址,平均分摊到多台服务器中的其中一台
主要区分在于nginx的配置文件
在http文件内部 添加一个

upstream myserver{
        server 192.168.77.130:8080;
        server 192.168.77.130:8081;
}

后在server中修改端口号以及转发路径

server {
        listen       80;
        server_name  192.168.17.129;
       


        location / {
            root   html;
            proxy_pass http://myserver;
            index  index.html index.htm;
        }

注意其中的区别proxy_pass http://myserver;
配置完之后 重启以下nginx,./nginx -s reload
用ip地址访问,会在两个服务器之间来回访问,如果两个服务器不一样,即访问结果会不一样

2.负载均衡分配服务器的策略:
1.轮询(默认):即按顺序,如果某个服务器没了,则访问其他服务器
2.权重:根据权重分配的服务器,权重越重,分配该服务器可能性越大

upstream myserver{
        server 192.168.77.130:8080 weight=10;
        server 192.168.77.130:8081 weight=14;
}

3.ip_hash
一个ip固定一个服务器的访问,根据ip的hash结果分配

upstream myserver{
		ip_hash
        server 192.168.77.130:8080;
        server 192.168.77.130:8081;
}

4.fair
按照服务器的响应时间来分配,响应时间短分配越快

upstream myserver{
		fair
        server 192.168.77.130:8080;
        server 192.168.77.130:8081;
}

8. nginx配置实例-动静分离

nginx处理静态页面,tomcat处理动态页面
动静分离有两种方案:

一种是把静态文件独立成单独域名,用单独的服务器处理(多)
一种是动静态混合,使用nginx服务器将其分开(少)

动静分离主要是提高访问的效率
location中不同后缀名实现不同请求的转发
expires设置浏览器缓存过期时间,没过期的话,通过缓存而不是服务器,通过浏览器自身判断。如果变化过多的话,不适合弄缓存,实时比较好
在这里插入图片描述

nginx的配置文件配置
将原先此处的初始文件

location /www/ {
           	root   html;
            index  index.html index.htm;
        }

改为:

server {
        listen       80; #监听80端口
        server_name  192.168.17.129; #自身的ip地址


        location /www/ { #访问开始地址
           	root   /data/; #访问的静态网页后地址
            index  index.html index.htm;
        }
        location /image/ {
            root   /data/;
            index  index.html index.htm;
            autoindex on;
        }

每修改以下配置要重启以下nginx
此处的静态网页中 相当于放到nginx的服务器中

9. nginx配置实例-高可用集群

nginx如果坏了,那直接请求不了,所以要配置高可用
在这里插入图片描述

1.搭建两个nginx服务器,主master和备份backup服务器
如果主服务器挂掉,还可以自动切换回备份服务器
由于nginx两个服务器,所以需要设置一个虚拟ip的访问,和两个服务器ip进行绑定
两个服务器,即两个ubuntu环境
2.可以通过keepalived设置服务器是否还存在
由于博主用的是ubuntu版本,安装的时候是apt-get 而不是yum

apt-get install keepalived -y

在这里插入图片描述

keepalived的配置文件在 /etc/keepalived中的keepalived.conf中
设置高可用只需要改这个配置文件即可

9.1 keepalived配置文件-模板

配置文件中有注释以及一些功能修改
配置文件中主要包含这三个方面:

  • global 全局定义
  • 检测脚本以及权重的参数(是否还活着)
  • 虚拟ip配置

全局定义中的主机名字在/etc/hosts文件中,只需要修改hosts文件
可以额外自已添加一个

127.0.0.1 LVS_DEVEL
! Configuration File for keepalived
#此处为全局定义
global_defs {
	#默认不修改
    notification_email {
        acassen@firewall.loc
        failover@firewall.loc
        sysadmin@firewall.loc
     }
        notification_email_from Alexandre.Cassen@firewall.loc
#修改此处的ip地址
        smtp_server 192.168.17.129

        smtp_connect_timeout 30

        router_id LVS_DEVEL # 主机名字
}

#检测脚本以及权重的参数(是否还活着)
vrrp_script chk_http_port {
		#脚本配置文件的路径,需要配置脚本
        script "/usr/local/src/nginx_check.sh"
        interval 2 #(检测脚本执行的间隔)每隔两秒检测一次
        weight 2 # 权重
   }
   	#虚拟ip配置 包括状态 网卡 优先权 以及虚拟ip地址
        vrrp_instance VI_1 {
        state MASTER # 备份服务器上将 MASTER 改为 BACKUP
        interface eth33 # 网卡名字,可通过ifconfig查询网卡名字
        virtual_router_id 51  # 主、备机的 virtual_router_id 必须相同
        priority 100  # 主、备机取不同的优先级,主机值较大,备份机值较小
        advert_int 1 #检测是否还活着
        authentication {
                auth_type PASS
                auth_pass 1111
        }
        virtual_ipaddress {
             192.168.77.50 # VRRP H 虚拟地址
        }

}

上面配置脚本的设置为

#!/bin/bash
A=`ps -C nginx –no-header | wc -l`
if [ $A -eq 0 ];then
        /usr/local/nginx/sbin/nginx #启动脚本的位置
        sleep 2
        if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
            killall keepalived #挂掉之后就杀死进程
        fi
fi

配置完之后启动

systemctl start keepalived.service

查看是否虚拟地址绑定成功

ip a

10. nginx原理分析

有两进程master和worker
一个master和多个worker

  • 利于nginx -s reload热部署,即有个重启后,其他还可以进行
  • 每个worker独立占有进程,方便操作不用加锁
  • nginx与redis都是采用io多路复用机制,所以worker数和cpu数相等最合适
  • worker连接数,发送一个请求,连接数可能是2/4(静态是client和worker,动态还需要一个tomcat)
  • 支持最大并发数:动态worker_connections * worker_processes/4 ,静态worker_connections * worker_processes /2。即work个数*每台work连接发送数
    在这里插入图片描述

10. 1 nginx配置文件-模板

nginx配置文件

#设置负载均衡的一些参数 权重还有开放端口号
upstream myserver{
        server 192.168.77.130:8080;
        server 192.168.77.130:8081;
}

server {
        listen       80; #监听的端口号
        server_name  192.168.17.129; #自身的ip地址

		#转发地址 还可加uri的地址表达式
        location / {
            root   html; #静态网页后缀
            proxy_pass http://127.0.0.1:8080; #tomcat动态网页转发地址
            index  index.html index.htm;
            
            #此处可加一些负载均衡的参数设置 fair/ip_hash/等
        }

配置完之后重新启动nginx的服务器

./nginx -s reload

同时开放端口号以及重启防火墙设置

firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload

查看是否有这进程

ps -ef | grep 文件

版权声明:本文为weixin_47872288原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。