一、Nginx简介
Nginx是一个http服务器。是一个使用c语言开发的高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。nginx能够支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx是一款用C语言开发的自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP(电子邮件)代理服务器,nginx能够支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locator)URL作为沟通依据,通过HTTP协议提供各种网络服务。
apache被设计为一个重量级的。它不支持高并发的服务器。在Apache上运行数以万计的并发访问,会导致服务器消耗大量内存。操作系统对其进行进程或线程间的切换也消耗了大量的CPU资源,导致HTTP请求的平均响应速度降低。
这些都决定了Apache不可能成为高性能WEB服务器,轻量级高并发服务器Nginx就应运而生了。
二、nginx能做什么?
1.负载均衡是Nginx常用的一个功能,当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。
2.我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。
3.如此一来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。
三、Nginx部署
主机环境:
rhel6.5 selinux and iptable disabled
实验环境:
主机名 | IP | 服务 |
---|---|---|
server1 | 172.25.5.1 | nginx |
server2 | 172.25.5.2 | apache |
server3 | 172.25.5.3 | apache |
foudation5 | 172.25.5.250 | 测试 |
1.Nginx的编译安装
1.解压nginx的安装包
[root@server1 ~]# tar zxf nginx-1.14.2.tar.gz ##解压资源包
2.去掉nginx的版本号,关闭debug日至
[root@server1 ~]# cd nginx-1.14.2
[root@server1 nginx-1.14.2]# vim src/core/nginx.h
14 #define NGINX_VER "nginx/" ##隐藏版本号,防止黑客攻击
[root@server1 cc]# vim gcc
#####关闭debug日至(因为debug的日志非常多,企业中一般不需要开启)
171 # debug
172 #CFLAGS="$CFLAGS -g" #日志级别,不开启debug的话,编译出来的nginx会很小
3.进入解压目录,进行编译安装
[root@server1 nginx-1.14.2]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
[root@server1 nginx-1.14.2]# make && make install
注意:
在对nginx源码编译安装之前,要下载三个相关软件
yum install gcc -y ##因为源码是C,所以安装gcc
yum install pcre-devel -y ##PCRE,因为nginx的重写
yum install openssl-devel -y ##会出现SSL加密算法(四握手五挥手)
[root@server1 sbin]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin
#####给nginx添加链接,方便管理
4.编辑nginx的主配置文件
[root@server1 ~]# cd /usr/local/nginx/
[root@server1 nginx]# ls
client_body_temp fastcgi_temp logs sbin uwsgi_temp
conf html proxy_temp scgi_temp
[root@server1 nginx]# cd conf/
[root@server1 conf]# vim nginx.conf
2 user nginx nginx; #使用户为nginx用户和nginx用户组进行管理
3 worker_processes 4; #nginx的工作进程数,一般设置为cpu核数 ,auto为自动识别cpu核数,但是一般不推荐使用
4 worker_cpu_affinity 0001 0010 0100 1000;
12 events {
13 worker_connections 65535; #worker可以开启的线程数,进程最大连接数
18 http {
19 include mime.types;
20 default_type application/octet-stream;
21 upstream westos{
22 server 172.25.254.2:80; #后端服务器
23 server 172.25.254.3:80;
24 }
120 server {
121 listen 80; #nginx监听80端口
122 server_name www.westos.org; ##访问域名
123 location / { #访问上边的虚拟主机
124 proxy_pass http://westos;
125 }
126 }
127 }
[root@server1 conf]# id nginx
id: nginx: No such user
[root@server1 conf]# id nginx
uid=500(nginx) gid=500(nginx) groups=500(nginx)
[root@server1 conf]# useradd nginx
[root@server1 conf]# nginx -t
[root@server1 conf]# nginx
[root@server1 conf]# ps aux ##可以看到有一个master进程,4个worker进程
因为刚才的配置文件中worker_processes 参数设置为4
5.server2和server3上安装httpd服务,开启服务,然后编写默认测试页面内容
[root@server2 bin]# yum install httpd -y
[root@server2 bin]# /etc/init.d/httpd start
[root@server2 ~]# cd /var/www/html
[root@server2 html]# vim index.html
server2
[root@server3 bin]# yum install httpd -y
[root@server3 bin]# /etc/init.d/httpd start
[root@server3 ~]# cd /var/www/html/
[root@server3 html]# vim index.html
server3
6.在物理机中添加解析
vim /etc/hosts
172.25.5.1 www.westos.org
7 .(1)测试: curl www.westos.org ##物理机
显示server2,server3轮询被访问到
(2)测试nginx是否提供健康状况检查
[root@server2 html]# /etc/init.d/httpd stop
curl www.westos.org,只显示server3
2.配置文件解析
1.添加ip_hash
[root@server1 conf]# vim nginx.conf
21 upstream westos{
22 ip_hash; #同一个IP的请求会指定到同一个后端主机
23 server 172.25.254.2:80;
24 server 172.25.254.3:80;
25 }
[root@server1 conf]# nginx -t ##检查语法是否正确
[root@server1 conf]# nginx -s reload
curl www.westos.com ##此时IP被绑定到server2或server3上
2.server 127.0.0.1:80 backup; 后端服务器全坏时则访问本机
[root@server1 conf]# vim nginx.conf
21 upstream westos{
22 #ip_hash;
23 server 172.25.254.2:80;
24 server 172.25.254.3:80;
25 server 127.0.0.1:80 backup; ##主机地址
26 }
[root@server1 conf]# nginx -t
[root@server1 conf]# nginx -s reload
[root@server1 ~]# yum install -y httpd
[root@server1 ~]# /etc/init.d/httpd start
[root@server1 ~]# cd /usr/local/nginx/html/
[root@server1 html]# ls
50x.html index.html
[root@server1 html]# mv index.html index.html.back ##可以将默认发布文件备份
[root@server1 html]# vim index.html
网页正在维护中...
测试:
将后端的httpd关闭
[root@server2 html]# /etc/init.d/httpd stop
[root@server3 html]# /etc/init.d/httpd stop
curl www.westos.org 显示网页正在维护中,访问的是server1