nginx短篇(1):安装nginx

  • A+
所属分类:Nginx  运维技术

我决定,从头到尾,将之前的nginx笔记重新整理一遍。

在重新整理的过程中,我会尽量通俗的描述这些知识点,以便让文章的受众更广。

我也会在温习旧知识的同时,参考别人的一些做法,以便学习到一些新的知识点。

整个过程的时间跨度可能比较久,所以中间可能会穿插一些别的文章。

每篇文章的篇幅不定,大多数可能是短篇文章,但是我会尽量的让这些知识点串联起来。

 

在阅读这篇文章之前,请先阅读如下文章,如下链接是阅读这篇文章的基础。

Http基础概念

 

通过上述链接,你应该已经对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短篇(1):安装nginx

 看到这里,你肯定已经对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,文件内容如下

 

官网源配置完成后,使用如下命令安装

 完成上述配置即可成功安装nginx,很简单吧。

   

方法二

现在来看看怎样编译安装nginx。

 

首先,从官网下载对应的源码包,访问官网的下载页面,连接如下

http://nginx.org/en/download.html

 

从上述链接中找到你要下载的nginx版本,此处我下载稳定版nginx-1.14.2,并将下载后的包解压

 

进入解压目录,查看其内部的文件结构,如下

此处,我来大概的描述一下上述文件与目录的作用,与编译其他软件一样,我们需要使用此目录中的configure脚本文件,进行一些编译安装的相关设置,如果你想要看看当前版本的nginx都修复了哪些bug、做了哪些变更、新增了哪些功能,则可以查看CHANGES文件,CHANGES.ru文件是CHANGES文件的俄文版,因为nginx的俄国人发明的,所以有一个单独的俄文版,conf目录中的文件是一些nginx配置文件的模板文件,编译安装时这些文件最终会被拷贝到安装目录中,html目录中的文件是一些静态页面的模板文件,src目录是源代码目录,man目录是帮助文档的目录,contrib目录中的vim目录中的文件可以帮助我们在使用vim编辑nginx配置文件时提供语法高亮功能。

 

好了,我们大概了解完了目录结构与其作用,现在来完成一下我们在编译之前通常会做的事情,就是看看当前configure脚本中都支持哪些参数,执行如下命令,可以看到编译安装nginx时我们可以使用的配置选项

 

执行"./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中的,我们无法选择是否安装这些"标准模块"。

 

我们没有必要了解每一个可选模块的作用,等我们用到它们时,再去了解他们也不迟。

 

说了这么多,都还没有开始真正的编译工作,那么现在,动手编译吧。

首先,确定我们的编译器已经安装。

 

其次,我们需要安装一些依赖包,安装哪些依赖取决于你安装了哪些模块,不同的模块依赖的包不同,此例中,安装如下包。

 

我准备将nginx安装到/srv/nginx目录下,所以确定有这个目录

 

进入到刚才解压的目录中

 

现在开始执行configure 脚本,并且启用一些可能会用到的常用模块,操作如下

 

上述命令执行完成后,没有错误即可进行编译,执行make命令

 

完成上述步骤后你可能会发现,解压目录中多了一个objs目录,这个目录是编译安装nginx时产生的中间文件,第一次安装时不用太在意它,如果你以后想要升级老版本的nginx,则会使用到这个目录,此处不用在意,执行如下安装命令

  

完成上述步骤即可成功编译安装nginx。

   

一些其他配置

通过上述两种方法安装nginx以后,当你使用vim编辑器编辑nginx的配置文件时,vim编辑器是无法自动识别出nginx的相关语法的,所以,使用vim编辑器编辑nginx配置文件时,无法实现"语法高亮"功能,也就是说,默认情况下,使用vim编辑nginx配置文件时,没有彩色的语法着色,对于使用者来说,这样体验不好,nginx官方很贴心,在源码包中为我们提供了vim针对nginx的语法高亮配置文件,我们只要把这些文件拷贝到vim的对应目录中即可直接使用,方法很简单,如下

 无论是通过官方yum源的方式还是通过编译安装的方式,都可以使用上述方法实现nginx的语法高亮,如果你跟我一样,习惯使用阿里镜像源中的epel源安装nginx,那么你会发现,通过epel源安装nginx后,会自动完成上述vim语法文件的配置过程,不用我们手动拷贝对应的文件,对应的语法文件也是安装包自带的,也很是方便的。

   

好了,写了半天,也没有说明太多的东西,只是介绍了怎样安装nginx,以及一些相关的基础概念,欲速则不达,我们慢慢来吧,希望这篇文章能够帮助到你。

 

 

weinxin
我的微信公众号
关注"实用运维笔记"微信公众号,当博客中有新文章时,可第一时间得知哦~
朱双印

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:23   其中:访客  19   博主  4

    • avatar 张晨风 1

      大佬、nginx做反向代理准备写么

      • avatar 小李 1

        发现你的博客之后,感觉如获至宝。爽死了

          • avatar 朱双印 Admin

            @小李 好东西要分享~独乐乐不如众乐乐~大家一起爽死~加油~

          • avatar 残温 0

            yum install -y gc gcc gcc-c++
            yum install -y pcre-devel zlib-devel openssl-devel  libxslt-devel GeoIP-devel perl-ExtUtils-Embed
            完全出问题
            yum install -y pcre-devel zlib-devel openssl-devel  libxslt-devel GeoIP-devel perl-ExtUtils-Embed
            bash: yum install -y pcre-devel zlib-devel openssl-devel  libxslt-devel GeoIP-devel perl-ExtUtils-Embed: 未找到命令…
            建议把文章整理下,哪里行,哪里不行

              • avatar 朱双印 Admin

                @残温 建议把滚动通告栏的”常见的问题”看一下

              • avatar Aragorn 1

                以下也是安装时的报错,给遇到的同学一个参考解决方案,网上搜的解决方式,原理不大清楚,朱老师能看到的话麻烦有空时能否解释下,谢谢啦~:
                ./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 ….

                • avatar Aragorn 1

                  按照朱老师的教程安装了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

                  • avatar 浅醉一生 1

                    朱哥 问个小问题 为什么我复制你的命令 到我的终端提示 no such file or directory,但是我自己手动输入 却可以执行 命令是一摸一样的

                      • avatar 朱双印 Admin

                        @浅醉一生 因为复制的空格有问题,也可以参考滚动通告”常见的问题”

                      • avatar Alex 2

                        大佬方法一中的源信息是不是有错,我用这个无法安装nginx。
                        更改为:
                        [nginx]
                        name=nginx repo
                        baseurl=http://nginx.org/packages/mainline/rhel/7/$basearch/
                        gpgcheck=0
                        enable=1
                        就可以yum安装了

                        • avatar Dracary 2

                          写的很好,感谢🙏

                          • avatar 无感、 0

                            你好、nginx能通过http请求头将不同的请求转发给不同的服务器吗?

                            • avatar 王庭威 1

                              楼主您好,-bash: yum install -y pcre-devel zlib-devel openssl-devel  libxslt-devel GeoIP-devel perl-ExtUtils-Embed: command not found
                              从您博客贴下来的命令里面夹杂符号么? 我该如何解决

                              • avatar 芃芃 0

                                博主的系列文章对于希望系统性学习的人来说太好了……非常感谢

                                • avatar 心叶游 0

                                  不厌其烦,娓娓道来,步骤详尽,逻辑清晰~看了好几篇博主的文章,重视基础概念的理解和相关知识的介绍,对小白非常有用。期待博主的更新~!!!

                                  • avatar hxw 0

                                    期待中…

                                    • avatar svenlea 0

                                      通俗易懂

                                      • avatar 蛋蛋 0

                                        楼主的文章真的很棒

                                        • avatar 哈哈哈哈 0

                                          加油 自己也看了很多博主,你的文章很通俗易懂,将自己脑中很多混乱的知识渐渐梳理的完整,更进一步的加深了自己的理解,非常感谢 我会一直关注的

                                          • avatar 叫我大脸吧 1

                                            我一直在等你的nginx文章,感动,望朱哥赶紧更新,期待,加油!