- A+
我决定,从头到尾,将之前的nginx笔记重新整理一遍。
在重新整理的过程中,我会尽量通俗的描述这些知识点,以便让文章的受众更广。
我也会在温习旧知识的同时,参考别人的一些做法,以便学习到一些新的知识点。
整个过程的时间跨度可能比较久,所以中间可能会穿插一些别的文章。
每篇文章的篇幅不定,大多数可能是短篇文章,但是我会尽量的让这些知识点串联起来。
在阅读这篇文章之前,请先阅读如下文章,如下链接是阅读这篇文章的基础。
通过上述链接,你应该已经对nginx有了一个大概的了解,nginx是一个高性能的http服务器端软件,当然,它还有很多其他的功能和作用,但是我们暂且先不聊这些,因为在没有使用一个东西之前,先看一些不熟悉的概念反而会让我们更加头疼,所以,我们直接切入主题,先安装一个nginx,然后一边使用它,一边了解它的相关概念。
我已经提前准备好了一台虚拟机,操作系统是centos7.4,在之后的日子中,所有关于nginx的测试与总结都主要在这台机器上进行,这台虚拟机的IP地址是10.1.1.72
首先我们要做的就是安装nginx,安装nginx通常会使用如下两种方法:
方法一、通过操作系统的包管理器进行安装。
方法二、在官方网站下载源代码,编译安装。
两种方法各有优缺点,我们慢慢聊。
我使用的是centos操作系统,所以系统自带的包管理器就是yum,在之后演示"方法一"的过程中,我会配置一个yum源,通过yum源安装nginx,这种方法非常方便简单,这就是方法一的优点,而方法一的缺点就是:我们在安装nginx时,无法自定义安装哪些"模块"。"模块"是个什么东西呢?说到"模块"就要提到一个概念了,nginx的结构是高度模块化的,不同的模块,拥有不同的功能,所以,如果我们想要在使用nginx时能够使用某些特定的功能,则必须要安装对应的模块才行,但是通过"方法一"安装的nginx包都是预先编译好的,哪些模块已经编译进去,哪些模块没有编译进去都是已经确定了的,所以,使用方法一的缺点就是没有办法自定义安装相应的模块,不过话说回来,通过"方法一"安装nginx以后,一些常用的,基本的模块也都是包含的,所以,我们在刚开始使用nginx时,可以使用这种方法快速方便的安装nginx,而方法二的优缺点正好与方法一的优缺点相对应,方法二的优点就是我们可以自定义,哪些模块需要安装,哪些模块不需要安装,定制化比较高,如果想要使用第三方模块,则必须使用编译安装的方式,缺点就是编译安装,没有通过包管理器方便快捷,升级时也相对没有那么方便。
好了,我们大概了解了上述两种安装方法的不同,那么我们是不是该动手实际操作一下了呢?
先别急,在安装nginx之前,我们最好再来了解一下nginx都有哪些版本。
首先,在官方的版本中,有两个大方向,一个是开源免费版的nginx,另一个是商业版的nginx plus,这两个版本分别有不同的官方网站,如下:
开源版官网:nginx.org
商业版官网:nginx.com
你没猜错,我们之后的总结工作肯定是基于官方的开源免费版本进行的。
除了官方的nginx发行版,还有一些其他的、比较有名的nginx发行版,比如阿里巴巴的"Tengine",或者"OpenResty",我并没有使用它们的经验,如果你有兴趣,可以尝试使用它们。
让我们把注意力放到官方的免费开源版的nginx上,开源版在细分之下,还有三个小类:"主线版本"、"稳定版本"、"历史版本"。
那么这三类版本有什么不同呢?通常来说,三类版本的含义如下:
主线版本:"Mainline version",也有人称之为主干版或者开发版,主线版本通常是最新的版本,主线版通常会加入一些最新的功能,这些功能可能没有经过太多的测试,所以相对可能不太稳定,在真正的生产环境中,通常不会使用主线版本。
稳定版本:"Stable version",稳定版通常是由主线版发展而来的,稳定版通常是经过官方测试的,是官方认为相对稳定的版本,生产环境中通常会使用稳定版。
历史版本:"Legacy version",当新的稳定版出现,那么原先的稳定版就会被归类到"历史版本"中去。
我们可以打开如下官网连接,查看上述各个版本的信息。
http://nginx.org/en/download.html
打开上述连接以后,可以看到如下信息,从下图可以看出,在当前时间下,nginx的最新版的版本号为1.15.8,这个版本就是当前时间段下的"主线版本",当前的"稳定版本"的版本号为1.14.2,下图中还能看到之前的一些历史版本的版本号。
看到这里,你肯定已经对nginx的版本有了一定的了解,那么现在,我们就来动手安装一下nginx吧。
之前说过,有两种方法可以安装nginx,我们一一总结。
方法一
首先,我们总结一下怎样使用yum源安装nginx,有很多yum源可供我们使用,比如,我个人通常会使用阿里的epel源,或者使用nginx官方的yum源,此处以nginx官网的yum源为例,访问如下官网链接可以查看官方yum源的配置过程
http://nginx.org/en/linux_packages.html
从上述链接中可以找到主线版和稳定版的yum源,此处,我们配置稳定版的官方yum源,配置过程如下:
首先,添加nginx官方yum源文件,此处创建的源文件为/etc/yum.repos.d/nginx.repo,文件内容如下
1 2 3 4 5 |
[nginx] name=nginxrepo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1 |
官网源配置完成后,使用如下命令安装
1 |
#yuminstall-ynginx |
完成上述配置即可成功安装nginx,很简单吧。
方法二
现在来看看怎样编译安装nginx。
首先,从官网下载对应的源码包,访问官网的下载页面,连接如下
http://nginx.org/en/download.html
从上述链接中找到你要下载的nginx版本,此处我下载稳定版nginx-1.14.2,并将下载后的包解压
1 2 |
#wgethttp://nginx.org/download/nginx-1.14.2.tar.gz #tar-xfnginx-1.14.2.tar.gz |
进入解压目录,查看其内部的文件结构,如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#cdnginx-1.14.2 #ll total752 drwxr-xr-x6100110014096Jan1220:41auto -rw-r--r--110011001288742Dec422:52CHANGES -rw-r--r--110011001440121Dec422:52CHANGES.ru drwxr-xr-x2100110014096Jan1312:45conf -rwxr-xr-x1100110012502Dec422:52configure drwxr-xr-x4100110014096Jan1220:41contrib drwxr-xr-x2100110014096Jan1220:41html -rw-r--r--1100110011397Dec422:52LICENSE drwxr-xr-x2100110014096Jan1220:41man -rw-r--r--11001100149Dec422:52README drwxr-xr-x9100110014096Jan1220:41src |
此处,我来大概的描述一下上述文件与目录的作用,与编译其他软件一样,我们需要使用此目录中的configure脚本文件,进行一些编译安装的相关设置,如果你想要看看当前版本的nginx都修复了哪些bug、做了哪些变更、新增了哪些功能,则可以查看CHANGES文件,CHANGES.ru文件是CHANGES文件的俄文版,因为nginx的俄国人发明的,所以有一个单独的俄文版,conf目录中的文件是一些nginx配置文件的模板文件,编译安装时这些文件最终会被拷贝到安装目录中,html目录中的文件是一些静态页面的模板文件,src目录是源代码目录,man目录是帮助文档的目录,contrib目录中的vim目录中的文件可以帮助我们在使用vim编辑nginx配置文件时提供语法高亮功能。
好了,我们大概了解完了目录结构与其作用,现在来完成一下我们在编译之前通常会做的事情,就是看看当前configure脚本中都支持哪些参数,执行如下命令,可以看到编译安装nginx时我们可以使用的配置选项
1 |
#./configure--help |
执行"./configure --help"命令后,你可以看到很多选项信息,此处就不列出这些信息了,最常用的莫过于--prefix选项了,使用--prefix选项可以指定nginx编译安装的目录,除了一些常见的目录设置选项,你应该还会看到好多类似"--with-XXX_module "或" --without-XXX_module"的选项,这些选项是什么意思呢?说到这些选项,又要提到我们刚才介绍的概念了,那就是"模块"的概念,我们已经知道,nginx是高度模块化的,每个模块就代表一个功能,而且刚才也提到过,只有编译安装的方式才能指定安装哪些模块,不安装哪些模块,其实,你可以这样理解,"--with-XXX_module "选项表示指明安装对应的模块," --without-XXX_module"选项表示指明不安装对应的模块。
换句话说就是:
如果你没有明确使用"--with-AXX_module "选项,那么默认情况下是不会安装"AXX模块"的。
如果你没有明确使用" --without-BXX_module"选项,那么默认情况下是会安装"BXX模块"的。
使用"--with-XXX_module "选项添加默认未加入的模块,使用" --without-XXX_module"选项排除默认会加入的模块。
能够使用"--with-XXX_module"和" --without-XXX_module"控制的模块都是"可选模块",也就是说我们可以选择是否安装它们,除了这些"可选模块",还有一些"标准模块"是默认安装到nginx中的,我们无法选择是否安装这些"标准模块"。
我们没有必要了解每一个可选模块的作用,等我们用到它们时,再去了解他们也不迟。
说了这么多,都还没有开始真正的编译工作,那么现在,动手编译吧。
首先,确定我们的编译器已经安装。
1 |
#yuminstall-ygcgccgcc-c++ |
其次,我们需要安装一些依赖包,安装哪些依赖取决于你安装了哪些模块,不同的模块依赖的包不同,此例中,安装如下包。
1 |
#yuminstall-ypcre-develzlib-developenssl-devellibxslt-develGeoIP-develperl-ExtUtils-Embed |
我准备将nginx安装到/srv/nginx目录下,所以确定有这个目录
1 |
#mkdir-p/srv/nginx |
进入到刚才解压的目录中
1 |
#cdnginx-1.14.2/ |
现在开始执行configure 脚本,并且启用一些可能会用到的常用模块,操作如下
1 |
#./configure--prefix=/srv/nginx--with-file-aio--with-http_auth_request_module--with-http_ssl_module--with-http_v2_module--with-http_realip_module--with-http_addition_module--with-http_xslt_module=dynamic--with-http_geoip_module=dynamic--with-http_sub_module--with-http_dav_module--with-http_flv_module--with-http_mp4_module--with-http_gunzip_module--with-http_gzip_static_module--with-http_random_index_module--with-http_secure_link_module--with-http_degradation_module--with-http_slice_module--with-http_stub_status_module--with-http_perl_module=dynamic--with-pcre--with-pcre-jit--with-stream=dynamic--with-stream_ssl_module |
上述命令执行完成后,没有错误即可进行编译,执行make命令
1 |
#make |
完成上述步骤后你可能会发现,解压目录中多了一个objs目录,这个目录是编译安装nginx时产生的中间文件,第一次安装时不用太在意它,如果你以后想要升级老版本的nginx,则会使用到这个目录,此处不用在意,执行如下安装命令
1 |
#makeinstall |
完成上述步骤即可成功编译安装nginx。
一些其他配置
通过上述两种方法安装nginx以后,当你使用vim编辑器编辑nginx的配置文件时,vim编辑器是无法自动识别出nginx的相关语法的,所以,使用vim编辑器编辑nginx配置文件时,无法实现"语法高亮"功能,也就是说,默认情况下,使用vim编辑nginx配置文件时,没有彩色的语法着色,对于使用者来说,这样体验不好,nginx官方很贴心,在源码包中为我们提供了vim针对nginx的语法高亮配置文件,我们只要把这些文件拷贝到vim的对应目录中即可直接使用,方法很简单,如下
1 2 3 4 |
进入到源码包解压目录 #cdnginx-1.14.2/ 将相应的语法文件拷贝到对应的目录中,即可完成 #cp-rcontrib/vim/*/usr/share/vim/vimfiles/ |
无论是通过官方yum源的方式还是通过编译安装的方式,都可以使用上述方法实现nginx的语法高亮,如果你跟我一样,习惯使用阿里镜像源中的epel源安装nginx,那么你会发现,通过epel源安装nginx后,会自动完成上述vim语法文件的配置过程,不用我们手动拷贝对应的文件,对应的语法文件也是安装包自带的,也很是方便的。
好了,写了半天,也没有说明太多的东西,只是介绍了怎样安装nginx,以及一些相关的基础概念,欲速则不达,我们慢慢来吧,希望这篇文章能够帮助到你。

2019年12月2日 下午4:15 沙发
膜拜
2019年11月16日 上午8:18 板凳
大佬、nginx做反向代理准备写么
2019年5月31日 下午5:05 地板
发现你的博客之后,感觉如获至宝。爽死了
2019年5月31日 下午9:51 1层
@小李 好东西要分享~独乐乐不如众乐乐~大家一起爽死~加油~
2019年11月5日 下午4:41 2层
@朱双印 我 爱你
2019年5月28日 下午10:34 4楼
yuminstall-ygcgccgcc-c++
yuminstall-ypcre-develzlib-developenssl-devellibxslt-develGeoIP-develperl-ExtUtils-Embed
完全出问题
yuminstall-ypcre-develzlib-developenssl-devellibxslt-develGeoIP-develperl-ExtUtils-Embed
bash: yuminstall-ypcre-develzlib-developenssl-devellibxslt-develGeoIP-develperl-ExtUtils-Embed: 未找到命令…
建议把文章整理下,哪里行,哪里不行
2019年5月29日 上午8:49 1层
@残温 建议把滚动通告栏的”常见的问题”看一下
2019年5月19日 下午11:05 5楼
以下也是安装时的报错,给遇到的同学一个参考解决方案,网上搜的解决方式,原理不大清楚,朱老师能看到的话麻烦有空时能否解释下,谢谢啦~:
./configure ….时,报错,报错信息只有下面这些:
cp conf/koi-win ‘/root/nginx/conf’
cp: `conf/koi-win’ and `/root/nginx/conf/koi-win’ are the same file
make[1]: *** [install] Error 1
make[1]: Leaving directory `/root/nginx’
make: *** [install] Error 2
解决方式:
添加了指定配置文件的路径即可
./configure –prefix=/root/nginx –conf-path=/root/nginx/conf/nginx.conf ….
2019年5月19日 下午11:00 6楼
按照朱老师的教程安装了nginx,安装的时候报错了,以下是报错及解决方式,希望看到的同学能少走些弯路~
安装nginx的环境:CentOS6.5,root 用户安装
make install时报错:缺少GeoIP模块的lib库
尝试用yum安装,失败
yum install geoip geoip-devel
首先要下载geoip扩展源码,最新版地址:https://pecl.php.net/package/geoip。成功解决
$ wget https://pecl.php.net/get/geoip-1.1.1.tgz
$ cd geoip-1.1.1
$ ./configure
$ make
$ sudo make install
2019年4月1日 上午10:22 7楼
朱哥 问个小问题 为什么我复制你的命令 到我的终端提示 no such file or directory,但是我自己手动输入 却可以执行 命令是一摸一样的
2019年5月29日 上午9:11 1层
@浅醉一生 因为复制的空格有问题,也可以参考滚动通告”常见的问题”
2019年3月24日 下午4:43 8楼
大佬方法一中的源信息是不是有错,我用这个无法安装nginx。
更改为:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/rhel/7/$basearch/
gpgcheck=0
enable=1
就可以yum安装了
2019年2月28日 下午7:35 9楼
写的很好,感谢
2019年2月21日 下午5:02 10楼
你好、nginx能通过http请求头将不同的请求转发给不同的服务器吗?
2019年2月16日 下午3:33 11楼
楼主您好,-bash: yuminstall-ypcre-develzlib-developenssl-devellibxslt-develGeoIP-develperl-ExtUtils-Embed: command not found
从您博客贴下来的命令里面夹杂符号么? 我该如何解决
2019年2月16日 下午7:09 1层
@王庭威 对的,复制的空格有问题,用文本工具批量替换
2019年2月17日 下午12:49 2层
@朱双印 好嘞 谢谢楼主
2019年1月24日 上午7:40 12楼
博主的系列文章对于希望系统性学习的人来说太好了……非常感谢
2019年1月18日 下午3:09 13楼
不厌其烦,娓娓道来,步骤详尽,逻辑清晰~看了好几篇博主的文章,重视基础概念的理解和相关知识的介绍,对小白非常有用。期待博主的更新~!!!
2019年1月18日 下午12:38 14楼
期待中…
2019年1月16日 下午10:41 15楼
通俗易懂
2019年1月16日 下午5:38 16楼
楼主的文章真的很棒
2019年1月15日 下午4:11 17楼
加油 自己也看了很多博主,你的文章很通俗易懂,将自己脑中很多混乱的知识渐渐梳理的完整,更进一步的加深了自己的理解,非常感谢 我会一直关注的
2019年1月15日 上午11:53 18楼
我一直在等你的nginx文章,感动,望朱哥赶紧更新,期待,加油!