vlambda博客
学习文章列表

nginx光速入门到进阶

 

1、nginx基本概念


    (1)nginx是什么,做什么事 

高性能、高并发(高达50000)、占有内存少、性能优化

2、nginx安装、常用命令和配置文件


1)在linux系统中安装nginx/usr/src:系统级的源码目录。/usr/local/src:用户级的源码目录#安装相关依赖,安装编译工具及库文件

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel##安装 PCRE依赖,PCRE 作用是让 Nginx 支持 Rewrite 功能。 wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz#解压安装包: tar zxvf pcre-8.35.tar.gz#进入安装包目录[root@bogon src]# cd pcre-8.35#安装[root@bogon pcre-8.35]# ./configure[root@bogon pcre-8.35]# make && make install5、查看pcre版本[root@bogon pcre-8.35]# pcre-config --version

安装 Nginx

1、下载 Nginx,下载地址:https://nginx.org/en/download.html[root@bogon src]# cd /usr/local/src/[root@bogon src]# wget http://nginx.org/download/nginx-1.12.2.tar.gz2、解压安装包[root@bogon src]# tar zxvf nginx-1.12.2.tar.gz3、进入安装包目录[root@bogon src]# cd nginx-1.12.24、编译安装(可以指定安装路径,也可以使用默认的)[root@bogon nginx-1.6.2]# ./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35[root@bogon nginx-1.6.2]# make[root@bogon nginx-1.6.2]# make install5、查看nginx版本[root@bogon nginx-1.6.2]# /usr/local/webserver/nginx/sbin/nginx -v
6、安装成功之后,在 /usr/local/nginx/sbin路径下有启动脚本[root@localhost nginx-1.12.2]# cd /usr/local/nginx/[root@localhost nginx]# lsconf html logs sbin[root@localhost nginx]# ^C[root@localhost nginx]# cd sbin/[root@localhost sbin]# lsnginx nginx.old[root@localhost sbin]##查看开放的端口号firewall-cmd --list-all#设置开放的服务和端口号firewall-cmd --add-service=http --permanentfirewall-cmd --add-port=80/tcp --permanent


(2)nginx常用命令

nginx光速入门到进阶

(3)nginx配置文件

nginx光速入门到进阶

nginx配置文件有三部分组成

1.全局块

从配置文件开始到events块之间的内容,
主要会设置一些影响nginx服务器整体运行的配置指令:

主要包括配置文件运行nginx服务器的用户(组)、允许生成的worker process数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等

nginx光速入门到进阶

这是nginx服务器并发处理服务的关键配置,worker_processes值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。

2events块

nginx光速入门到进阶

events块涉及的指令主要影响nginx服务器与用户的网络连接
比如worker_connections 1024;    支持的最大连接数。

3.http块

nginx服务配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。

    

nginx光速入门到进阶

注意:http块也可以包括http全局块、server块

配置正反向代理

正向代理:在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。

nginx光速入门到进阶


反向代理:客户端只需要将请求发送给反向代理服务器,由反向代理服务器去选择目标服务器获取数据返回给客户端。

    

nginx光速入门到进阶

3、nginx配置实例1-反向代理

1、实现效果
(1)打开浏览器,在浏览器地址栏输入地址xxxxxx(自己的ip),跳转到linux系统tomcat主页面中
2、准备工作

1)在Linux系统中安装tomcatwget http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.70/bin/apache-tomcat-7.0.70.tar.gz然后解压tar -zxvf +压缩包名启动tomcat服务器(在Linux系统中,tomcat使用默认端口8080开放对外访问的端口firewall-cmd --add-port=8080/tcp --permanentfirewall-cmd-reload 重启防火墙查看已经开放的端口号firewall-cmd --list-all

启动tomcat服务器

nginx光速入门到进阶


查看启动后的日志文件

nginx光速入门到进阶


在浏览器访问tomcat服务器

nginx光速入门到进阶


反向代理案例一:

访问过程的分析

nginx光速入门到进阶


具体配置



  1. 在Windows系统的host文件进行域名和ip对应关系的配置

nginx光速入门到进阶




  1. 在最后面加上 192.168.171.131    www.123.com(根据自己服务器的ip来设置)

      2.在nginx进行请求转发的配置(反向代理配置)/usr/local/nginx/conf/nging.conf

nginx光速入门到进阶


重新启动nginx(我这里是将它停止在启动)

nginx光速入门到进阶


输入http://www.123.com/ 访问,注意不用添加端口号,默认使用80端口号访问nginx,然后跳转到tomcat服务器,实现反向代理的效果。

nginx光速入门到进阶


反向代理案例二:

目标:
使用nginx反向代理,根据访问路径跳转到不同端口的服务中,nginx监听端口为9001
访问http://192.168.171.131:9001/edu/ 直接跳转到127.0.0.1:8080
访问http://192.168.171.131:9001/vod/ 直接跳转到127.0.0.1:8081
2、准备工作
(1)准备两个tomcat服务器,一个8080端口,一个8081端口
(2)创建文件夹和测试页面
3、具体配置
修改nginx配置文件如下图:


nginx光速入门到进阶

(2)开放对外访问的端口号 9001 8080 8081

关闭nginx在开启

nginx光速入门到进阶


4.测试

nginx光速入门到进阶

nginx光速入门到进阶



以上案例:

客户端将请求发送到nginx反向代理服务器,nginx反向代理将客户端的请求发送到目标服务器获取数据,目标服务器回应再转发回给代理服务器再转发到客户端。
location指令说明:
该指令用于匹配URL。


nginx光速入门到进阶

3、nginx负载均衡配置

单个服务器解决不了了,我们增加服务器的数量,然后将请求分发到服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。

nginx光速入门到进阶



nginx配置实例2-负载均衡

1.实现效果
(1)浏览器地址栏输入地址http://192.168.171.131:9001/edu/a.html,负载均衡效果,平均8080和8081端口中
2.准备工作
(1)准备两台tomcat服务器,一台8080,一台8081
(2)在两台tomcat里面webapps目录中,创建名称是edu文件夹,在edu文件中创建页面a.html用于测试。
3.在nginx的配置文件中进行负载均衡的配置(http块添加修改)

nginx光速入门到进阶

nginx光速入门到进阶


测试——刷新一次就会访问不同服务器(8081——8080)

nginx光速入门到进阶


4、nginx分配服务器策略

1).轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight
weight代表权重,默认为1,权重越高被分配的客户端越多。
指定轮询几率,weight和访问率成正比,用于后端服务器性能不均的情况。

nginx光速入门到进阶

3)、ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题


nginx光速入门到进阶

4、fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

nginx光速入门到进阶


nginx动静分离

目的是加快网站的解析速度。可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。

nginx光速入门到进阶



1.准备工作

1)在Linux系统中准备静态资源,用于进行访问

nginx光速入门到进阶


2、修改nginx配置文件

nginx光速入门到进阶


重启nginx


3.测试:

nginx光速入门到进阶


添加端口、访问名字

nginx光速入门到进阶


6、nginx配置高可用集群

nginx光速入门到进阶


配置高可用的准备工作:

(1)需要两台服务器 192.168.171.131和192.168.171.129
(2)在两台服务器安装nginx
(3)在两台服务器安装keepalived
使用yum命令进行安装
yum install keepalived -y

nginx光速入门到进阶

#安装之后再etc里面生成目录keepalived。

nginx光速入门到进阶


完成高可用配置(主从配置)

(1)/etc/keepalived/keepalivec.conf配置文件

主服务

nginx光速入门到进阶

nginx光速入门到进阶



#可以直接复制替换源文件内容

global_defs { #全局定义notification_email {[email protected][email protected][email protected]}notification_email_from [email protected]smtp_server 192.168.171.131 #自己服务器IPsmtp_connect_timeout 30router_id LVS_DEVEL #唯一不重复}#脚本配置vrrp_script chk_http_port {script "/usr/local/nginx/nginx_check.sh" #检测脚本的路径及名称interval 2 #(检测脚本执行的间隔)weight -20 #权重。设置当前服务器的权重,此处的配置说明:当前服务器如果宕机了,那么该服务器的权重降低20}#虚拟IP配置vrrp_instance VI_1 {state BACKUP #主服务器写MASTER、备份服务器写BACKUPinterface ens33 #网卡virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同priority 100 #主、备机取不同的优先级,主机值较大,备份机值较小advert_int 1 #时间间隔。每隔多少秒发送一次心跳检测服务器是否还活着,默认1秒发送一次心跳authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.171.50 // VRRP H 虚拟IP地址,网段要和linux的网段一致,可以绑定多个虚拟ip} }

从服务

nginx光速入门到进阶



可以直接复制替换源文件

global_defs { #全局定义notification_email {[email protected][email protected][email protected]}notification_email_from [email protected]smtp_server 192.168.171.129 #自己服务器IPsmtp_connect_timeout 30router_id LVS_DEVEL #唯一不重复}#脚本配置vrrp_script chk_http_port {script "/usr/local/nginx/nginx_check.sh" #检测脚本的路径及名称interval 2 #(检测脚本执行的间隔)weight -20 #权重。设置当前服务器的权重,此处的配置说明:当前服务器如果宕机了,那么该服务器的权重降低20}#虚拟IP配置vrrp_instance VI_1 {state BACKUP #主服务器写MASTER、备份服务器写BACKUPinterface ens33 #网卡virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同priority 90 #主、备机取不同的优先级,主机值较大,备份机值较小advert_int 1 #时间间隔。每隔多少秒发送一次心跳检测服务器是否还活着,默认1秒发送一次心跳authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.171.50 // VRRP H 虚拟IP地址,网段要和linux的网段一致,可以绑定多个虚拟ip} }

(2)在/usr/local/src 添加脚本(从和主都是一样的内容)

#!/bin/bashA=`ps -C nginx -no-header |wc -l`if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx sleep 2 if [ `ps -C nginx -no-header |wc -l` -eq 0 ];then killall keepalived fifi

启动主从服务的nginx和keepalived服务

[root@localhost sbin]# ./nginx -s stop[root@localhost sbin]# ./nginx[root@localhost sbin]# systemctl start keepalived.service[root@localhost sbin]# ps -ef |grep keepalivedroot 110602 1 0 15:46 ? 00:00:00 /usr/sbin/keepalived -Droot 110603 110602 0 15:46 ? 00:00:00 /usr/sbin/keepalived -Droot 110604 110602 0 15:46 ? 00:00:00 /usr/sbin/keepalived -Droot 110657 7510 0 15:50 pts/0 00:00:00 grep --color=auto keepalived[root@localhost sbin]#

最终测试

2.关掉主服务器的nginx服务和keeplived服务,再次访问——成功。

nginx光速入门到进阶


nginx 原理



  1. master&worker——(管理和工作)

nginx光速入门到进阶

nginx光速入门到进阶




2、worker如何进行工作的?


3.一个master和多个woker有什么好处?

1)可以使用nginx -s reload 热部署,利用nginx进行热部署操作

2)每个woker是独立的进程,如果有其中一个woker出现问题,其他worker独立的,

继续进行争抢,实现请求过程,不会造成服务中断。

4、需要设置多少个worker

worker数和服务器的cpu数相等是最为适宜的

5、连接数worker_connection

第一个:发送请求,占用了worker的几个连接数?

2或4个

第二个:nginx有一个master,有四个woker,每个woker支持最大的连接数据1024,支持的最大并发数是多少?

公式: