Nginx 基础

背景

Nginx 读作 engine x,是一个高性能的 HTTP 和反向代理服务器,还能用作邮件代理服务器或是通用的 TCP/UDP 代理服务器。有过后端程序部署经历的同学应该会有所了解,用 Nginx 能够很方便地完成反向代理、服务静态文件、实现负载均衡、接入 HTTPS 协议等任务。

根据官方文档里面写到的,除了提供静态文件服务、反向代理和负载均衡等功能之外,还提供以下包括单不限于若干个方面的支持:

  1. FastCGI, uwsgi 之类服务器和反向代理服务器的缓存支持;
  2. 以域名/IP 为基础的虚拟服务器、Keep-alive 和流水线链接的支持;
  3. 访问日志、错误日志的输出和格式化,带缓存的日志写机制;
  4. 3xx-5xx 错误码重定向,根据正则表达式重写 URI (Rewrite);
  5. 基于客户端地址的访问控制和函数调用;
  6. HTTP referer 的验证、支持除了 GET 外的几种 HTTP 方法: PUT/DELETE/COPY/MOVE/MKCOL;
  7. FLV/MP4 的流播放、响应限流、限制单点的并发连接数和请求数;
  8. 等等…(上面只列了我读得懂的)

Nginx 的功能实在太多了,在这里全部列出来不太可能。一直以来我对 Nginx 都停留在“配置是什么,work 就行”的态度。因为这周程序部署时遇到的一点问题,上网搜了好多帖子、博客寻求解决方法那种捉襟见肘、有病乱投医的样子让我觉得很狼狈。借此为契机,决定周末看一下 Nginx 的官方文档。nginx 旧版的官网文档组织混乱,建议移步 Nginx Plus (Nginx 的商业版)官网。Nginx 和 Nginx Plus 的对比放在这里

阅读更多

如何相对优雅地使用 GraphQL

关于 GraphQL,它的官网(需要科学上网)是这样介绍的:

GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。

作为 RESTful API 的竞品,GraphQL 从开源之初就备受关注,一是因为它是由 Facebook 开源的项目,二是它挑战了 RESTful API 的地位,这是很关键的一点。RESTful API 利用 URI 的具体内容和请求方法来区分请求的资源或者方法,其中的资源 URI 容易与路由路径产生混淆和重复;资源数量达到一定的数目之后,如何给资源 URI 起名或许也是一件困难的事情。而 GraphQL 则鼓励开发者将所有需要请求的信息显式的写在请求体当中,精确到具体的字段,不多也不少。

我参与的几个项目都是用 GraphQL 作为 API 的基础,我总结出了一个在前端相对优雅地使用 GraphQL 的方法。这篇博客不讨论 GraphQL 的基本概念,主要介绍这个方法。(为省篇幅,这篇博客里面的代码均不做异常处理)

阅读更多
记2021年小程序大赛

记2021年小程序大赛

从本科到现在总共参加过三次微信小程序大赛,前几天刚完成赛区决赛的答辩,心想着以后应该都不想再参加了,于是想记录一下这次的参赛经历。

2018 和 2020

2018 阴差阳错

微信小程序从 2017 年正式上线博得广大关注,在第二年 2018 年春季,微信就推出了全国高校微信小程序开发大赛,吸引了很多大学生参加,我就是其中一个。正在读大二的我报名了一位学长组织的 SRT(Student Research Training) 项目,原本的题目是要开发一款在线客服平台。然而当时已经把项目申请里面提到的客服平台提前完成了,于是我们真正做的就变成了小程序。甚至还用这个小程序参加了第一届的微信小程序大赛。

阅读更多
我毕业了

我毕业了

从 2016 年 8 月来到北京上学,到现在已经快要五年了。近期借着学校给 2020 届补办毕业典礼的契机,得以穿上学士服跟朋友们同学们一起拍毕业照。课程学习生活暂告一段落,心里有很多感慨不吐不快。

大概从以下几个方面来聊一聊吧:专业选择给我的影响,母校之于我的意义以及自己的成长和收获。

专业选择

用为期两天的高考结束了漫长枯燥的高中生活之后,我进入了软件学院继续学习,专业名称是软件工程。其实我填报志愿时对母校的专业不是很了解,在招生组老师和学长学姐的介绍之下选择了这个和计算机相关性最大的专业。(对没错,当时我们省不招计算机)

阅读更多
青岛(二)

青岛(二)

从青岛回来之后马上就是学生节和一系列的课程、任务和作业,根本没时间和心情来写这篇博客,所以青岛(二)这一篇拖了很久…
但是过了一个多月的时间很难再拾起当时的心情了,从拍下来的照片里才能记起来去过哪里有哪些好玩的地方,可以说是看图说话。反正也没人看,我直接这样随便写写就当给自己一个交代好了,不喜欢做半途而废的事情。正义虽然会迟到,但永远不会缺席。

这一篇我们主要是去了崂山、信号山公园、天主教堂、五四广场转了转。

阅读更多
青岛(一)

青岛(一)

说在前面

最近两个月遇到了不少的烦心事,让我颓废了好一阵子:懒得写博客,懒得跟人说话。很久没有到过海边,都要忘了在海边吹风是什么感觉了,趁着这次五一假期,和两个朋友一起去青岛玩了玩。虽然总共只待了 3 天 4 晚,但是还是有两点收获:

  1. 青岛是一个不错的城市;
  2. 不要在黄金周出游;

首先,临海的青岛让我这个南方人感受到了久违的湿润,终于不用担心因为干燥导致的皮肤瘙痒和手指倒刺,让我能够把身体乳和护手霜安心地放在行李箱里。青岛风景很美,海鲜很丰富,从视觉和味觉上都给了我满足感。

阅读更多

ESLint 入门

背景

最近一两年写前端项目时一直都有接触 ESLint,很多文档和博客也一直都推荐使用开发者 ESLint,但是一直以来都没有好好地学习过它。最近因为使用 Nuxt 开发时 ESLint 缓存出问题导致浪费了半个小时,我越发觉得有必要深入地了解一下这个前端开发中最常使用的代码风格规范工具了。(不得不说,Nuxt 这个框架真的有点难用。)

ESLint 的用途和初衷

ESLint 是在 ECMAScript/JavaScript 代码中识别和报告模式匹配的工具,它的目标是保证代码的一致性和避免错误。维基百科上这样解释的:lint, or a linter, is a static code analysis tool used to flag programming errors, bugs, stylistic errors, and suspicious constructs. 就是说 ESLint 是写 javascript 时用来分析静态代码是否存在语法错误、代码风格错误和可疑结构的工具。

阅读更多

从 Vue 到 React —— 第一印象

学习 React 的初衷

之前说过想要学习 React,秉持着边学边记录的想法,我随即开启了这篇帖子。

从 Vue 说起

我是一个 Vue 的忠实粉丝,虽然没有全部读过 Vue 的源码,但是对它的基本实现原理和大体的使用方法还是比较熟悉的。我自己思考过,我觉得我喜欢 Vue 大概率是因为我最早接触的前端开发框架就是 Vue。记得是 2018 年参加一项 SRT 的时候,为了开发一款简单的后台管理系统,我开始学习 javascript 以及 Vue。

当时我还是第一次接触脚本语言,对没错,我接触 javascript 比接触 python 更早一些。熟悉了 C/C++ 的继承机制之后,突然要接受 javascript 的原型链继承一时间有点缓不过来。但是后来还是被磨平了棱角,被迫接受了原型这一设计。为了开发 Web 应用通过一位学长的介绍接触到了 Vue 这个框架。我直接惊为天人,还能这样写?因为根据我更早之前的一些浅显的印象,Web 开发是分别要编写 HTML,javascript 和 CSS 三种文件的。现在用 Vue 一个文件就可以生成一个完好的页面,着实非常酷炫。也是在 Vue 这里,我了解到了组件、生命周期、全局状态管理、前端路由等等一些重要的概念,所以先入为主地对 Vue 有强烈好感也正常吧。

阅读更多

小程序框架:WePY、uni-app 和 Taro

上一篇博客《聊聊微信小程序及其框架》里面立了个调研微信小程序开发框架的 flag ,这篇博客就来填这个坑——我迫不及待地想要掌握一个能够“舒适编写”小程序代码的框架。

我之前提到我最想先要了解的是 WePY 和 uni-app 这两个小程序框架,WePY 是微信官方出品的小程序框架,uni-app 是使用 Vue 开发小程序的最火的小程序框架,但是这两个框架都让我特别失望。

阅读更多

聊聊微信小程序及其框架

为什么是微信小程序

微信很早就有一套专用的JS-SDK在微信客户端上面使用,其开放了录音、二维码、地图、支付等几十个 API,能够支持微信服务号的运转,当时大部分支付、扫码等功能的对接方都是这样的服务号。但是在 2016 年 1 月 11 日微信之父张小龙表示服务号还不够优秀,微信正在研究一个新的服务形态,起名叫做“微信小程序”。在 2017 年 1 月 9 日,第一批微信小程序低调上线,而选择这一天也是为了向 iPhone 1 代的发布致敬。

阅读更多