Nginx快速入门教程


Posted in Servers onMarch 31, 2021

一、Nginx介绍

1. 什么是Nginx?

  • Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
  • 其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。

2. 为什么要使用Nginx?

随着当今互联网的迅速发展,单点服务器早已无法承载上万个乃至数十万个用户的持续访问。比如一台Tomcat服务器在理想状态下只能够可以承受住2000个左右的并发量,为了解决这个问题,就需要多台Tomcat服务器来进行负载均衡。

那么,应该如何实现负载均衡?Nginx就是其中的一种解决方案,当用户访问网站时,Nginx拦截到这个访问请求,并将其通过轮询的方式均匀地分配到不同的服务器上。

Nginx快速入门教程

并且,在Nginx中有一种ip_hash策略,它可以获取到用户的真实IP,计算出hash值来选择服务器,这也是一种优秀的负载均衡方式。 所以,掌握Nginx成为了Web开发学习道路上不可缺少的一部分。

3. 什么是正向代理?

正向代理,就是客户端将自己的请求率先发给代理服务器,通过代理服务器将请求转发给服务器。我们常用的VPN就是一种代理服务器,为了可以连上国外的网站,客户端需要使用一个可以连接外网的服务器作为代理,并且客户端能够连接上该代理服务器。

Nginx快速入门教程

4. 什么是反向代理?

反向代理与正向代理不同,正向代理是代理了客户端,而反向代理则是代理服务器端。在有多台服务器分布的情况下,为了能让客户端访问到的IP地址都为同一个网站,就需要使用反向代理。

Nginx快速入门教程

明白了反向代理的工作机制后,接下来就可以进入Nginx的学习!

二、Nginx在Linux下的安装

由于Nginx被大量使用在Web服务器中,所以本教程选择了Centos服务器的7.4版本作为演示!

1. 下载

进入官方下载页面:http://nginx.org/en/download.html,选择Stable version稳定版本进行下载,并上传至服务器。

Nginx快速入门教程

2. 安装

上传tar包至服务器后,解压到当前目录

tar -zxvf nginx-1.18.0.tar.gz -C ./

进入解压后的目录,执行configure脚本

cd nginx-1.18.0/
./configure

使用make命令进行安装

make && make install

安装完成后,使用whereis命令查找Nginx的安装位置 (默认安装在/user/local/目录下)

whereis nginx

进入安装目录下的bin文件夹,启动nginx服务,访问服务器默认的80端口查看是否安装成功!

Nginx快速入门教程

三、Nginx配置入门

1. 配置文件

在Nginx的安装目录下有一个conf文件夹,打开其中的nginx.conf文件

cd conf/ && vim nginx.conf

Nginx快速入门教程

2. 反向代理单个服务器

那么,如何使用Nginx进行反向代理?

在location参数中添加proxy_pass字段,并填写需要反向代理的服务器地址与端口号:

注意:每一行的配置都需要以封号结尾!!!

# 配置监听的目录为:/
location / {
	root html;
	index index.html index.htm;
	proxy_pass http://127.0.0.1:8080; # 反向代理了本机的8080端口
	# proxy_pass http://127.0.0.1:8081; # 可以同时配置多条proxy_pass,反向代理了本机的8081端口
}

3. 反向代理多台服务器

如果有多台服务器怎么办?除了不断地添加proxy_pass参数,更好的解决方案是配置upstream服务器组!

在配置文件的http块中添加upstream属性:

# 配置服务器组,取名为hello
upstream hello{
	# 一个server对应一个服务器,当然也可以是不同端口的web程序
	server 127.0.0.1:8080;
	server 127.0.0.1:8081;
}
# 在location块中修改反向代理为服务器组
location / {
	root html;
	index index.html index.htm;
	proxy_pass http://hello; # 反向代理了hello服务器组中的所有服务器
}

四、运行测试

1. 启动服务

配置完成后,进入Nginx安装目录下的sbin文件夹,运行nginx程序即可:

/usr/local/nginx/sbin/nginx

如果之前已经启动,无需关闭nginx服务,只需要让nginx重新加载配置文件即可:

nginx -s reload

刷新浏览器,若反向代理成功,访问的路径会自动映射到配置文件中的服务器地址!

将来,随着用户量的增长,可能需要添加新的服务器;这时只需要修改配置文件,使用 nginx -s reload 命令即可,无需关闭nginx服务器!

2. 关闭服务

关闭nginx服务的方式一般分为两种:

nginx -s stop # 立即停止,无论是否在工作
nginx -s quit # 等待进程完成当前工作后安全退出

五、负载均衡

1. 什么是负载均衡?

由于不同服务器的配置不同,为了让性能高的服务器分配到更多的请求,便引入了负载均衡的概念。

前面提到过,Nginx的负载均衡方式可以有很多种,如加权轮询(默认)、IP哈希、url哈希等等,这里就以加权轮询作为介绍。

加权轮询,也就是通过给服务器添加各自的权重值,Nginx通过权重来进行请求的分配,权重越高接收到的请求数量越多,反之越少:

Nginx快速入门教程

上图配置了三台服务器,在加权轮询的模式下,6次不同的请求中,权重为3的服务器将会分配到3次请求,权重为2的服务器会分配到2个请求,权重为1的服务器则会分配到1个请求。负载均衡大大减少了在高并发的环境下服务器宕机的风险!

2. 配置Nginx负载均衡

同样地,打开nginx.conf文件进行配置:

vim nginx.conf

在upstream块中添加weight参数:

upstream hello{
	server 服务器1:8080 weight=3; # 配置服务器1的权重为3
	server 服务器2:8080 weight=1; # 配置服务器2的权重为1
}

添加完成后执行 nginx -s reload 即可!

以上就是Nginx服务快速入门教程的详细内容,更多关于nginx入门教程的资料请关注三水点靠木其它相关文章!


Tags in this post...

Servers 相关文章推荐
Nginx部署vue项目和配置代理的问题解析
Aug 04 Servers
Apache Hudi数据布局黑科技降低一半查询时间
Mar 31 Servers
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
Apr 07 Servers
nginx location 带斜杠【 / 】与不带的区别
Apr 13 Servers
Apache Hudi 加速传统的批处理模式
Apr 24 Servers
服务器间如何实现文件共享
May 20 Servers
nginx 添加http_stub_status_module模块
May 25 Servers
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
Jun 10 Servers
Nginx开源可视化配置工具NginxConfig使用教程
Jun 21 Servers
本地搭建minio文件服务器(使用bat脚本启动)的方法
Jul 15 Servers
Fluentd搭建日志收集服务
Sep 23 Servers
Elasticsearch6.2服务器升配后的bug(避坑指南)
Sep 23 Servers
nginx如何将http访问的网站改成https访问
Mar 31 #Servers
Nginx+Tomcat实现负载均衡、动静分离的原理解析
使用nginx动态转换图片大小生成缩略图
Mar 31 #Servers
Nginx反向代理多个服务器的实现方法
基于nginx实现上游服务器动态自动上下线无需reload的实现方法
为什么 Nginx 比 Apache 更牛逼
Mar 31 #Servers
Nginx的rewrite模块详解
Mar 31 #Servers
You might like
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
php两种无限分类方法实例
2015/04/21 PHP
php获取访问者浏览页面的浏览器类型
2017/01/23 PHP
php实现查询功能(数据访问)
2017/05/23 PHP
jquery 简单导航实现代码
2009/09/11 Javascript
jQuery Jcrop插件实现图片选取功能
2011/11/23 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
JS批量操作CSS属性详细解析
2013/12/16 Javascript
Node.js安装教程和NPM包管理器使用详解
2014/08/16 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
如何编写高质量JS代码
2014/12/28 Javascript
禁止按回车键提交表单的方法
2015/06/11 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
2015/12/13 Javascript
js实现随机点名小功能
2017/08/17 Javascript
详解Vue2 SSR 缓存 Api 数据
2017/11/20 Javascript
JS实现的DOM插入节点操作示例
2018/04/04 Javascript
Vue触发式全局组件构建的方法
2018/11/28 Javascript
微信小程序使用map组件实现路线规划功能示例
2019/01/22 Javascript
详解一个基于套接字实现长连接的express
2019/03/28 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
vue将文件/图片批量打包下载zip的教程
2020/10/21 Javascript
[01:18]一目了然!DOTA2DotA快捷操作对比第一弹
2014/07/01 DOTA
Python减少循环层次和缩进的技巧分析
2016/03/15 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
python统计文章中单词出现次数实例
2020/02/27 Python
如何查看Django ORM执行的SQL语句的实现
2020/04/20 Python
python线程池如何使用
2020/05/28 Python
CSS3字体效果的设置方法小结
2016/06/13 HTML / CSS
布鲁明戴尔百货店:Bloomingdale’s
2016/12/21 全球购物
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
业绩倒数第一的检讨书
2014/09/24 职场文书
2014年高中教师工作总结
2014/12/19 职场文书
当幸福来敲门英文观后感
2015/06/01 职场文书
幼儿园科学课教学反思
2016/03/03 职场文书
如何在Python中创建二叉树
2021/03/30 Python
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android