nginx学习

1. 下载nginx安装包

# wget http://nginx.org/download/nginx-1.16.0.tar.gz

2. 解压缩安装包

# tar -zxvf nginx-1.16.0.tar.gz

3. 编译安装nginx

安装前请先安装gcc、make,本次编译并未编译其他模块并且没有将指定功能开关打开或者关闭,后期逐步完善。
1.yum -y install gcc automake autoconf libtool make
2.yum install gcc gcc-c++

# tar -zxvf nginx-1.16.0.tar.gz
# cd nginx-1.16.0
# ./configure && make && make install

4. nginx基础配置

4.1 虚拟主机配置(web服务)

虚拟主机:在一台服务器上设置多个Web站点

#定义两台虚拟主机
server {
		#此处可以将listen监听端口配置放在http块的全局配置中
        listen       8888;
        server_name  www.test11.com;

        location  / {
            root  /var/www/test1 ;
            index  test1.html ;
        }
}
server {
		#此处可以将listen监听端口配置放在http块的全局配置中
        listen       8888;
        server_name  www.test22.com;

        location  / {
            root  /var/www/test2 ;
            index  test2.html ;
        }
}

4.1.1 访问测试一下

在电脑上设置hosts解析或者配置域名服务器,如下配置:
# 192.168.1.8 www.test11.com www.test22.com
在这里插入图片描述在这里插入图片描述

4.2 负载均衡配置

引用网友博客:https://www.cnblogs.com/qlqwjy/p/8536779.html

负载均衡:分摊到多个操作单元上进行执行,和它的英文名称很匹配。就是我们需要一个调度者,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡。
upstream目前支持的分配算法:
1)、轮询 ——1:1 轮流处理请求(默认)
每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,自动剔除,剩下的继续轮询。
2)、权重 ——you can you up
通过配置权重,指定轮询几率,权重和访问比率成正比,用于应用服务器性能不均的情况。
3)、ip_哈希算法
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个应用服务器,可以解决session共享的问题。

#定义后端真正提供服务的业务服务器信息
upstream realserver2 {
	server 192.168.1.9:8089 ;
	server 192.168.1.10:8088 ;
}
server {
        listen       7777;
        server_name  www.test33.com;

        location  / {
            #将用户请求转发至upstream块中定义的服务器组
            proxy_pass http://realserver2;    
        }
}
#nginx其他配置
1)down
    表示单前的server暂时不参与负载
2)Weight
    默认为1.weight越大,负载的权重就越大。
3)max_fails
    允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4)fail_timeout
    max_fails 次失败后,暂停的时间。
5)Backup
    其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

4.3 keepalived+nginx实现负载均衡高可用web集群

角色IP
nginx+keepalived(master)192.168.1.8
nginx+keepalived(backup)192.168.1.6
web服务器(httpd)192.168.1.9
web服务器(httpd)192.168.1.10
#keepalived安装(192.168.1.8)
yum install keepalived -y
cat /etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_script check_nginx {
    script /root/check_nginx.sh
    interval 2
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33 
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.22/24 dev ens33 label ens33:1
    }
    track_script {
        check_nginx
    }
}
EOF

#keepalived安装(192.168.1.6)
yum install keepalived -y
cat /etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_script check_nginx {
    script /root/check_nginx.sh
    interval 2
}
vrrp_instance VI_1 {
    #此处与master不一致
    state BACKUP
    interface ens33 
    virtual_router_id 51
    #此处与master不一致
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.22/24 dev ens33 label ens33:1
    }
    track_script {
        check_nginx
    }
}
EOF

#服务检测脚本
[root@localhost keepalived]# cat /root/check_nginx.sh 
#!/bin/bash
status_code=$(netstat -tunlp|grep 7777|awk -F":" '{print $2}'|cut -c 1-5)
if [ -z $status_code];then
  systemctl stop keepalived
fi

4.4 nginx location解析

一直搞不懂这块,今天看了一篇博文,还不错,果断收藏。
转载自博友 https://blog.csdn.net/fengzyf/article/details/88954599

访问nginx: 首先要匹配location中的uri 规则, 匹配上后, 然后再将root指定的根目录,拼接上location 上的路径, 再拼接上该目录下的文件, 这才是最终访问的路径, 目前不知道为什么是这样做, 理解不了, 只能先记住。

location [=|~|~*|^~|@] /uri/ { … }  分为两种location: 正则location 和 普通location
一: 正则location: “~ ”和“~* ”前缀表示正则location, “~ ”区分大小写,“~* ”不区分大小写;
二: 普通location: 其他前缀(包括:“=”,“^~ ”和“@ ”)和无任何前缀的都属于普通location 。

普通location 和 正则location 匹配规则是:先匹配普通location (再匹配正则表达式)
普通location 之间匹配规则 --> 最大前缀匹配
例如:location /prefix/mid/ {} 和 location /prefix/ {} , 对于HTTP 请求/prefix/mid/t.html ,(首先看是两个普通location比较,所以是最大前缀匹配规则;) 
前缀匹配的话两个location 都满足,选哪个?原则是:the most specific match ,于是选的是location /prefix/mid/ {} )。

“正则location ”与“正则location”内部的匹配规则是:
按照正则location 在配置文件中的物理顺序(编辑顺序)匹配的,并且只要匹配到一条正则location ,就不再考虑后面的

“普通location ”的最大前缀匹配结果与继续搜索的“正则location ”匹配结果的决策关系。
如果继续搜索的“正则location ”也有匹配上的,那么“正则location ”覆盖 “普通location ”的最大前缀匹配

通常的规则是,匹配完了“普通location ”指令,还需要继续匹配“正则location ”,但是你也可以告诉Nginx :
匹配到了“普通location ”后,不再需要继续匹配“正则location ”了,要做到这一点只要在“普通location ”前面加上“^~ ”符号(^ 表示“非”,~ 表示“正则”,字符意思是:不要继续匹配正则)。
“^~ ”和“= ”都能阻止继续搜索正则location 的话,区别: 
共同点是它们都能阻止继续搜索正则location ,不同点是“^~ ”依然遵守“最大前缀”匹配规则,然而“= ”不是“最大前缀”,而是必须是严格匹配(exact match )。

5. nginx.conf文件解释

全局块 {
	#配置Nginx worker进程最大打开文件数
	worker_rlimit_nofile:65535;
	#开启8个工作进程
	worker_processes  8;
	#使用8核cpu,利用多核来处理任务
	worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
}
events {
    #单个进程允许的客户端最大连接数
    worker_connections  20480;
}
http {
	#此配置并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的。
	server_tokens off;
	# 这里形如text/html格式的字符串就是用来说明数据类型的,
	/前的是主类型,/之后的是该主类型下的子类型。
	详细的类型定义在RFC2046中。
	Nginx通过服务器端文件的后缀名来判断这个文件属于什么类型,
	再将该数据类型写入HTTP头部的Content-Type字段中,发送给客户端。
	include   /apps/srv/nginx/conf/mime.types;
	#减少上下文切换,简单说,sendfile是个比 read 和 write 更高性能的系统接口, 不过需要注意的是,sendfile 是将 in_fd 的内容发送到 out_fd 。而 in_fd 不能是 socket , 也就是只能文件句柄。 所以当 Nginx 是一个静态文件服务器的时候,开启 SENDFILE 配置项能大大提高 Nginx 的性能。 但是当 Nginx 是作为一个反向代理来使用的时候,SENDFILE 则没什么用了,因为 Nginx 是反向代理的时候。 in_fd 就不是文件句柄而是 socket,此时就不符合 sendfile 函数的参数要求了。sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
	send_file on;
	#设置变量值
	map  $sent_http_set_cookie $resp_uuid {
        ~*PHPSESSID=(?<u>[0-9a-z]+) $u;
        default $cookie_PHPSESSID;
    }
    tcp_nopush on;
    server_names_hash_bucket_size 128;
    #Nginx 使用 keepalive_timeout 来指定 KeepAlive 的超时时间(timeout)。指定每个 TCP 连接最多可以保持多长时间。Nginx 的默认值是 75 秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为 0,就禁止了 keepalive 连接。
    keepalive_timeout 60;
    #见buffer是什么?
    proxy_buffer_size   128k;
    proxy_buffers   4 256k;
    proxy_busy_buffers_size   256k;
    proxy_ignore_client_abort on;
	#指定nginx与后端fastcgi server连接超时时间
	fastcgi_connect_timeout 30;
	#指定nginx向后端传送请求超时时间(指已完成两次握手后向fastcgi传送请求超时时间)
	fastcgi_send_timeout 30;
	#指定nginx接受后端fastcgi响应请求超时时间 (指已完成两次握手后nginx接受fastcgi响应请求超时时间)
	fastcgi_read_timeout 30;
	#指定logFormat格式,在文件中指定
	include /apps/srv/nginx/conf/logFormat.conf;
    include /apps/srv/nginx/conf/conf.d/cache/*.conf;
    include /apps/srv/nginx/conf/upstream.conf;
    include /apps/srv/nginx/conf/conf.d/*.conf;
    #access日志格式,main是指给日志格式起的名字
    access_log    /apps/srv/nginx/logs/access.log  main;
}

  • buffer 是什么?
    buffer ,即缓冲区,它在 Nginx 上发挥的作用就是 启用一个缓冲区,先在这个缓冲区内进行存储,再把数据发送出去 。和在线观看视频有点类似,先把视频文件缓冲一部分到本地再开始播放。
    若没有 buffer,数据将会直接从 Nginx 传输到客户端。假设如果客户端的加载速度足够快,你可以直接把 buffer 关掉,让数据尽可能快地到达客户端。
    而使用 buffer,Nginx 将会临时存储后端 response 到缓冲区,然后慢慢把数据发送到客户端。启用 buffer 的好处在于可以把数据一次性地发送给目标,相较于即时传输可以节约出这部分带宽。
    顺带一提,Nginx 全局配置中的 tcp_nopush 的作用就是 数据包会累计到一定大小之后才会发送 。而 tcp_nodelay 是尽快发送数据,所以若你启用了 buffer,建议关闭 tcp_nodelay。
  • index指令的作用:
    1. 该指令后面可以跟多个文件,用空格隔开;
    2. 如果包括多个文件,Nginx会根据文件的枚举顺序来检查,直到查找的文件存在;
    3. 文件可以是相对路径也可以是绝对路径,绝对路径需要放在最后;
    4. 文件可以使用变量$来命名;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值