nginx光速入门到进阶

Posted 黑马金牌编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 install
5、查看pcre版本
[root@bogon pcre-8.35]# pcre-config --version

nginx光速入门到进阶_反向代理

安装 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.gz
2、解压安装包
[root@bogon src]# tar zxvf nginx-1.12.2.tar.gz
3、进入安装包目录
[root@bogon src]# cd nginx-1.12.2
4、编译安装(可以指定安装路径,也可以使用默认的)
[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 install
5、查看nginx版本
[root@bogon nginx-1.6.2]# /usr/local/webserver/nginx/sbin/nginx -v

nginx光速入门到进阶_反向代理_02

6、安装成功之后,在 /usr/local/nginx/sbin路径下有启动脚本

[root@localhost nginx-1.12.2]# cd /usr/local/nginx/
[root@localhost nginx]# ls
conf html logs sbin
[root@localhost nginx]# ^C
[root@localhost nginx]# cd sbin/
[root@localhost sbin]# ls
nginx nginx.old
[root@localhost sbin]#
#查看开放的端口号
firewall-cmd --list-all
#设置开放的服务和端口号
firewall-cmd --add-service=http --permanent
firewall-cmd --add-port=80/tcp --permanent

nginx光速入门到进阶_nginx_03

nginx光速入门到进阶_服务器_04

nginx光速入门到进阶_服务器_05

(2)nginx常用命令

nginx光速入门到进阶_服务器_06

nginx光速入门到进阶_nginx_07

(3)nginx配置文件

nginx光速入门到进阶_nginx_08

nginx光速入门到进阶_nginx_09

nginx配置文件有三部分组成

1.全局块

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

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

nginx光速入门到进阶_反向代理_10

nginx光速入门到进阶_反向代理_11

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

2events块

nginx光速入门到进阶_nginx_12

nginx光速入门到进阶_服务器_13

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

3.http块

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


nginx光速入门到进阶_反向代理_14

nginx光速入门到进阶_反向代理_15

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

3、配置反向代理

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

nginx光速入门到进阶_反向代理_16

nginx光速入门到进阶_反向代理_17

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


nginx光速入门到进阶_nginx_18

nginx光速入门到进阶_nginx_19

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

1、实现效果
(1)打开浏览器,在浏览器地址栏输入地址xxxxxx(自己的ip),跳转到linux系统tomcat主页面中
2、准备工作
(1)在Linux系统中安装tomcat
wget 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 --permanent
firewall-cmd-reload 重启防火墙
查看已经开放的端口号
firewall-cmd --list-all

nginx光速入门到进阶_服务器_20

启动tomcat服务器

nginx光速入门到进阶_反向代理_21

nginx光速入门到进阶_反向代理_22

查看启动后的日志文件

nginx光速入门到进阶_服务器_23

nginx光速入门到进阶_nginx_24

在浏览器访问tomcat服务器

nginx光速入门到进阶_反向代理_25

nginx光速入门到进阶_服务器_26

反向代理案例一:

访问过程的分析

nginx光速入门到进阶_nginx_27

nginx光速入门到进阶_服务器_28

具体配置

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

nginx光速入门到进阶_服务器_29

nginx光速入门到进阶_服务器_30

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

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

nginx光速入门到进阶_nginx_31

nginx光速入门到进阶_反向代理_32

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

nginx光速入门到进阶_反向代理_33

nginx光速入门到进阶_nginx_34

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

nginx光速入门到进阶_nginx_35

nginx光速入门到进阶_服务器_36

反向代理案例二:

目标:
使用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光速入门到进阶_nginx_37

nginx光速入门到进阶_服务器_38

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

关闭nginx在开启

nginx光速入门到进阶_nginx_39

nginx光速入门到进阶_服务器_40

4.测试

nginx光速入门到进阶_反向代理_41

nginx光速入门到进阶_反向代理_42

nginx光速入门到进阶_服务器_43

nginx光速入门到进阶_服务器_44

以上案例:

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

nginx光速入门到进阶_nginx_45

nginx光速入门到进阶_nginx_46

3、nginx负载均衡配置

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

nginx光速入门到进阶_服务器_47

nginx光速入门到进阶_反向代理_48

4、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光速入门到进阶_反向代理_49

nginx光速入门到进阶_服务器_50

nginx光速入门到进阶_服务器_51

nginx光速入门到进阶_反向代理_52

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

nginx光速入门到进阶_nginx_53

nginx光速入门到进阶_nginx_54

4、nginx分配服务器策略

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

nginx光速入门到进阶_nginx_55

nginx光速入门到进阶_服务器_56

3)、ip_hash

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

nginx光速入门到进阶_反向代理_57

nginx光速入门到进阶_nginx_58

4、fair(第三方)

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

nginx光速入门到进阶_反向代理_59

nginx光速入门到进阶_反向代理_60

5、nginx动静分离

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

nginx光速入门到进阶_nginx_61

nginx光速入门到进阶_服务器_62

1.准备工作

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

nginx光速入门到进阶_服务器_63

nginx光速入门到进阶_反向代理_64

2、修改nginx配置文件

nginx光速入门到进阶_nginx_65

nginx光速入门到进阶_nginx_66

重启nginx

3.测试:

(1)浏览器中输入地址

nginx光速入门到进阶_nginx_67

nginx光速入门到进阶_反向代理_68

添加端口、访问名字

nginx光速入门到进阶_服务器_69

nginx光速入门到进阶_服务器_70

6、nginx配置高可用集群

nginx光速入门到进阶_服务器_71

nginx光速入门到进阶_nginx_72

配置高可用的准备工作:

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

nginx光速入门到进阶_反向代理_73

nginx光速入门到进阶_nginx_74

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

nginx光速入门到进阶_反向代理_75

nginx光速入门到进阶_nginx_76

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

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

主服务

nginx光速入门到进阶_nginx_77

nginx光速入门到进阶_服务器_78

nginx光速入门到进阶_服务器_79

nginx光速入门到进阶_服务器_80

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

global_defs     #全局定义
notification_email
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc

notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.171.131 #自己服务器IP
smtp_connect_timeout 30
router_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、备份服务器写BACKUP
interface ens33 #网卡
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 100 #主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 #时间间隔。每隔多少秒发送一次心跳检测服务器是否还活着,默认1秒发送一次心跳
authentication
auth_type PASS
auth_pass 1111

virtual_ipaddress
192.168.171.50 // VRRP H 虚拟IP地址,网段要和linux的网段一致,可以绑定多个虚拟ip

从服务

nginx光速入门到进阶_nginx_81

nginx光速入门到进阶_nginx_82

可以直接复制替换源文件

global_defs     #全局定义
notification_email
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc

notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.171.129 #自己服务器IP
smtp_connect_timeout 30
router_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、备份服务器写BACKUP
interface ens33 #网卡
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 90 #主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 #时间间隔。每隔多少秒发送一次心跳检测服务器是否还活着,默认1秒发送一次心跳
authentication
auth_type PASS
auth_pass 1111

virtual_ipaddress
192.168.171.50 // VRRP H 虚拟IP地址,网段要和linux的网段一致,可以绑定多个虚拟ip

nginx光速入门到进阶_服务器_83

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

#!/bin/bash
A=`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
fi
fi

nginx光速入门到进阶_反向代理_84

启动主从服务的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 keepalived
root 110602 1 0 15:46 ? 00:00:00 /usr/sbin/keepalived -D
root 110603 110602 0 15:46 ? 00:00:00 /usr/sbin/keepalived -D
root 110604 110602 0 15:46 ? 00:00:00 /usr/sbin/keepalived -D
root 110657 7510 0 15:50 pts/0 00:00:00 grep --color=auto keepalived
[root@localhost sbin]#

nginx光速入门到进阶_服务器_85

最终测试

1.在浏览器地址栏输入虚拟IP地址 :192.168.171.50

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

nginx光速入门到进阶_nginx_86

nginx光速入门到进阶_反向代理_87

7、nginx 原理

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

nginx光速入门到进阶_反向代理_88

nginx光速入门到进阶_nginx_89

nginx光速入门到进阶_nginx_90

nginx光速入门到进阶_服务器_91

2、worker如何进行工作的?

nginx光速入门到进阶_反向代理_92

nginx光速入门到进阶_nginx_93

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,支持的最大并发数是多少?

公式:

nginx光速入门到进阶_服务器_94

nginx光速入门到进阶_服务器_95微信公众号:黑马金牌编程

个人网站:​http://www.heimajinpai.cn/wordpress/​

以上是关于nginx光速入门到进阶的主要内容,如果未能解决你的问题,请参考以下文章

重磅!两万字长文总结,梳理 Java 入门进阶哪些事(推荐收藏)

Matplotlib光速入门-从安装到常用实战

HAproxy实现从入门到进阶

Matplotlib光速入门-从安装到绘图实战

消息队列,入门轻松,进阶不易

Git光速入门