首先从官网上http://nginx.org/下载最新的stable version源码,当前最新版本为nginx-1.10.2.tar.gz。

2.1 configure

解压之后,会发现里面有一个名为“configure”的文件:

configure本身是一个Shell脚本,中间会调用<nginx-source-path>/auto/目录下别的脚本执行各种任务。根据不同的用途,auto目录下面的脚本各司其职,有检查编译器版本的,有检查操作系统版本的,有检查标准库版本的,有检查模块依赖情况的,有关于安装的,有关于初始化的,有关于多线程检查的等等。configure作为一个总驱动,调用这些脚本去生成版本信息头文件、默认被包含的模块的声明代码和makefile文件,版本信息头文件和默认被包含的模块的声明代码被放置在新创建的objs目录下。

插段广告,先来普及一下有关makefile的知识。

一般来说,无论是C还是C++,首先要把源文件编译成中间代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,这个动作叫做编译(compile),每个源文件都应该对应于一个中间目标文件(O文件或是OBJ文件)。然后再把大量的ObjectFile合成执行文件,这个动作叫作链接(link)

编译时,编译器需要保证语法的正确,函数与变量的正确。对于后者,通常是需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。

链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(O文件或是OBJ文件)来链接我们的应用程序。链接器并不管函数所在的源文件,只管函数的中间目标文件(Object File),在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给中间目标文件打个包,在Windows下这种包叫“库文件”(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件。

总结一下,源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。而在链接程序时,链接器会在所有的Object File中找寻函数的实现,如果找不到,那到就会报链接错误(Linker Error)。

Linux下的make命令用于编译源代码,但是它执行之前需要一个 makefile 文件以告诉它需要怎么样去编译和链接程序。

广告完毕,继续来说Nginx。

由于我们下载下来的是源码,需要编译后才能安装。在编译安装Nginx之前,我们需要使用configure命令做大量“幕后”工作,包括检测操作系统内核和已经安装的软件,参数解析,中间目录生成以及根据各种参数生成的.c文件、makefile文件等。

所以,第一步需要运行configure脚本,该命令可以携带多种参数,使用“configure --help”查看参数列表:

例如:

--prefix=<path> - 指定Nginx安装路径,默认为 /usr/local/nginx。

--sbin-path=<path> -指定Nginx可执行文件安装路径,默认为<prefix>/sbin/nginx。

--conf-path=<path> -指定配置文件路径,默认为<prefix>/conf/nginx.conf。

--pid-path=<path> - 指定pid文件路径,默认为 <prefix>/logs/nginx.pid。

……等等。

注意,Nginx的一些模块需要依赖其他lib库,如果系统没有安装,运行configure命令的时候会报这样的错误:

./configure: error: the HTTP rewrite module requiresthe PCRE library.You can either disable the module by using--without-http_rewrite_module option, or install the PCRE library into thesystem, or build the PCRE library statically from the source with nginx byusing --with-pcre=<path> option.

一般需要提前安装三个lib库:

(1)rewrite模块依赖的PCRE

PCRE(PerlCompatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite依赖PCRE库来实现正则匹配。

(2)gzip模块依赖的 zlib

我们在Linux中经常会用到后缀为“.gz”的文件,它们就是gzip格式的。现今已经成为Internet 上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中的网站时,服务器就将网页内容压缩后传输到来访的电脑浏览器中显示出来。一般对纯文本内容可压缩到原大小的40%。

zlib是一个通用的压缩开源库,提供了在内存中压缩和解压的函数,包括对解压后数据的校验。Nginx依赖zlib库来实现gzip格式的数据压缩。

(3)ssl 模块依赖的openssl

SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议。

Nginx依赖openssl库实现https安全连接等方面的功能。

2.2 make && make install

make是Linux下的编译命令,它根据makefile文件中描述的规则来自动进行编译。

make install是Linux下的安装命令。

可以直接输入“make&& make install”一并完成编译与安装操作。默认的安装路径为“/usr/local/nginx”。

安装完毕后,输入“nginx-v”如果出现如下的版本信息,证明安装成功:

nginx version: nginx/1.10.2

使用“nginx”命令启动Nginx,浏览器输入“127.0.0.1:80”,会看到Nginx的默认页面:

2.3 常用命令

使用“nginx -h”可列出所有可使用的命令列表:

常用命令如下:

l   nginx

启动Nginx,可以利用“-c”参数指定要使用的配置文件。

l   nginx –s stop

停止Nginx,等效于“nginx –s quit”。“-s”代表采用向 Nginx 发送信号。注:stop是快速停止nginx,可能并不保存相关信息;quit是完整有序的停止nginx,并保存相关信息。

l   nginx –s reload

重载配置,修改配置文件后需要使用该命令使之生效。

l   nginx –v

查看Nginx的版本信息。

l   nginx –t

检查配置文件是否正确。

l   nginx –c filename

指定配置文件的路径为“filename”。默认路径为“conf/nginx.conf”

l   nginx -g

临时指定一些全局配置项,以使新的配置项生效,例如:

nginx -g"pid /var/nginx/test.pid"

上面这行命令意味着会把pid文件写到/var/nginx/test.pid中。

-g参数的约束条件是指定的配置项不能与默认路径下的nginx.conf中的配置项相冲突,否则无法启动。就像上例那样,类似这样的配置项:pidlogs/nginx.pid,是不能存在于默认的nginx.conf中的。

另一个约束条件是,以-g方式启动的Nginx服务执行其他命令行时,需要把-g参数也带上,否则可能出现配置项不匹配的情形。例如,如果要停止Nginx服务,那么需要执行下面代码:

nginx -g"pid /var/nginx/test.pid;" -s stop

如果不带上-g"pid /var/nginx/test.pid;",那么找不到pid文件,也会出现无法停止服务的情况。

Nginx之(二)Nginx安装的更多相关文章

  1. Nginx教程(二) Nginx虚拟主机配置

    Nginx教程(二) Nginx虚拟主机配置 1 虚拟主机管理 1.1 Nginx管理虚拟主机 虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主 ...

  2. Nginx教程(二) Nginx虚拟主机配置 (转)

    Nginx教程(二) Nginx虚拟主机配置 1 虚拟主机管理 1.1 Nginx管理虚拟主机 虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主 ...

  3. 探索PHP+Nginx(二) 安装PHP

    首先,我们简单了解一下什么是PHP,PHP(Hypertext Preprocessor 超文本预处理器) 和Java语言一样,PHP也是属于高级语言,并不能直接在操作系统上运行.Java运行需要虚拟 ...

  4. Nginx——安装Nginx(二)

    安装所需环境 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境. gcc 安装 安装 nginx 需要先将官 ...

  5. 源码安装nginx 方法二

    yum 仓库不能用大写字母 [root@oldboy conf.d]# gzip * 压缩当前目录下的所有文件 gzip ./* gzip . gzip./ # 关闭防火墙和selinux [root ...

  6. nginx(二)nginx的安装

    下载 nginx官网下载地址 把源码解压缩之后,在终端里运行如下命令: ./configure make make install 默认情况下,Nginx 会被安装在 /usr/local/nginx ...

  7. nginx学习之详细安装篇(二)

    1. 选择稳定版还是主线版 主线版:包含最新的功能和bug修复,但该版本可能会含有一些属于实验性的模块,同时可能会有新的bug,所以如果只是做测试使用,可以使用主线版. 稳定版:不包含最新的功能,但修 ...

  8. centos7.x下环境搭建(二)—nginx安装

    上篇文章是对mysql的安装,接着上篇文章,这篇文章安装nginx服务 添加yum源 默认情况Centos7中无Nginx的源,最近发现Nginx官网提供了Centos的源地址.因此可以如下执行命令添 ...

  9. linux和mac下的nginx和php的安装

    linux版本相关文档:http://www.nginx.cn/231.html 一.安装php 1.下载包,这里以php 5.3.10为例 2.执行下面shell命令 注意:下面配置的命令中第一行 ...

  10. Linux下Nginx+Tomcat整合的安装与配置

    因为nginx处理静态页面的速度很快,并且是免费的,它还可以配置负载均衡的服务器集群来搭建多个tomcat,所以nginx+tomcat是企业搭 建javaee项目很好的选择.nginx主要是通过反向 ...

随机推荐

  1. Java中如何实现j并发更新数据库同一条数据

    分情况来说:普通单应用并发.多应用或多台服务器并发 情况一:普通单应用并发 使用关键字synchronized就可实现. 情况二:多应用或多台服务器并发 因多个应用之间并非同一个jvm(应用)内,因此 ...

  2. python json.dumps 中的ensure_ascii 参数引起的中文编码问题

    在使用json.dumps时要注意一个问题   >>> import json >>> print json.dumps('中国') "\u4e2d\u5 ...

  3. JSON.stringify()和JSON.parse()分别是什么

    JSON.stringify() 从一个对象中解析出字符串 JSON.stringify({"a":"1","b":"2" ...

  4. 初入HTML5

    在最开始接触HTML5的时候,你会遇到的大多是一些常见常用的属性以及属性值.它们分类广.品种杂且使用率高.到css各种样式的时候,你会接触到更多的东西,各种属性.选择器.盒子模型都是重点.那么,现在我 ...

  5. Java集合框架知多少——干货!!!

    Java集合框架的组成 注意:四个接口的区别 ① Collection:存储无序的.不唯一的数据: ② List:存储有序的.不唯一的数据: ③ Set:存储无序的.唯一的数据: ④ Map:以键值对 ...

  6. Java内存回收机制.md

    1.java的内存 java的内存结构分为 堆 (是gc的主要区域) 线程共享,主要是用于分配实例对象和数组 栈 线程私有,它的生命周期和线程相同,又分成 虚拟机栈和本地方法栈,只有它会报 Stack ...

  7. jqgrid表格插件总结

    jqgrid整了好多天,最重要得是理清思路,故做下记录,让大家少走弯路 1  配置环境,下载几个包导入(自行百度),从官网上下载一个案例导入,可以简单显示一个静态的画面(注意json包之间的兼容性) ...

  8. ML笔记:Deep Learning

    非DL:要找好的特征 DL:无需找好的特征,但新问题:要设计好的网络架构

  9. testng执行多个suite

    由于testng.xml中只能设置一个<suite>标签,就无法创建多个测试集,通过<suite-files >标签可以实现允许多个测试集. 1.testng.xml中引入多个 ...

  10. .Net Core小技巧 - 使用Swagger上传文件

    前言 随着前后端分离开发模式的普及,后端人员更多是编写服务端API接口.调用接口实现文件上传是一个常见的功能,同时也需要一个选择文件上传的界面,可以编写前端界面上传,可以使用Postman.curl来 ...