Nginx学习笔记

Posted Simon格子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx学习笔记相关的知识,希望对你有一定的参考价值。

一、基本概念

正向代理:
在客户端(浏览器)里配置代理服务器,通过代理服务器进行互联网的访问就叫正向代理

反向代理:
我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,
暴露的是代理服务器地址,隐藏了真实的服务器IP地址

负载均衡:
单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器

动静分离:
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力


二、nginx安装:

1.nginx需要的依赖包:

pcre-x.x.tar.gz、zlib-x.x.x.tar.gz、openssl-x.x.x.tar.gz、nginx-x.x.x.tar.gz

2.安装依赖包

(1)安装pcre

解压:tar -zxvf pcre-x.x.tar.gzc

打开解压包的目录:cd /pcre.x.x.x

执行命令:./configure

执行命令:make && make install

检查是否安装完成:pcre-config --version

(2)安装zlib、openssl

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

(3)安装nginx
解压:tar -zxvf nginx-x.x.x.tar.gz

打开解压包的目录:cd /nginx-x.x.x

执行命令:./configure

执行命令:make && make install

(4)启动nginx
打开usr/local/nginx/sbin目录:cd /usr/local/nginx/sbin
启动:./nginx

(5)检查端口
查询开放的端口:
firewall-cmd --list-all

设置开放端口:
firewall-cmd --zone=public --add-port=端口/tcp --permanent

重启防火墙:
firewall-cmd --reload

(6)检查防火墙

开启:
systemctl start firewalld.service

查看状态:
systemctl status firewalld.service

停止:
systemctl stop firewalld.service


3.nginx命令

查看版本信息:./ngxin -v

启动nginx:./nginx

停止nginx:./nginx -s stop

重新加载:./nginx -s reload


三、配置文件

1.全局块

从配置文件开始到event块之间的内容,主要会配置一些影响nginx服务器整体运行的配置指令

worker_processes:值越大支持的并发处理越多

2.event块

主要影响用户与nginx服务器网络连接

worker_connections:支持的最大连接数


3.http块

包含http全局块和server块,服务器配置中最频繁的部分

4、配置反向代理

本地配置没有域名的情况下
(1)windows系统hosts文件里绑定tomcat服务器IP,给IP指定任意域名
(2)部署tomcat,并开放访问端口

(3)以tomcat和nginx配合配置单机反向代理

配置nginx的nginx.conf文件,修改server块如下内容:
server_name  tomcat服务器IP地址;
 location /
            root   html;
            proxy_pass http://127.0.0.1:端口;
            index  index.html index.htm;

(4)以tomcat和nginx配合配置多台服务器反向代理:

配置nginx的nginx.conf文件,修改server块如下内容:
server_name  tomcat服务器IP地址;
 location /
            root   html;
            proxy_pass http://127.0.0.1:端口;
            index  index.html index.htm;

location /
            root   html;
            proxy_pass http://127.0.0.1:端口;
            index  index.html index.htm;

5、配置负载均衡

http块增加配置:
upstream 服务名称
    server  服务器IP;
    server  服务器IP;

3种策略:
(1)轮训(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down机,自动剔除。

(2)weight(权重)
weight权重默认为1.值越大权重越高,分配的客户商请求越多

配置如下:
upstream 服务名称
    server  服务器IP weight x;
    server  服务器IP weight x;

(3)ip_hash
每个请求按ip的hash分配,这样每个访客笃定访问服务端,可以解决session问题

配置如下:
upstream 服务名称
    ip_hash;
    server  服务器IP;
    server  服务器IP;

(4)fair(第三方)
按照后端服务器响应时间分配,响应时间短的优先分配

配置如下:
upstream 服务名称
    server  服务器IP;
    server  服务器IP;
    fair;


6、配置动静分离
在系统中创建文件夹data,切换data目录再创建2个文件夹分别存储动态和静态资源

server
    lister 端口;
    server_name 服务器IP;

    
    location /data/
            root   动态资源;
            index  index.html index.htm;
    

    location /data/
            root   静态资源;
            index  index.html index.htm;
    


7.配置高可用的集群
(1)在2台或者3台服务中安装nginx
(2)在2台或者3台服务器中keepalived

a、下载keepalived-x.x.x.tar.gz并上传服务器目录

b、tar -zxvf 解压keepalived包

c、./configure -prefix=指定编译目录编译keepalived
有可能会出现警告:WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS
解决方案:yum -y install libnl libnl-devel

d、再次执行./configure -prefix=指定编译目录编译keepalived

e、没有在出现警告的情况下执行make && make install

f、在etc目录下建文件夹keepalived,mkdir /etc/keepalived

g、找到keepalived.conf文件位置,并拷贝到/etc/keepalived,cp  keepalived.conf文件到/etc/keepalived

h、启动keepalived:systemctl start keepalived,ps -ef|grep keepalived查看是否启动成功


(3)配置主从服务器的keepalived.conf文件监控nginx
! Configuration File for keepalived

global_defs
   notification_email
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server master主机ip
   smtp_connect_timeout 30
   router_id master主机的router——id,在etc/hosts文件里定义

vrrp_script chk_nginx
    # 指定监控脚本,检测nginx服务是否正常运行
    script "/etc/keepalived/chk_nginx.sh"
    # 指定监控时间,每10s执行一次
    interval  2
    # 脚本结果导致的优先级变更,优先级(1-255之间)
    # weight 2


vrrp_instance VI_1
    # 主/从
    state MASTER/BACKUP
    # 网卡
    interface ens33
    # 虚拟路由编号,主备必须一样,可以设置为IP后一组:must be between 1 & 255
    virtual_router_id 51
    # 优先级值,值越大获取请求的优先级越高
    priority 主优先级大于从即可
    # 本机IP
    mcast_src_ip 当前主机ip
    # 检查间隔,默认为1s(vrrp组播周期秒数)
    advert_int 1
    # 授权访问
    authentication
        # 设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_type PASS
        auth_pass passwd
    
    
    #执行脚本
    track_script
        chk_nginx
   
 
    # 定义虚拟ip(VIP),可多设,每行一个
    virtual_ipaddress
        虚拟IP
   

主与从的区别在于三个地方:  

router_id(master主机名称) 
mcast_src_ip(当前主机ip)
priority(优先级。确保主的数值高于从的即可) 

 

除了抢占式策略,还有一种是非抢占式策略

      这种策略下,主从的配置文件的“state”属性不再区分“MASTER和BACKUP”。都使用“BACKUP”。不同的keepalived服务器之间通过priority属性值的大小区分主从,最后一个不同就是在 state BACKUP下一行添加 nopreempt即可,表示“非抢占”。

      抢占与非抢占模式的区别在于:

      抢占模式在主服务器挂了之后,由从服务器接手“主服务器”角色;当主服务器恢复则主服务器会抢回其“主服务器”的角色。

      非抢占式则是当主服务器恢复后,担当从的角色。二者的区别主要在于此。


(4)chk_nginx脚本
#!/bin/bash
A=`ps -C nginx --no-header | grep -v grep | wc -l`
if [ $A -eq 0 ];then
    #尝试重新启动nginx
    /usr/local/nginx/sbin/nginx
    #睡眠2秒
    sleep 2
    if [ `ps -C nginx --no-header | grep -v grep | wc -l` -eq 0 ];then
        #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点
        killall keepalived
    fi
fi

切记:一定要关闭防火墙,不然访问不到


三、Nginx原理

1.master和worker:
nginx启动之后分master&worker,master是管理者,不做其它事情,只是给worker发送有任务来了的信号

2.worker工作流程:
客户端请求到master后,master通知有新任务来了,worker进程通过争抢的方式得到请求然后转发

3.一个master和多个worker的好处
(1)可以使用nginx -s reload热部署
(2)worker独立进程,不需要加锁。如果有一个worker中断,其它的worker继续争抢,不会造成服务宕机。

4.worker设置多少个合适
worker设置的数量和CPU数量相等,才能发挥最大的性能

5.连接数worker_connection
2个或者4个,最大支持1024

6.最大并发数
(1)静态资源:worker_connection * worker_processes/2
(2)动态资源:worker_connection * worker_processes/4

以上是关于Nginx学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

Nginx学习笔记~目录索引

Nginx学习笔记——理解IO模型

学习笔记并发

Nginx:很正经的学习笔记

LevelDB 学习笔记4:读写

Nginx学习笔记17rewrite之last