首先从官网上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安装的更多相关文章
-
Nginx教程(二) Nginx虚拟主机配置
Nginx教程(二) Nginx虚拟主机配置 1 虚拟主机管理 1.1 Nginx管理虚拟主机 虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主 ...
-
Nginx教程(二) Nginx虚拟主机配置 (转)
Nginx教程(二) Nginx虚拟主机配置 1 虚拟主机管理 1.1 Nginx管理虚拟主机 虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主 ...
-
探索PHP+Nginx(二) 安装PHP
首先,我们简单了解一下什么是PHP,PHP(Hypertext Preprocessor 超文本预处理器) 和Java语言一样,PHP也是属于高级语言,并不能直接在操作系统上运行.Java运行需要虚拟 ...
-
Nginx——安装Nginx(二)
安装所需环境 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境. gcc 安装 安装 nginx 需要先将官 ...
-
源码安装nginx 方法二
yum 仓库不能用大写字母 [root@oldboy conf.d]# gzip * 压缩当前目录下的所有文件 gzip ./* gzip . gzip./ # 关闭防火墙和selinux [root ...
-
nginx(二)nginx的安装
下载 nginx官网下载地址 把源码解压缩之后,在终端里运行如下命令: ./configure make make install 默认情况下,Nginx 会被安装在 /usr/local/nginx ...
-
nginx学习之详细安装篇(二)
1. 选择稳定版还是主线版 主线版:包含最新的功能和bug修复,但该版本可能会含有一些属于实验性的模块,同时可能会有新的bug,所以如果只是做测试使用,可以使用主线版. 稳定版:不包含最新的功能,但修 ...
-
centos7.x下环境搭建(二)—nginx安装
上篇文章是对mysql的安装,接着上篇文章,这篇文章安装nginx服务 添加yum源 默认情况Centos7中无Nginx的源,最近发现Nginx官网提供了Centos的源地址.因此可以如下执行命令添 ...
-
linux和mac下的nginx和php的安装
linux版本相关文档:http://www.nginx.cn/231.html 一.安装php 1.下载包,这里以php 5.3.10为例 2.执行下面shell命令 注意:下面配置的命令中第一行 ...
-
Linux下Nginx+Tomcat整合的安装与配置
因为nginx处理静态页面的速度很快,并且是免费的,它还可以配置负载均衡的服务器集群来搭建多个tomcat,所以nginx+tomcat是企业搭 建javaee项目很好的选择.nginx主要是通过反向 ...
随机推荐
-
体育游戏中的Player类
最近在做一个棒球的游戏,开始感觉还是挺酷炫的,但是其实做法挺朴实的,想象中的球员是多么智能,这样那样的,其实只是表象. 关于球员的类是游戏里非常重要的部分,这个玩意怎么写呢,可以这样写...... 棒 ...
-
【背景建模】VIBE
ViBe是一种像素级的背景建模.前景检测算法,该算法主要不同之处是背景模型的更新策略,随机选择需要替换的像素的样本,随机选择邻域像素进行更新.在无法确定像素变化的模型时,随机的更新策略,在一定程度上可 ...
-
mac上一键配置和安装adb驱动或者环境
最近才使用的mac,老实说mac上要配置adb的环境不那么复杂,但是还是会让一些心不细或者动手能力不强的同学望而却步.那么到底有没有一个一键完成mac上adb和fastboot环境搭配的软件或者脚本呢 ...
-
JavaScript之六种排序法
1.冒泡排序循环的最大值从length递减每次循环只能排好最后一个,然后递减到第一个 function bubbleSort(){ var changedData = new Array(); var ...
-
jsp java 数据库 乱码总结
Java中文问题的由来: Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦.原因主要有两方面,Java和JSP文件本身编译时产 ...
-
bottle-session 0.3 : Python Package Index
bottle-session 0.3 : Python Package Index bottle-session 0.3
-
C# 多线程中经常访问同一资源可能造成什么问题?
竞态条件和死锁. 如果两个或多个线程访问相同的对象,或者访问不同步的共享状态 ,就会出现竞态条件: 为了避免出现该问题,可以锁定共享的对象.但是过多的锁定也会有麻烦,那就是死锁: 当至少有两个线程被挂 ...
-
BufferReader BufferWriter
Copying information from one file to another with 'BufferReader BufferWriter' public class Demo5 { p ...
-
JavaScript中变量的LHS引述和RHS引用
JavaScript中变量的LHS引述和RHS引用 www.MyException.Cn 网友分享于:2015-02-04 浏览:0次 JavaScript中变量的LHS引用和RHS引用 在Jav ...
-
C# 大文件的复制方法
如何复制读取大文件,也许困惑了很多人很长时间,这个不知道怎么搞,的确让人头疼欲裂,知道了你就才发现原来那么简单,话不多说,直入正题```` static void Main(string[] args ...