目录

Nginx 随记(一)部署

注意
本文最后更新于 2017-02-14,文中内容可能已过时。

引言

  我认识它的时候是在2016年做校基地的招新网站的时候,那时为了实现各种奇葩的功能,应付新生们大量的访问请求,以及想办法把部门里的服务器共享给部门成员用等等,为此接触了Nginx。   当时真是为之痴狂,天天在研究它的配置。从当时的一头雾水到现在越来越感慨它的强大,Nginx不愧是运维的法宝。如今本博客站也在使用着Nginx。   但在这几个月的摸爬滚打中,深深感受到其他博客里关于它的教程资料的质量很糟糕,因此我将我个人的理解以及配置教程在此记下,希望能帮助其他正在路上的苦逼程序员们。

Nginx 简介

  Nginx作为一个轻量级的Web服务器、反向代理服务器、邮件代理服务器,其性能非常出众,占用内存很小,特别是对于高并发,多连接等环境下,因而经常被广泛应用到各个项目上。以下是维基百科对其的介绍。

  Nginx, stylized as (NGINX or nginx), is a web server, which can also be used as a reverse proxy, load balancer and HTTP cache. Created by Igor Sysoev in 2002, it runs on Unix, Linux, BSD variants, macOS, Solaris, AIX, HP-UX, and Windows.   Nginx is free and open source software, released under the terms of a BSD-like license. A company of the same name was founded in 2011 to provide support.

Nginx 部署

  Nginx的强大高并发处理能力,使得它有理由也应该部署在最前端。

/posts/20170214233602/20170214220222.PNG

  而在Nginx背后的 upstream(上游服务器),则可以是tomcat、IIS,以及各种CGI等常见的Web服务器。   这些服务器可以不在一台主机上,一般情况下是分布在局域网内,他们可以组成集群,而Nginx经过恰当的配置后,可以为他们实现负载均衡。以后再发文介绍这个功能。

  用户与Nginx之间通常是长连接,Nginx与上游服务器通常是短连接,因为基本是本地局域网,带宽足够。这样的模式,可以大大减轻上游服务器的压力。   用户发送请求给Nginx,例如上传一个10G的文件,Nginx会先缓存到本地,然后重新构建请求发送给上游服务器。   下载时,Nginx会一边接收上游服务器的传输,一边把接收到的内容响应给用户,而不是先完全缓存到本地再响应用户,大大缩短响应时间,改善用户体验。但如果文件太大,本地不够地方缓存了,就会和上游服务器协商暂停发送

  Nginx的安装,可以参见网上各种教程,Ubuntu下直接使用apt-get的方式安装即可。   但这个方式默认是不安装echo模块,echo模块是我们国人写的一个模块,可以在不熟悉rewrite、location等命令的情况下,对自己写的配置文件方便地进行调试,它能将一些自定义的信息直接输出到浏览器。建议从Nginx官网以及echo模块官网下载源码编译安装上这个模块

  值得一提的是,在Linux中除了root等超级用户外,其他用户运行的程序是没办法使用1024以下的端口号的,而我们网站的端口号是80端口。   想让tomcat等服务器程序直接使用80端口的话,必然需要使用root用户运行tomcat程序,这有可能造成安全隐患。   为此可以采用Nginx做反向代理,Nginx是以root用户启动(默认就是如此),然后在配置文件中,可以对Nginx工作线程分配具体的用户,把用户对80端口的请求反向代理到上游服务器,比如tomcat。tomcat只需要监听一个大于1024的端口号,比如8888等,这样就比较安全了。