博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
前端需要知道的Nginx入门知识
阅读量:6347 次
发布时间:2019-06-22

本文共 2312 字,大约阅读时间需要 7 分钟。

Nginx简介

Nginx是一个高性能的HTTP和反向代理服务器,具有高并发、稳定、支持热部署等特点。我们常用它来进行负载均衡、反向代理和缓存HTTP请求等。

Nginx架构

Nginx选择的进程模型和事件模型与前端开发者熟知的nodejs很相似,都是采用异步非阻塞的方式。Nginx在启动后会开启一个master进程和多个worker进程。其中唯一的master进程的主要作用是用来管理下面的多个worker进程,它并不参与具体的事件处理过程。而这多个worker进程之间是平等的关系,他们独立地竞争来自客户端的请求且同一个请求只能在某一个worker进程中被处理。下面一张图可以形象说明:

这里可以认为master进程是整个程序的入口,所有的请求都经它手,再分配给下面的worker进程。另外master进程可以管理worker的状态,当某个worker进程挂掉后,master进程需要关掉它并重启一个。

Nginx的高并发性就得益于这种进程模型。但有些传统开发者这时就会产生一个疑问:当master手下的worker进程都在工作时,新进来的请求不就没地方处理了吗?这样何来高并发呢?其实这个问题的答案就是异步非阻塞。以往我们处理一个请求时,需要接受数据,然后进行i/o处理后再返回数据,期间这个i/o操作就占用了大部分的时间。而Nginx的异步非阻塞方式就是当发生i/o阻塞时,worker进程就去处理其他没有阻塞的事件。而这个阻塞完成后再以异步的方式通知到worker进程。相当于准备好的事件源源不断地进入队列来等待worker进程处理,而worker进程也可以节省等待i/o阻塞的时间。

因此,一般推荐nginx设置worker的个数为CPU的核数,这样一个CPU对应一个worker进程,不断地去处理已准备完毕的事件,也不会出现多个进程竞争一个CPU的情况。

Nginx的配置系统

了解了nginx的原理后,对于不是运维的同学来说,平时我们与nginx打交道最多的地方还是它的配置文件。Nginx的配置系统一般由一个主配置文件nginx.conf和一些额外的辅助配置文件构成,这些配置文件都是纯文本形式,位于Nginx安装目录的conf目录下。 Nginx的配置文件由类似于字符串的简单指令行和配置块构成。对于简单配置,指令以分号结尾,由配置指令和参数两部分组成,例如:

worker_processes  8复制代码

该指令由名为worker_processes的指令和值为8的参数组成,表示Nginx要开启的worker进程个数为8个。 除了简单指令外,Nginx配置还包含一些由大括号括起来的复合配置块。这些配置块的大括号包起来的地方表示处于一定的作用域中,其中的内容一般也是一行行简单指令。例如:

http {	charset utf-8;}复制代码

表示所启用的http服务器使用utf-8编码。

Nginx常用的几个配置块有:http、server、location、upstream等。这些配置块可以按照一定的规则进行相互嵌套,例如如果该http服务支持多个虚拟主机,则http上下文中可以出现多个server上下文。在日常工作中,只要我们熟悉了常用的配置指令,就可以实现大部分功能。附上查询文档:、

Nginx与前端开发

作为前端开发,掌握Nginx的基本使用方式可以大大加强我们的开发效率。

  1. 反向代理 前端开发经常会遇到的一个问题就是访问后端资源时出现跨域问题,跨域问题在此就不详述,我们知道它是由于浏览器的安全资源策略而产生的。而Nginx的反向代理恰恰避开了这一点。所谓反向代理就是Nginx代替客户端去向后端请求接口数据,然后再返回给客户端,这样就能避开浏览器的安全资源策略,配置例子:
location ^~ /api {	proxy_pass https://test.com/;}复制代码

该配置会代理path为/api开头的请求,并返回https://test.com/返回的数据。

  1. 负载均衡 负载均衡就是将请求平均分摊到多个服务器上,从而避免某个服务器因请求量过多而超载。例如:
upstream test {	ip_hash;	server 10.100.100.1;	server 10.100.100.2;}location /test {	proxy_pass http://test;}复制代码

该配置表示路径为test的请求会根据一定的规则分配给10.100.100.1和10.100.100.2这两台服务器。这些规则除了该配置中的ip_hash方式,还有url_hash、指定权重方式等。

  1. 内网访问 我们经常会遇到某些公司资源只允许内网访问的情况,这时可以通过location的deny和allow指令来简单实现:
location / {	allow 10.100.0.1;	allow 10.100.0.2;	deny all;}复制代码

allow和deny指令采用从上到下优先匹配的方式,一旦匹配到就跳出。该配置表示只允许10.100.100.1和10.100.100.2这两个ip访问。

除了以上的几种常用功能,Nginx还可以实现图片处理服务、压缩数据、适配多端环境等功能。而且这些功能只需要熟练使用配置指令即可实现。

写在最后

我个人开了一个公众号“前端搬运小工”,我会定期推送优秀的前端精选文章,拒绝无脑基础入门的文章,带给你不一样的前端视角。

转载于:https://juejin.im/post/5c4e885ce51d450609345716

你可能感兴趣的文章
python初学—-实现excel里面读数据进行排序
查看>>
用户体验升级后 “谁行谁上”让百度Q4财报更有底气
查看>>
直播相关学习链接
查看>>
使用RPM包工具和源码包编译安装Linux应用程序
查看>>
VoIP——开启免费通话新时代的先锋
查看>>
Linux下rsync的用法
查看>>
apache虚拟主机、日志轮询、日志统计、去版本优化
查看>>
java代码实现开启openoffice服务和关闭sffice.exe进程
查看>>
docker镜像的使用方法
查看>>
提升HTTPS安全评级
查看>>
iOS开发过程中的心得
查看>>
QOS配置命令
查看>>
linux安装搭建media-wiki
查看>>
使用 MPI for Python 并行化遗传算法
查看>>
widget
查看>>
paramiko安装及使用
查看>>
Java私塾:研磨设计模式 之 访问者模式(Visitor)
查看>>
我的友情链接
查看>>
《Python网络数据采集》读书笔记(六)
查看>>
Linux必学的60个命令
查看>>