【Nginx】简单入门

1、产生背景

老生常谈,互联网项目的架构演变。
当项目很小,访问量很小时,一台服务器足以支撑,模型如下:
在这里插入图片描述
当项目的访问量增多,大量的请求都打到同一台服务器上,导致服务器无法承担,容易崩溃。这种情况下,一般的思路是将对服务器进行横向扩展,即由原来的一台服务器变成多台服务器。此时会产生很多问题,比如Session不能跨服务器存储,那么用户请求具体应该打到哪台服务器上?
在这里插入图片描述这个时候就可以在客户端和服务器之间加一层进行转发。
在这里插入图片描述

2、Nginx简介

Nginx 是⼀款⾼性能的 http 服务器/反向代理服务器及电⼦邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师伊⼽尔·⻄索夫(Igor Sysoev)所开发,官⽅测试 nginx 能够⽀⽀撑 5 万并发链接,并且cpu、内存等资源消耗却⾮常低,运⾏⾮常稳定。而tomcat只能支撑5、600左右的连接。
Nginx的主要作用:
(1)http 服务器。Nginx 是⼀个 http 服务可以独⽴提供 http 服务。可以做⽹⻚静态服务器。在软件开发中,有些请求是请求静态资源的,比如bootstrap、css、js等文件,这些请求可以不通过后台处理。根据一定规则把不变的资源和经常变的资源区分开,动静资源拆分以后,可以把静态资源放到一个服务器上,静态资源就专门访问这个服务器。根据静态资源的特点将其做缓存操作,提高资源响应的速度。
(2)反向代理。当⽹站的访问量达到⼀定程度后,单台服务器不能满⾜⽤户的请求时,需要⽤多台服务器集群可以使⽤ nginx 做反向代理。
插一句:正向代理是代理客户端的,比如客户端请求访问某个网页,可能会通过运营商的服务器访问,那么运营商的服务器就是正向代理。反向代理是代理服务器的,比如一个域名对应了多个服务器,客户端发送请求,通过一个中间服务器转发到具体的服务器上,这个中间服务器是反向代理服务器。
(3)负载均衡。多台服务器可以平均分担负载,不会出现某台服务器负载⾼宕机⽽某台服务器闲置的情况。
常见的负载均衡算法:

  • 轮询算法:所有服务器轮着来,第一个请求来了给服务器1,第二个请求来了给服务器2,第三个请求来了给服务器3,所有服务器轮完了以后又从第一个服务器开始。
  • 轮询权重算法:给每个服务器一个权重,根据权重决定每个服务器服务的次数
  • iphash算法,根据每个ip地址设计一个hash值,每个hash值对应一个服务器,一个服务器可以对应多个hash值,这样每个ip地址每次请求的时候都会访问同一个服务器,可以解决session共用的问题,但是也有安全问题,如果这个服务器瘫了,那么这个ip地址就获取不到任何服务了。

3、安装

3.1、windows安装

(1)官网下载安装包,标注了windows的版本
(2)解压到不含中文的路径下
(3)cd到项目路径中,cmd运行nginx.exe,访问localhost:80,看到welcome to nginx即为成功
在这里插入图片描述

3.2、Linux安装

安装前先确认是否以前是否安装过,安装过要删除旧版本。
(1)官网下载压缩包
在官网上,windows版本的nginx标注了windows,linux版本是默认的,没有标注
在这里插入图片描述
(2)把压缩包上传到服务器
(3)解压, tar -zxvf nginx-1.20.1
(4)安装,进入nginx目录,看到 configure 文件,然后执行configure文件,再make、make install即可。

./configure
make
make install

(5)查看安装目录

whereis nginx

(6)cd到nginx目录的sbin目录,运行nginx

./nginx

访问nginx主页,能访问到表示已经安装成功。

Linux安装过程中出现的问题:
(1)在执行 ./configure 命令时,报错,没有安装PCRE library
在这里插入图片描述
补安装:yum -y install pcre-devel
(2)安装 pcre 后,报错,没有安装zlib
在这里插入图片描述
补安装zlib:
zlib安装包下载地址:http://www.zlib.net/zlib-1.2.11.tar.gz
下载完毕后上传到虚拟机上,解压,然后cd到zlib目录中,安装zlib

./configure
make
make install

zlib安装完成后就可以继续安装nginx啦。

3.3、docker安装

在安装linux版的nginx的过程中,会发现缺少某些依赖而不能安装,这时就体现出docker安装的好处了。
(1)拉取镜像

docker pull nginx

(2) 创建容器,设置端⼝映射、⽬录映射
这一步根据具体需要设置目录映射、端口映射

# 在/root⽬录下创建nginx⽬录⽤于存储nginx数据信息
mkdir ~/nginx
cd ~/nginx
mkdir conf

启动容器:

docker run -id --name=c_nginx \
-p 80:80 \
-p 81:81 \
-p 82:82 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/conf.d:/etc/nginx/conf.d \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx

到这里,nginx镜像也可以使用了。

4、常用命令

Linux环境中,nginx的常用命令如下:

# 启动nginx
./nginx
# 停止nginx
./nginx -s stop
# 安全退出nginx
./nginx -s quit
# 当配置文件修改以后,要重新加载配置文件改动才生效
./nginx -s reload
# 查看进程
ps aux | grep nginx

如果是用的docker,可以按照docker的命令使用nginx。

5、Nginx配置文件

nginx配置文件的结构大致如下:

全局配置

events配置

http{
    http全局配置
    
    upstream xx{
        负载均衡配置
    }
    
    server{
        listen	80;
        server_name	localhost;
        location /{
	        root html;
	        index index.html;
	        proxy_pass http://xxxx
    	}
    }
    server{
	    listen	443;
	    server_name	localhost;
	    location /{
	        root html;
	        index index.html;
	        proxy_pass http://xxxx
    	}
    }
}

有多个server在http里配置即可,每个server中listen是指监听的端口号,server_name是域名,location是请求,location中的root是存放静态资源的目录,index是当前请求访问的静态资源,proxy_pass是反向代理。
upstream是实现负载均衡的,放在http里面,server外面。
示例:

upstream myProxy{
    192.168.127.131:81
}
server{
    listen 81; # nginx监听的端口号
    server_name www.port81.com;
    location /{
        root html/port81;
        index index.html;
        proxy_pass http://myProxy 
    }
}

当前nginx监听了81端口号,域名是www.port81.com,当请求 www.port81.com:81 发送过来,首先走到了myProxy这个代理中,然后找到了 upstream,最后实际访问的地址是 192.168.127.131:81,最后访问到 html/port81 目录里的 index.html 。

6、部署静态资源

了解了配置文件以后,就可以部署静态资源。部署静态资源可以通过端口部署,也可以通过域名部署。

6.1、通过端口部署

在html目录中准备port81和port82目录,分别在port81和port82里准备不同内容的index.html用于测试。
修改nginx.conf中server部分的内容:

server{
    listen 81; # nginx监听的端口号
    server_name localhost;
    location /{
        root html/port81;
        index index.html;
    }
}
server{
    listen 82; # nginx监听的端口号
    server_name localhost;
    location /{
        root html/port82;
        index index.html;
    }
}

修改完配置文件以后要记得reload nginx,配置文件才会生效。
现在访问 192.168.127.131:81 会访问到 html/port81/index.html 这个文件,访问 192.168.127.131:82 会访问到 html/port82/index.html 这个文件。(因为nginx是部署在虚拟机上的,这里的ip地址是虚拟机的ip)

6.2、通过域名部署

通过域名部署的方式就是把nginx.conf中的server里的server_name改为自己配置的域名,比如 www.port81.com, 然后修改本机上的host文件,将域名和ip绑定。
本机host文件地址:C:/Windows/System32/driver/etc/host
在host文件中加上:

192.168.127.131 www.port81.com

这样配置以后在本机访问 www.port81.com 相当于访问 192.168.127.131
nginx.conf内容如下:

server{
    listen 81; # nginx监听的端口号
    server_name www.port81.com;
    location /{
        root html/port81;
        index index.html;
    }
}
server{
    listen 82; # nginx监听的端口号
    server_name www.port82.com;
    location /{
        root html/port82;
        index index.html;
    }
}

这样通过 www.port81.com:81 和 www.port82.com:82 也能访问到对应的静态资源。

7、反向代理和负载均衡

反向代理和负载均衡放在一起测试,修改nginx.conf内容如下:

upstream myProxy{
    192.168.127.131:81 weight=1;
    192.168.127.132:81 weight=1;
}
server{
    listen 81; # nginx监听的端口号
    server_name www.port81.com;
    location /{
        root html/port81;
        index index.html;
        proxy_pass http://myProxy 
    }
}

设置一个反向代理 myProxy,请求过来以后会通过myProxy,选择 192.168.127.131:81 或者 192.168.127.132:81 中的一台服务器服务,在upstream中通过weight可以设置两台服务器的权重,weight越大权重越高,比如有一台服务器性能比较好,希望更多请求能让这个服务器处理,那么就可以把这台服务器的weight设置得高一点。

以上就是Nginx的简单入门。如有不正确的,欢迎讨论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值