nginx详解及实战

 

 

Nginx 入门到精通

 

什么是Nginx?

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。2011年6月1日,nginx 1.0.4发布。

其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。

Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。

Nginx代码完全用C语言从头写成。官方数据测试表明能够支持高达 50,000 个并发连接数的响应。

 

Nginx作用?

> Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。、

 

正向代理

Nginx不仅可以做反向代理,实现负载均衡。还能用作正向代理实现上网功能。

正向代理:如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

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

 

 

反向代理

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。

 

 

 

> 负载均衡

Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的。

轮询

加权轮询

iphash

iphash对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。

> 动静分离

在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。

目前,通过使用Nginx大大提高了我们网站的响应速度,优化了用户体验,让网站的健壮性更上一层楼!

 

Nginx的安装

windows下安装

1、下载nginx

http://nginx.org/en/download.html 下载稳定版本。
以nginx/Windows-1.19.2为例,直接下载 nginx-1.19.2.zip。
下载后解压,解压后如下:

2、启动nginx

有很多种方法启动nginx

(1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过

(2)打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe 或者 start nginx ,回车即可

3、检查nginx是否启动成功

直接在浏览器地址栏输入网址 http://localhost:80 回车,出现以下页面说明启动成功!

4、配置监听

nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口即可。

 

 

linux下安装

1、安装gcc

安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:

yum install gcc-c++

2、PCRE pcre-devel 安装

PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:

yum install -y pcre pcre-devel

3、zlib 安装

zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。

yum install -y zlib zlib-devel

4、OpenSSL 安装
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。

yum install -y openssl openssl-devel

5、下载安装包

手动下载.tar.gz安装包,地址:https://nginx.org/en/download.html

下载完毕上传到服务器上 /root

6、解压

tar -zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0

7、配置

使用默认配置,在nginx根目录下执行

./configure
make
make install

查找安装路径: whereis nginx

 

Nginx常用命令

  1. cd /usr/local/nginx/sbin/
  2. ./nginx 启动
  3. ./nginx -s stop 停止
  4. ./nginx -s quit 安全退出
  5. ./nginx -s reload 重新加载配置文件
  6. ps aux|grep nginx 查看nginx进程

 

启动成功访问 服务器ip:80

 

注意:如何连接不上,检查阿里云安全组是否开放端口,或者服务器防火墙是否开放端口!
相关命令:

# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
# 查看防火墙规则
firewall-cmd --list-all
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
# 参数解释
1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2、--permanent:表示设置为持久;
3、--add-port:标识添加的端口;

 

nginx的配置

##Nginx的全局配置,可以指定使用的用户,日志,以及pid,性能优化配置
#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
##最大连接数,也可以存放监听的事件
events {
    worker_connections  1024;
}
##http的全局配置位置
http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    ## upstream的名字是可以任意定的,是为了下面的proxy_pass代理使用
    upstream ding{
        ##负载均衡配置
         ##服务器资源
         ##分配两台服务器的资源如果权重都为1,一个用户走到8080 ,另一个用户走8081
         server 127.0.0.1:8080 weight=1;
         server 127.0.0.1:8081 weight=1;
    }
##server可以配置不同的服务,
    server {
        listen       80;               
        server_name  localhost;
        //代理的配置位置
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        ##80端口下的/目录
        location / {
            root   html;
            index  index.html index.htm;    #128服务器
            proxy_pass    http://ding.
        }
        ##如果要访问wwww.xxxx.com/admin,就加个后缀进的服务器就不一样
        location /admin{
            // xxxxx  ##47服务器
        }

 

Nginx进阶-实战

 

第一章:Nginx安装

1.1进入nginx官网,下载对应安装包

nginx官网:http://nginx.org/en/download.html

1.2安装nginx

(1)安装pcre依赖

  • 把安装压缩文件放到linux系统中
  • 解压压缩文件
  • 进入解压目录之后,执行
     
    ./configure

     

  • 再执行  make install && make
     
  • 安装之后,使用命令,查看版本号:
     

    pcre-config --version

     

  • pcre安装成功!!!

 

(2) 安装其他依赖 zlib openssl

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

(3) 安装nginx

  • 把nginx安装文件放到linux系统中
  • 解压压缩文件
    进入解压之后目录,执行  ./configure
  • 使用 make&&make install

* 安装成功之后,在usr多出来一个文件夹local/nginx ,在nginx有sbin有启动脚本

 

查看开放的端口号

firewall-cmd --list-all

 

设置开放的端口号

firewall-cmd --add-service=http --permanent

sudo firewall-cmd --add-port=80/tcp --permanent

 

重启防火墙

firewall-cmd --reload

 

 

 

第二章 nginx常用命令和配置

nginx操作的常用命令(前同)

1、使用nginx操作命令前提条件:必须进入nginx 的目录

cd /usr/local/nginx/sbin/

 

2、查看nginx的版本号

./nginx -v

3、启动nginx

./nginx 

 

4、关闭nginx

./nginx -s stop

5、重新加载

./nginx -s reload

 

nginx配置文件

1、配置文件位置

*  /usr/local/nginx/conf/nginx.conf

2、nginx配置文件组成

(1)nginx配置文件有三部分组成

第一部分:全局块

第二部分:events块

第三部分:http块

Nginx 服务器配置中最频繁的部分。

需要注意的是:http块也可以包括http全局块、server块

(1)http全局块

(2)server块

 

第三章  Nginx的配置实例1  反向代理

1、实现效果

(1)打开浏览器,在浏览器地址输入地址 www.123.com ,跳转到linux系统tomcat主页面中

2、准备工作

(1)在linux系统安装tomcat,使用默认端口8080

  • tomcat安装文件放到linux系统中,解压
  • 进入tomcat的bin目录中, ./startup.sh 启动tomcat服务器

(2)对外开放访问的端口

firewall-cmd --add-port=8080/tcp --permanent

firewall-cmd --reload

查看已经开放的端口号

firewall-cmd --list-all

(3) 在windows系统上访问tomcat服务器,是否正常启动。

3、访问的过程分析

 

 第四章  Nginx的配置实例2  反向代理

1、实现效果

使用nginx反向代理,根据访问的路径跳转不同端口的服务中,nginx监听端口为9001;

访问 http://192.168.40.66:9001/edu/ 直接跳转到127.0.0.1:8080

访问 http://192.168.40.66:9001/vod/ 直接跳转到127.0.0.1:8081

 

2、准备工作

(1)准备两个tomcat服务器,一个端口8080,一个端口8081

(2)创建文件夹和测试页面

 

3、具体配置

(1)找到nginx的配置文件进行配置

(2)重启nginx

(3)测试查看

 

location指令说明

改指令用于匹配URL。

语法如下:

localhost [= | ~ | ~* | ^~] uri {

}

1、=: 用于不含正则表达式的uri前,要求请求字符串和uri验证匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。

2、~:用于标识uri包含正则表达式,并且区分大小写。

3、~*:用于标识uri包含正则表达式,并且不区分大小写。

4、^~:用于不含正则表达式的uri前,邀请Nginx服务器找到标识uri和请求字符串匹配最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配。

注意:如果uri包含正则表达式,则必须要有~ 或者 ~* 标识。

 

 第四章  Nginx的配置实例3  负载均衡

1、实现效果

(1)浏览器地址栏输入地址: http://192.168.40.66:9001/edu/a.html,负载均衡效果,平均8080和8081端口中

2、准备工作

(1)准备两台tomcat服务器,一台8080,一台8081

(2)在两台tomcat里面webapps目录中,常见名称是edu文件夹,在edu文件夹中创建页面a.html,用于测试

3、在nginx的配置文件中进行负载均衡的配置

4、测试

5、nginx分配服务器策略

第一种 轮询(默认)

2、weight

3、ip_hash

4、fair(第三方)

 

 第五章  Nginx的配置实例4  动静分离

1、什么是动静分离

 

2、准备工作

(1)在linux服务器中准备静态资源,便于访问

 

3、具体配置

(1)在nginx的配置文件中进行配置

(2)重启nginx,测试

 

 第六章  Nginx的配置实例5 高可用

1、什么是nginx高可用

(1)需要两台nginx服务器

(2)需要keepalived

(3)需要虚拟ip

 

2、配置高可用的准备工作

(1)需要两台服务器 192.168.40.66 和192.168.40.67

(2)在两台服务器安装nginx

  (3)在两台服务器安装keepalived

 

3、在两台服务器中安装keepalived

(1)使用yum命令进行安装

yum install keepalived -y

进入  /etc/keepalived 目录

(2) 安装之后,在etc里面生成目录keepalived,有文件keepalived.conf

 

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

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

global_defs {
 notification_email {
 acassen@firewall.loc
 failover@firewall.loc
 sysadmin@firewall.loc
 }
 notification_email_from Alexandre.Cassen@firewall.loc
 smtp_server 192.168.40.66
 smtp_connect_timeout 30
 router_id LVS_DEVEL
}
vrrp_script chk_http_port {
 script "/usr/local/src/nginx_check.sh"
 interval 2 #(检测脚本执行的间隔)
 weight 2
}
vrrp_instance VI_1 {
 state BACKUP # 备份服务器上将 MASTER 改为 BACKUP 
 interface ens33 //网卡
 virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
 priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
 advert_int 1 java 课程系列 

 authentication {
 auth_type PASS
 auth_pass 1111
 }
 virtual_ipaddress {
 // VRRP H 虚拟地址
192.168.40.50
 }
}

(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

  (3) 把两台服务器上nginx和keepalived启动

启动nginx: ./nginx
启动keepalived:systemctl start keepalived

(4)测试访问  ,在浏览器输入   虚拟ip:端口号  访问

 

(5)把主服务器(192.168.40.50)nginx和keepalived停止,再输入 192.168.17.50

把主服务器停止后,访问虚拟ip:端口号  还是可以访问到nginx页面!!说明keepalived 已经实现了nginx高可用!!!现在访问的是从服务器自动切换到了备份!!!

 

5、高可用配置文件详解

global_defs {
 notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个
 acassen@firewall.loc
 failover@firewall.loc
 sysadmin@firewall.loc
 }
 notification_email_from Alexandre.Cassen@firewall.loc #指定发件人
 smtp_server 192.168.40.66   #指定smtp服务器地址
 smtp_connect_timeout 30  #指定smtp连接超时时间
 router_id LVS_DEVEL  #访问到主机  vi /etc/hostname  可以查看主机名  运行keepalived机器的一个标识
}

#脚本
vrrp_script chk_http_port {  
 script "/usr/local/src/nginx_check.sh"
 interval 2  #(检测脚本执行的间隔)
 weight 2  # 权重
}

#虚拟ip的设置
vrrp_instance VI_1 {
 state BACKUP # 备份服务器上将 MASTER 改为 BACKUP 
 interface ens33 //网卡 ifconfig 可以查看网卡名称
 virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
 priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
 advert_int 1 java 课程系列 

 authentication {
 auth_type PASS
 auth_pass 1111
 }
 virtual_ipaddress {
 // VRRP H 虚拟地址
192.168.40.50
 }
}

 

 第七章  Nginx原理

1、mater 和 worker

2、worker 如何进行工作的

3、一个 master 和多个 woker 有好处

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

(2)每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的, 继续进行争抢,实现请求过程,不会造成服务中断

 

4、设置多少个 woker 合适

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

5、连接数 worker_connection

第一个:发送请求,占用了 woker 的几个连接数? 答案:2 或者 4 个

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

  •  普通的静态访问最大并发数是: worker_connections * worker_processes /2,
  • 而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值