你怎么能不会Nginx?

原创 追梦de孩子 随笔 小例子 382阅读 2017-11-20 12:39:42 举报

前端学习知识笔记及案例

好,正文开始!

自从 Nodejs 火了,前端能做的事、要做的事越来越多了;同时对前端的要求也就越来越高,如果现在还只是停留在浏览器端写页面做交互,估计很难找到(更好的)工作了,Node 中间层、Node 微服务、网关这些可以和业务分离的地方以后可能都是前端的事了; Nodejs 是把锋利的瑞士军刀,但你也不要想多了;合理的选型,各司其职,职尽其能,才能发挥各自最大的作用;毕竟一切从实际出发,实事求是,理论联系实际才是最佳的方法论;比如 Nodejs 可以做反向代理( http-proxy ),可以很快的搭建静态资源站,但这些并不是 Nodejs 最擅长的,这些交给 Nginx 显然是个更好的选择,既可以把这些事做更好,还给 Nodejs 服务减压了!

一、快速拾起 Nginx

Nginx 是一个高性能的 Web 和反向代理服务器,稳定、强大、系统资源占用低,这些就不说了;

在 nginx.conf 这个配置文件里,一个 server {}块可以对应一个站点的服务,每个 server {}块里可以配置多个 location {}块来对站点进行路由级别的控制,既可以通过 proxy_pass target 设置反向代理的 server,也可以直接通过 root dir 来访问目录下的静态文件; server_name 设置访问的域,多个用空格隔开,或者用通配符和正则; location 后面可以是正则以及 nginx 提供的丰富的匹配符和变量;记住大括号前面的空格不能省,每行结束语句的分号不能省;

a. 比如用 Nodejs 启动了一个站点监听 3000 端口,用 a.famanoder.cn 来访问
html 代码

b. 比如把所有的静态资源放到了 dist 目录,用 cdn.famanoder.cn 来访问
html 代码

c. 用 vue 做的一个移动端的项目,用 m.famanoder.cn 来访问,所有数据接口由 famanoder.cn 提供;
html 代码

以上只是最简单的站点和反向代理设置,通过匹配符和正则可以做更多的控制;

二、常用匹配符和变量

html 代码

对于 location,匹配的优先级为: (location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)

Nginx 里有 if 指令,但是没有 else 指令和&&判断,但可以通过 set 变通的实现: 比如限制 GET 请求参数中的 SQL 关键词:
html 代码

常用变量:
html 代码

三、常见设置:

1、worker_processes 4 # 开启多进程,一般为 cpu 核数,等于 Nodejs 中的 require('os').cpus().length

2、error_log logs/error.log info; # log 文件的地址和级别( debug, info, notice, warn, error, crit )

3、log_format 格式名称 具体格式 # 定义日志内容的格式可以包含$remote_addr $status $http_user_agent 等参数

4、开启 gzip
html 代码

默认的配置文件中只有 gzip on 作用不大,需要自行配置后续 gzip 字段;给所有需要开启 gzip 的资源添加 mimeType,图片不需要 gzip (没有明显效果,体积还可能增大),白白损耗性能;

四、解决前端跨域问题

在前后端分离的时候,前后端搭建了两套环境,前端请求数据的时候会跨域,一般是用 Nodejs 做中转,比如使用 http-proxy 和 request 模块,或者在 webpack 的 dev-server 里配置 proxy,浏览器兼容性比较理想的情况下还可以直接设置 CORS ;这样对于打包上线也不需要做太多改动;当然有时候还需要 jsonp ;

a. 设置 CORS
html 代码

如果不想设置星号的话,这个变通的做法貌似更灵活,还可以通过跨域反过来限制某些资源的是否可访问
html 代码

b. 做 api 中转
html 代码

五、从 http 切换到 https

对于一般的散户来说,Letsencrypt 是个不错的选择,可以免费为多个域名提供一套证书(散户福利! Nodejs 多站点切换 Htpps 协议);可以新建一个站点专门为申请证书服务,以免以后重新申请时重启应用或再次搭建;对于切换到 https,只需在 80 端口上直接对指定域名做 301 跳转到 https 对应地址,server 块内做很小改动即可:
html 代码

Nginx 真的超级强大,而且配置起来并不繁琐,常常简单的设置就可以达到非常强大的功能,比如做安全访问限制、负载均衡等;

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复