NGINX(2)

在我们安装好nginx之后,不要继续执行nginx,否则会报错

怎样查看nginx是否已经开启?

1       ps aux
        查看进程
2       netstat -antlp |grep 80
        查看80端口

执行1我们可以发现nginx执行用户为nobody


我们会发现解压nginx压缩包之后,会生成一个nginx开头的目录其中包含conf目录,这里的conf目录时源码目录,而在 /usr/local/nginx/conf的该目录才是我们真正需要修改的地方


 我们修改配置文件

位于/usr/local/nginx/conf/nginx.conf

 首先将nobody改为nginx用户保存退出,然后创建nginx用户(仅用于程序使用)

useradd -M -d /usr/local/nginx -s /sbin/nologin nginx
-M
    不要创建用户主目录
-d
    指定用户主目录的位置
-s
    指定用shell
nginx -s reload

worker——processes 根据cpu数量来进行确定

lscpu

 我们发现虚拟机核心数量为1

所以worker——processes为1

如果我们在cpu核心数量多个的情况下开多个worker,此时工作方式是共享,会加大cpu消耗

优化:

1改为auto

worker——processes auto
        表示自动确定cpu数量,根据系统的cpu核心数来启动相应的worker数量,一个进程对应一个cpu核心

优化:

worker_processes 2; //最多开启8个
worker_cpu_affinity 01 10; //cpu有多少个核,就有几位数,1代表内核开启,0代表内核关闭

执行 ps ax

一个worker

执行 px aux 

 由nobody已改为nginx

继续修改

events {
    use epoll;
    worker_connections  65535;    每个worker的并发数可以达到65535(作为web服务器),作为负载均衡器需要除以cpu核心数量(反向代理)
}
        针对事件,IO复用(5种方式),        ————>IO复用是nginx并发数量高的原因

执行 ulimit -a我们发现打开文件数量只有1024

 我们进行更改

vim /etc/security/limits.conf
设定用户最大文件描述符的使用大小


引入负载均衡器

在引入之前再开三台虚拟机,hostname分别为server2 3 4 ,下载Apache

echo server2 > /var/www/html/index.html
echo server3 > /var/www/html/index.html
        2 3分别写入并重启httpd

在4做hosts解析 /etc/hosts

 官网负载均衡器地址:

HTTP Load Balancing | NGINX Plus

改动如下:

 对于upstream均衡器:

    upstream westos{
        westos为均衡器名字
    server 172.25.0.12:8000 weight=2;
        后端的应用服务器可以监听不同的端口,例如12为8000,13为80
        weight=2为权重,172.25.0.12获取的请求数为172.25.0.13的两倍
    server 172.25.0.13:80;
    server 127.0.0.1 backup;
        备机,在前面的server全部挂掉的时候会启用该server,127.0.0.1为本机地址
}

对于server2监听端口的修改:

vim /etc/httpd/conf/httpd.conf

修改完毕之后在server1(nginx)重启

我们使用server4访问nginx时,显示如下:

 此时当server2挂掉之后我们使用server4访问nginx时,显示如下:

我们修改server1(nginx)作为备机的默认发布目录:

echo server1 > /usr/local/nginx/html/index.html
        记得重启

 当server2和server3全部挂掉时,我们使用server4访问server1

 此外我们需要了解状态码:

HTTP 状态码 | 菜鸟教程


再看ip_hash

意义:同一个IP发过来的数据包会全部发往同一个后端做处理

 我们在使用ip_hash时需要禁掉备机:

 我们在server2没有down掉的情况下,使用server4访问server1

在server2down掉的情况下,使用server4访问server1


此时我们发现ip_hash无法满足负载均衡

此时我们使用Cookie:

 由于我们下载的不是plus版本,所以在扩容调度算法时,先停掉nginx

nginx -s stop

我们选择添加模块来进行升级

链接:https://pan.baidu.com/s/14jfYL_zG-ShHU7ToopBAFg?pwd=2313 
提取码:2313

提前压缩包nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip

下载unzip

unzip nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip
    解压
tar zxf nginx-1.21.1.tar.gz
    再次解压源码压缩包
./configure --with-http_stub_status_module --with-http_ssl_module --prefix=/usr/local/nginx --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
    添加sticky模块
make
cd objs/
cp nginx /usr/local/nginx/sbin/nginx
    覆盖
cd /usr/local/nginx/conf/
vim nginx.conf
编辑文件

 加入该模块

nginx -t                检查语法如图所示:

 启动nginx

使用浏览器测试(建议使用Linux浏览器测试,Windows浏览器会强制将http转为https)

测试结果如下:

且保持不变

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route (a)客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。 (b)后端服务器处理完请求,将响应数据返回给nginx。 (c)此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值 (d)客户端接收请求,并保存带route的cookie。 (e)当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。 其他需要注意的 (a)同一客户端的请求,有可能落在不同的后端服务器上。如果客户端启动时同时发起多个请求。由于这些请求都没带cookie,所以服务器会随机选择后端服务器,返回不同的cookie。当这些请求中的最后一个请求返回时,客户端的cookie才会稳定下来,值以最后返回的cookie为准。 (b)cookie不一定生效。由于cookie最初由服务器端下发,如果客户端禁用cookie,则cookie不会生效。 (c)客户端可能不带cookie。Android客户端发送请求时,一般不会带上所有的cookie,需要明确指定哪些cookie会带上。如果希望用sticky做负载均衡,请对Android开发说加上cookie。 (d)cookie名称不要和业务使用的cookie重名。Sticky默认的cookie名称是route,可以改成任何值。 (e)客户端发的第一个请求是不带cookie的。服务器下发的cookie,在客户端下一次请求时才能生效。 (f)Nginx sticky模块不能与ip_hash同时使用 sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback] [secure] [httponly]; [name=route] 设置用来记录会话的cookie名称 [domain=.foo.bar] 设置cookie作用的域名 [path=/] 设置cookie作用的URL路径,默认根目录 [expires=1h] 设置cookie的生存期,默认不设置,浏览器关闭即失效,需要是大于1秒的值 [hash=index|md5|sha1] 设置cookie中服务器的标识是用明文还是使用md5值,默认使用md5 [no_fallback] 设置该项,当sticky的后端机器挂了以后,nginx返回502 (Bad Gateway or Proxy Error) ,而不转发到其他服务器,不建议设置 [secure] 设置启用安全的cookie,需要HTTPS支持 [httponly] 允许cookie不通过JS泄漏,没用过

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值