什么是Nginx? Nginx 是一个跨平台的web服务器,可运行在Linux,FressBSD,Solaris,AIX,MacOS,Windows等操作系统上,并且它还可以使用当前操作系统特有的一些高效API来提高自己的性能。
上面就是一段关于Nginx的简单描述,我们用一个软件,理当对它的优点有所理解,Nginx的优点主要有以下几方面。
- 相对其他服务器更快,一方面,在正常情况下,单次请求会得到更快的响应;另一方面,在高并发情况下比其他服务器更快的响应请求。
- 高扩展性,Nginx由C语言开发,并且拥有大量的插件库,根据需要我们可以将自己所需要的插件库编译进Nginx中,还可以自己开发自己所需的插件库。
- 高可靠性,Nginx是采用多进程的方式工作,由一个master进程和多个worker进程组成,可以实现不停机版本自我更新,所以基本上Nginx很少挂掉。
- 低内存消耗,Nginx由C语言开发,相对Tomcat 等等,其占用内存非常低。
- 热部署,Nginx可以在不停止当前服务的情况下,实现热部署,无缝切换。
- Nginx采用了最开放最自由的BSD许可协议。
了解了Nginx,我们就开始Nginx学习的第一步,编译自己的Nginx。由于Nginx使用C语言编写,使用gcc编译器。故我们优先选用Linux平台编译,我这里使用的是阿里云的一台Ubuntu服务器。
1.下载Nginx
- Mainline version(主线版本,最新的特性都是在这个版本中,不适合生产环境下载,懂的都懂)
- Stable version(稳定版,生产使用首选)
- Legacy versions(历史版本,大多公司会使用历史版本,因为这些往往经过了大量时间的考验)
我们选择下载Stable version版本。登录我们的阿里云服务器。执行如下命令:
wget http://nginx.org/download/nginx-1.16.1.tar.gz
tar xzvf nginx-1.16.1.tar.gz
进入Nginx的目录,我们可以看到以下几个文件或目录。这里我们简要说明一下:
- auto目录主要是存放Nginx用到的一些c或c++库,以及对于各个操作系统的适配。
- CHANGES文件主要是记录Nginx版本更新中添加的一些功能以及修复的Bug。
- CHANGES.ru CHANGES文件的俄语版本(Nginx是俄罗斯人写的,理当如此)
- conf 目录Nginx的配置文件。
- configure 这个脚本是Linux软件中很重要的一个步骤,检验目标平台是否符合当前软件的 编译环境。
- contrib 这个目录下都是Nginx提供的一些插件,诸如Vim支持Nginx配置文件语法高亮等等,有兴趣的可以打开自己看看,里面有README。
- html 目录Nginx用到的Html页面。
- LICENSE 协议
- man 帮助手册,懂的都懂
- README 懂的都懂
- src Nginx源代码目录。
了解了目录,接下来就开始我们的准备编译环境,首先我们安装三个linux库。分别是
- gcc
- libpcre3 libpcre3-dev (debian系列的是这样,如果是redhat系列的,库名请自行搜索),pcre
是Perl语言编写的正则表达式库,如果你的Nginx配置文件中需要使用正则表达式,需 要此库。 - zlib1g-dev (debian系列的是这样,如果是redhat系列的,库名请自行搜索),Zlib是一个gzip库,如果你想使用nginx的gzip压缩功能,需要此库
- openssl libssl-dev ,我们的Nginx不仅要支持http也要支持https,故必须安装此库。
执行如下命令:
apt install gcc libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev
完成这些之后,我们进入Linux程序编译的四步走:
- 执行configure脚本生成目标平台makefile (使用./configure --help 可以查看可以配置的参数,比如编译后存放的目录,二进制可执行文件的目录,等等,今天我们就按照默认配置编译即可)
- make -编译源代码。
- make install - 安装可执行文件。
- make clean。清理编译过程中的文件。
依次执行后结果如下:
在make install执行成功之后我们可以看到Nginx将我们需要Nginx可执行文件编译到了/usr/local/nginx目录,如果想更改这个目录,请在执行configure脚本时,加入参数改变。可以执行./configure --help 查看。
接下来我们进入usr/local/nginx 目录。先将端口改为8888,然后执行启动脚本,如下图所示我们启动了一个master进程和一个worker进程。
接下来我们访问:47.103.40.0:8888可以看到nginx的欢迎页面,Nginx编译成功。