nginx的编译安装,基本配置和负载均衡

本次实验环境redhat6.5,selinux,iptbles关闭
server1(172.25.92.1)安装nginx
server2和server3安装apache来测试负载均衡

安装nginx

get nginx-1.10.1.tar.gz 
tar zxf nginx-1.10.1.tar.gz
cd nginx-1.10.1/src/core/
vim nginx.h

修改此处:
这里写图片描述
vim nginx-1.10.1/auto/cc/gcc
修改如下:
这里写图片描述
注释掉dubug之后,编译得到的makefile文件比较小,只有不到1M,不注释会比较大,而且相对慢。

#安装依赖包:
yum install -y pcre-devel gcc openssl-devel #pcre模块的安装是为了实现重写
cd /root/nginx-1.10.1
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_ssl_module --with-http_stub_status_module
#configure命令是用来检测你的安装平台的目标特征的。它定义了系统的各个方面,包括nginx的被允许使用的连接处理的方法,比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本,执行结束时,它会创建一个Makefile文件。
make && make install
#make是用来编译的,它从Makefile中读取指令,然后编译。
#make install是用来安装的,它也从Makefile中读取指令,安装到指定的位

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
nginx   #开启nginx

使用ps axu | grep nginx可以看到nginx默认是以nobody的身份运行,现在将nobody身份改为nginx

vim /usr/local/nginx/conf/nginx.conf
     2 user  nginx;
useradd -u 800 nginx
nginx -s reload
再次查看进程运行用户变为nginx

配置nginx开启的进程数,一般来说,此配置依据cpu个数来设定.
使用lscpu命令查看cpu个数.
如果是两颗cpu,两个nginx进程的化,可以将进程和cpu绑定,可以减少cpu损耗,如进程在cpu之间的切换等动作

vim /usr/local/nginx/conf/nginx.conf
    worker_processes  2;
    worker_cpu_affinity 01 10;

worker_connections 参数控制nginx单进程的最大连接数,如果想要改变需要从三方面更改:

#内核层面:
sysctl -a | grep file  #查看打开文件最大数
fs.file-nr = 992    0   188465
fs.file-max = 188465
可知打开最大文件数为188465
#系统层面:
vim /etc/security/limits.conf
在最后添加:
    nginx            -      nofile          65535
#应用层面:
vim /usr/local/nginx/conf/nginx.conf
     12 events {
     13     worker_connections  65535;
     14 }

查看效果:
su - nginx
ulimit -a
这里写图片描述
可以看出现在单进程处理的最大链接数为65535
,更能实现高并发,并发数是worker_processes和worker_connections的乘积,原本worker_connections是1024,比较小。

27     sendfile        on;  #此参数会提高webserver性能,是否调用sendfle()函数来输出文件
28     tcp_nopush     on;
29     tcp_nodelay    on;

33     gzip  on;        #开启gzip压缩

配置nginx网页加密(ssl):

vim /usr/local/nginx/conf/nginx.conf

108     server {
109         listen       443 ssl;   #修改端口
110         server_name  localhost;     #localhost
111 
112         ssl_certificate      cert.pem;
113         ssl_certificate_key  cert.pem; #私钥和公钥相同
114 
115         ssl_session_cache    shared:SSL:1m;
116         ssl_session_timeout  5m;
117 
118         ssl_ciphers  HIGH:!aNULL:!MD5;
119         ssl_prefer_server_ciphers  on;
120 
121         location / {
122             root   html;
123             index  index.html index.htm;
124         }
125     }

生成密钥流程:

cd /etc/pki/tls/certs/
vim Makefile    #记录了生成公钥做的事
make cert.pem   #将签名信息填好
mv cert.pem /usr/local/nginx/conf/  
nginx -s reload
netstat -antlp | grep nginx    #出现443端口开启
在浏览器访问:也需要下载证书

证书信息:
这里写图片描述
启用nginx状态模块,记录处理连接的数量,和访问控制

vim /usr/local/nginx/conf/nginx.conf
    52         location /status {
     53                 stub_status on;
     54                 access_log off;
     55                 allow 172.25.92.250;  #白名单,需要加上访问控制,为了安全
     56                 deny all; #黑名单
     57         }

这里写图片描述

创建两个虚拟主机,实现访问不同域名,返回不同响应

vim /usr/local/nginx/conf/nginx.conf
126     server {
127         listen 80;
128         server_name www.westos.com;
129 
130         location / {
131                 root /www1;
132                 index index.html;
133          
134                 }
135         }
136         server {
137         listen 80;
138         server_name bbs.westos.com;
139 
140         location / {
141                 root /www2;
142                 index index.html;
143                 }
144         }

测试:
server1上:

mkdir /www1
vim /www1/index.html
    www.westos.com-server1
mkdir /www2
    bbs.westos.com-server1
vim /www2/index.html

在本机上:

在/etc/hosts文件加解析:
172.25.92.1  www.westos.com bbs.westos.com
可以看见效果
[root@foundation92 Desktop]# curl www.westos.com
www.westos.com-server1
[root@foundation92 Desktop]# curl bbs.westos.com
bbs.westos.com-server1

定义后端服务器群组,后端服务器不一定是80端口,应用层支持端口转发

vim /usr/local/nginx/conf/nginx.conf
18         upstream westos {
19                 server 172.25.92.2:80 weight=2;  #可以指定后段主机的权重
20                 server 172.25.92.3:8080 backup;  #也可以指定后端主机为备份主机
21         }
#默认是轮叫算法(rr)
126     server {
127         listen 80;
128         server_name www.westos.com;
129 
130         location / {
131                 #root /www1;
132                 #index index.html;
133                 proxy_pass http://westos;   #使用proxy_pass模块,指定负载的后端主机
134                 }
135         }
136         server {
137         listen 80;
138         server_name bbs.westos.com;
139 
140         location / {
141                 root /www2;
142                 index index.html;
143                 }
144         }
nginx -s reload

测试:

#在server2上:安装httpd
vim /var/www/html/index.html
    <h1>www.westos.com-server2</h1>
#server3上:安装httpd
vim /etc/httpd/conf/httpd.conf
Listen 8080     #将端口改为8080,根据upstream中
vim /var/www/html/index.html
    <h1>www.westso.com-server3</h1>
#在主机上:
vim /etc/hosts
    172.25.92.1    www.westos.com

[root@foundation92 Desktop]# curl www.westos.com
<h1>www.westos.com-server2</h1>
[root@foundation92 Desktop]# curl www.westos.com
<h1>www.westso.com-server3</h1>
[root@foundation92 Desktop]# curl www.westos.com
<h1>www.westos.com-server2</h1>
[root@foundation92 Desktop]# curl www.westos.com
<h1>www.westso.com-server3</h1>
也可以使用命令:for i in {1..10}; do curl www.westos.com; done  完成十条请求
可以看出实现了应用层上的负载均衡

使用ip_hash调度算法完成nginx负载均衡,可以解决session的问题。
原理;根据客户端访问的ip调度,ip不变,则请求不变
弊端:数据里流向:client–>cdn–>nginx–>http,nginx拿到的是cdn的ip,如过nginx是ip_hash的话,就只有一个ip数据传输通道,不能满足后端负载均衡。
基于cookie的调度可以解决这个弊端,每个客户端浏览器会有不一>样的cookie值,客户端发送数据包的时候,会把cookie加在数据包中发给服务器,因此可以根据cookie的值来实现ip_hash此种调度策略的负载均衡

使用sticky算法实现nginx调度:
原理:Sticky就是基于cookie的一种负载均衡解决方案,通过cookie实现客户端与后端服务器的会话保持, 在一定条件下可以保证同一个客户端访问的都是同一个后端服务器。请求来了,服务器发个cookie,并说:下次来带上,直接来找我。
sticky的处理过程如下(假设cookie名称为route):
1.客户端首次发起请求,请求头未带route的cookie。nginx接收请求,发现请求头没有route,则以轮询方式将请求分配给后端服务器。
2.后端服务器处理完请求,将响应头和内容返回给nginx。
3.nginx生成route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值。
4.客户端接收请求,并创建route的cookie。
5.客户端再次发送请求时,带上route。
6.nginx接收到route,直接转给对应的后端服务器。

普通开源的nginx不支持此种算法,需要添加模块:
server1上:

killall nginx
vim /usr/local/nginx/conf/nginx.conf

18         upstream westos {
 19                 sticky;    #调度算法
 20                 server 172.25.92.2:80;
 21                 server 172.25.92.3:8080;
 22         }
get nginx-sticky-module-ng.tar.gz
tar zxf nginx-sticky-module-ng.tar.gz
cd nginx-1.10.1
make clean      #清除原本的Makefile

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --add-module=/root/nginx-sticky-module-ng   #最后一个要指定好位置
 make
 make install
nginx
nginx -s reload

测试:在本地加dns解析
在浏览器测试,刷新不会变化,是因为cooike值没有变
这里写图片描述
在shell命令行测试依然会有负载均衡,原因是shell命令行没有cookie,所以依然使用轮叫的算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值