nginx简介+基础使用+集群配置

一、nginx简介

  • Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
  • 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
  • Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
  • 常用版本分为四大阵营
    • Nginx开源版:http://nginx.org/
    • Nginx plus 商业版: https://www.nginx.com
    • Openresty:http://openresty.org
    • Tengine:http://tengine.taobao.org/

二、基础使用

1、目录结构

  • 进入Nginx的主目录我们可以看到这些文件夹

    client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp
    
  • 其中这几个文件夹在刚安装后是没有的,主要用来存放运行过程中的临时文件

    client_body_temp fastcgi_temp proxy_temp scgi_temp
    
  • conf: 用来存放配置文件相关

  • html: 用来存放静态文件的默认目录 html、css等

  • sbin: nginx的主程序

2、配置文件nginx.conf

  • 完整最小配置

    worker_processes  1;  # 默认为1,表示开启一个业务进程
    
    events {
        worker_connections  1024;  # 单个业务进程可接受连接数
    }
    
    http {
        include       mime.types;  # 引入http mime类型
        default_type  application/octet-stream; # 如果mime类型没匹配上,默认使用二进制流的方式传输。
    
        sendfile        on; # 使用linux的 sendfile(socket, file, len) 高效网络传输,也就是数据0拷贝
    
        keepalive_timeout  65;
    
        server {
            listen       80; # 监听端口号
            server_name  localhost;  # 主机名
            location / { # 匹配路径
                root   html; # 文件根目录,访问页面存放在当前目录下
                index  index.html index.htm; #  默认页名称
            }
    
            error_page   500 502 503 504  /50x.html; #  报错编码对应页面
            location = /50x.html {
                root   html;
            }
    
        }
       
    }
    

3、servername匹配规则

  • 完整匹配

    # 我们可以在同一servername中匹配多个域名,多个用空格隔开
    server_name lyh.com www.lyh.com;
    
  • 通配符匹配

    server_name *.lyh.com
    
  • 通配符结束匹配

    server_name www.*;
    
  • 正则匹配

    server_name ~^[0-9]+\.lyh\.com$;
    

4、location的前缀和匹配

location / { 
	proxy_pass http://lyh.com/;
	# 只要有proxy_pass,后面的root和index无效
	root   html; 
    index  index.html index.htm; 
}
# location / 通用匹配,任何请求都会匹配到。
# location = 精准匹配,不是以指定模式开头
# location ~ 正则匹配,区分大小写
# location ~* 正则匹配,不区分大小写
# location ^~ 非正则匹配,匹配以指定模式开头的location
  • location匹配顺序

    多个正则location直接按书写顺序匹配,成功后就不会继续往后面匹配

    普通(非正则)location会一直往下,直到找到匹配度最高的(最大前缀匹配)

    当普通location与正则location同时存在,如果正则匹配成功,则不会再执行普通匹配

    所有类型location存在时,“=”匹配 > “^~”匹配 > 正则匹配 > 普通(最大前缀匹配)

5、alias与root

location /css { 
  alias /usr/local/nginx/static/css; 
  index index.html index.htm; 
}

1)alias指定的目录是准确的,即location匹配访问的path目录下的文件直接是在alias目录下查找的;

2)root指定的目录是location匹配访问的path目录的上一级目录,这个path目录一定要是真实存在root指定目录下的;

3)使用alias标签的目录块中不能使用rewrite的break(具体原因不明);另外,alias指定的目录后面必须要加上"/"符号!!

4)alias虚拟目录配置中,location匹配的path目录如果后面不带"/“,那么访问的url地址中这个path目录后面加不加”/“不影响访问,访问时它会自动加上”/“; 但是如果location匹配的path目录后面加上”/“,那么访问的url地址中这个path目录必须要加上”/“,访问时它不会自动加上”/“。如果不加上”/",访问就会失败!

5)root目录配置中,location匹配的path目录后面带不带"/",都不会影响访问。

5、正向代理和反向代理区别:

  • 正向代理:代理的是客户端
  • 反向代理:代理的是服务端

6、 负载均衡策略

  • 轮询

    默认情况下使用轮询方式,逐一转发,这种方式适用于无状态请求。

  • weight(权重)

    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

    upstream httpd { 
      server 127.0.0.1:8001 weight=10 down; 
      server 127.0.0.1:8002 weight=1; 
      server 127.0.0.1:8003 weight=1 backup; 
    }
    # down:表示当前的server暂时不参与负载。(相当于宕机了)
    # weight:默认为1.weight越大,负载的权重就越大。
    # backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。(相当于备胎)
    
  • ip_hash

    根据客户端的ip地址转发同一台服务器,可以保持会话。

  • least_conn

    最少连接访问

  • url_hash

    根据用户访问的url定向转发请求(定向流量转发)(需要第三方插件)

  • fair

    根据后端服务器响应时间转发请求(需要第三方插件)

7、前后端分离nginx.conf配置

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    
    upstream gateway {
       server 192.168.10.106:80;
    }

    server {
        listen       80;
        server_name  localhost;
		charset utf-8;

         # 前端
		location / {
            root  html/dist;
            index  index.html index.htm;
        }
		
		# 后端
		location /api/ {
			proxy_set_header Host $http_host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header REMOTE-HOST $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			#proxy_pass http://localhost:8080/;
			proxy_pass http://gateway;
		}

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

三、高可用配置(集群配置)

准备两台装有nginx的服务器

1、安装Keepalived

  • 离线安装:

    • tar包下载地址:https://www.keepalived.org/download.html#

    • 使用 ./configure 编译安装

    • 如遇下面报错提示

      configure: error: !!! OpenSSL is not properly installed on your system. !!! !!! Can not include OpenSSL headers files. !!!
      

      安装依赖:yum install openssl-devel

  • 在线安装:

    yum install -y keepalived
    
    rpm -q -a keepalived 		#查看是否已经安装上
    
    systemctl start keepalived  #启动
    systemctl status keepalived #状态
    systemctl stop keepalived #停止
    

2、nginx_check.sh脚本

该脚本文件的作用是,探测nginx进程是否存在,如果不存在,则尝试启动nginx,启动不成功后,则停止keepalived服务,让服务切换到备份服务器。

#! /bin/bash
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ];then
      /usr/local/nginx/sbin/nginx  # 以上作用:如果进程没有nginx,则启动nginx
      sleep 2
      if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ];then
             killall keepalived  # 以上作用:如果进程没有nginx,则停止keepalived
      fi
fi

3、修改配置文件

使用yum安装后配置文件在:/etc/keepalived/keepalived.conf

  • 第一台(master):192.168.10.200
! Configuration File for keepalived

global_defs {
   router_id lb200  # 设备标识
   script_user root # 赋予检测脚本的权限
   enable_script_security
}

vrrp_script chk_nginx {
    script "/usr/local/src/nginx_check.sh"
    interval 2   # (检测脚本执行的间隔)2s
    weight 2  # 权重,如果这个脚本检测为真,服务器权重+2
}

vrrp_instance lyh {  # 主、备机的vrrp_instance必须相同
    state MASTER     # 主 master
    interface ens33  # 对应服务器网卡
    virtual_router_id 51  # 主、备机的virtual_router_id必须相同
    priority 100      # 主、备机取不同的优先级,主机值较大,备份机值较小
    advert_int 1      # 每隔1s发送一次心跳
    authentication {  # 校验方式, 类型是密码,密码1111 ,主、备机必须相同
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.202  # 虛拟ip
    }
    track_script {
        chk_nginx
    }
}
  • 第二台(backup):192.168.10.201
! Configuration File for keepalived

global_defs {
   router_id lb201
}

vrrp_instance lyh {
    state BACKUP
    interface ens33 
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.202
    }
}

两台服务器的虚拟地址:192.168.10.202

你可能感兴趣的:(运维,nginx,nginx,服务器,运维)