美文网首页
Nginx入门-在Linux上安装Nginx

Nginx入门-在Linux上安装Nginx

作者: 重度恐高症 | 来源:发表于2016-02-18 11:36 被阅读5349次

    介绍

    简而言之,Nginx(发音为“engine x”)是一个小型、功能强大并且可扩展的 web/proxy 服务器。根据Netcraft最近的一次调查,Nginx已经支持了全球超过15%的网站,共111,680,078家 [1],其中不乏Netflix和WordPress.com这样的庞然大物。

    Nginx基于Simplified BSD许可(一个开源许可)发行,可以从在线仓库或者源代码进行安装。在本文中,我们将会涵盖如何在Debian,Ubuntu以及CentOS下安装Nginx。需要特别注意的一点是,在线仓库中的版本通常都会滞后一点。如果我们想体验最新的功能和bug修正,那么我推荐根据源代码来构建,或者直接从nginx.org下载安装包。

    使用在线仓库在Debian Wheezy 7.2 上安装Nginx

    通过使用Debian GNU/Linux包管理器的高级界面工具——aptitude,我们可以查看Nginx相关的包列表(如图1所示)。但是,我建议你先运行命令aptitude update,以便可以看到可用包的最新列表。


    图1

    (顺便提一下,第一列中的”p“表示当前操作系统上没有安装此包)

    如果我们不知道要安装哪个包,可以在命令aptitude search后跟上一个包名,例如aptitude search nginx,这样可以帮助我们进行选择。根据列出的各个包的说明,我们将选择安装nginx-full(如图2所示)。需要重点注意的是,每个包的描述中都列出了在使用仓库进行安装时,默认会安装的其他模块,我们将在本文稍后部分再对其进行介绍。


    图2 使用在线仓库在Debian Wheezy 7.2上安装nginx-full

    现在,我们已经安装了Nginx,但还没有启动它。随后我们运行service nginx start启动Nginx,即可在浏览器中打开其启动页面(如图3所示)。


    图3 Nginx启动页面

    接下来这条命令会显示我们刚安装的Nginx的版本(如图4所示)


    图4 从仓库中安装的Nginx v1.2.1版本

    但是,如今Nginx的最新版本已经是1.5.6(译者注:现在已经是1.9.11),而版本1.2.1已经与2012年6月5日过期了[2]。显然,如果我们希望使用最新的Nginx版本,就需要从源代码进行安装。

    使用源代码在Debian Wheezy 7.2上安装Nginx

    请注意,以下指令代表了在Linux下从头开始构建一个包的默认步骤,而我们都知道,使用./configuremakemake install的常规安装步骤,会使得卸载包变得困难,因为系统没有办法去跟踪哪些文件在安装过程中被添加或修改。

    总而言之,你应该有一个有说服力的原因(一个真正强有说服力的原因!),才可以选择上面提到的这种方式来编译一个包。虽然你也许有一些这类的原因,但是最常见的一个原因是要在系统中安装某个包的更新版本,或者为了添加某个特定的功能。

    如果你构建并安装了一个.deb或者一个.rpm文件,那么相应的包管理器(aptitude/apt-get或者yum)就能够感知到包的存在,并且它可以确保你没有覆盖之前安装的包的文件。另一方面,make install命令会覆盖安装过程中遇到的所有文件。我们稍后会讨论,当我们必须要从源代码编译并安装一个包时,可选的其他方式。

    既然我们已经决定使用Nginx的最新版本,那么久需要按照如下步骤,从http://nginx.org/download/下载已经压缩好的tar文件,并且在构建之前进行解压缩。

    1. 下载tar包:wget http://nginx.org/download/nginx-1.5.6.tar.gz
    2. 解压缩:tar xvzf nginx-1.5.6.tar.gz
    3. 进入上一步自动创建的目录: cd nginx-1.5.6

    然后

    1. cd nginx-1.5.6 (如果你希望列出所有的配置选项,可以使用--help选项)。./configure命令的输出会显示出Nginx的安装目录(如图5所示的 /usr/local/nginx

    图5 Nginx安装路径

    1. make
    2. make install

    虽然安装完成了,但是Nginx所在目录还没有被添加到PATH环境变量中(如图6所示)


    图6 PATH变量(之前)

    现在我们将/usr/local/nginx/sbin目录添加到PATH变量中,并检查我们刚刚从源代码安装的Nginx版本(如图7所示)。


    图7 PATH变量(之后),并且从源代码安装了Nginx v1.5.6版本

    注意:在安装过程中,可能系统会提示缺少库文件(如图8所示)。这时我们可以选择安装提供该库文件(例如我们遇到的libpcre3-devzlib1g-dev文件)的包,或者在配置是忽略这些提示。


    图8 缺少库文件

    在Ubuntu 12.04 LTS上安装Nginx

    虽然Ubuntu的最新版本是13.10(代号 Saucy Salamander,于2013年十月17日发布),我们还是决定在Ubuntu 12.04 LTS(代号 Precise Pangolin)上进行安装,因为Canonical提供了直到2017年4月份的延长支持。

    我们会继续通过sudo aptitudeupdate来更新源代码,然后从分发版的在线仓库中安装nginx-full。因为Ubuntu默认禁止root账户,所以必须加上关键字"sudo"(如图9所示)。除此之外,其他的所有安装步骤都跟我们之前在Debian上的操作几乎一样。从源代码进行安装也是一样的。


    图9 在Ubuntu上从仓库安装nginx-full包

    但是,我们可以看到,可用的版本比之前更低(如图10所示)。


    图10 在Ubuntu上从仓库安装的Nginx版本

    同之前一样,我们会在从源代码进行安装之前,删除(卸载)掉nginx相关的所有包(如图11所示)。


    图11

    同之前一样,在从源代码安装Nginx之后,我们的包都是最新的版本了(如图12所示)。


    图12

    但是,当我们在尝试启动Nginx时——就像我们在Debian中做的那样——我们很可能会得到一个nginx: unrecognized service的错误消息(如图13所示)。


    图13

    这是因为我们是从源代码安装的该包,因此启动脚本没有被放置在合适的地方。对于这种情况,我们或者可以使用全路径(/usr/local/nginx/sbin/nginx)来运行主程序以启动nginx守护进程,或者可以编写一个脚本来帮我们做这件事,当然,最后一种也是最好的方式,是能够像其他程序一样,使用常见的参数(start, stop, restart, reload等等)。同时,我们也可以使用随本教程提供的启动脚本(读者可以自行修改来满足需求)。

    一旦我们将启动脚本添加到/etc/init.d目录(并将其命名为nginx),我们就需要将DAEMON变量指向到目录/usr/local/nginx/sbin/nginx,并将安装目录(/usr/local/nginx/sbin)添加到PATH变量中(请参考图14a和14b)。


    图14a Nginx启动脚本(之前)


    图14b Nginx启动脚本(之后)

    然后我们就可以按如下方式来运行脚本(如图15a所示)


    图15a Nginx在端口80监听,PID为1931

    同时,我们还需要确保nginx.conf文件”知道“从哪找到Nginx的PID。因此我们注释掉nginx.conf中的如下几行(如图15c所示,该文件一般在/usr/local/nginx/conf目录下)并将目录改为启动脚本中的目录(如图15b所示)。


    图15b 文件/var/run/$NAME.pid (此处$NAME=nginx) 包含了Nginx的当前PID

    图15c

    使用checkinstall包来跟踪所有通过安装脚本创建或修改的文件

    checkinstall包(如图16所示)可以跟踪所有在安装过程中创建或修改的文件。它还可以创建并安装一个与包管理器兼容的包(.deb或者.rpm)(如图16和17所示),这样你就可以在不需要这个包的时候完整的卸载掉。关于它的用法请检查附带的man手册。


    图16a 安装checkinstall包


    图16b 使用checkinstall创建一个.deb文件并进行安装(I)


    图16c 使用checkinstall创建一个.deb文件并进行安装(II)

    当我们运行 aptitude search nginx后,会连同注释(之前在安装时作为描述)一起显示出我们已经安装了的包(如图17所示)。


    图17

    在CentOS 6.4上安装Nginx

    从仓库安装

    1. http://nginx.org/packages/centos/6 处下载并运行nginx yum配置文件。确保你选择了合适的架构;”noarch“是一个稳妥的选择:

      1. 下载:wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
      2. 安装:wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
    2. 安装Nginx:yum install nginx

    3. 启动Nginx:service nginx start

    从源代码安装

    按照同Debian和Ubuntu一样的流程

    启用模块

    根据Nginx的wiki[3],由于当前不支持运行时启用模块,所以必须在编译时选择启用的模块。通过运行./configure --help,可以找到配置脚本中提供的所有编译时选项,包括可选模块。不幸的是,如果我们已经安装了Nginx但又想添加某一个模块,我们必须先卸载它,再重新用所需模块进行编译。

    对于标准的HTTP模块列表,请参考表1[4]

    名称 描述 版本 禁用参数
    HTTP Core 控制端口、位置、错误页面、别名及其他必要项 -without-http
    Access 根据IP地址允许/禁止访问 –without-http_access_module
    Auth Basic 基础HTTP认证 –without-http_auth_basic_module
    Auto Index 生成自动目录列表 –without-http_autoindex_module
    Browser 解析“User-Agent” 0.4.3 –without-http_browser_module
    Charset 重新对页面编码 –without-http_charset_module
    Empty GIF 从内存中提供一个1x1的图片 0.3.10 –without-http_empty_gif_module
    FastCGI FastCGI 支持 –without-http_fastcgi_module
    Geo 使用IP地址的键/值对来设置变量 0.1.17 –without-http_geo_module
    Gzip 对响应进行Gzip压缩 –without-http_gzip_module
    Headers 设置任意的HTTP响应头
    Index 控制哪些文件可以用作索引
    Limit Requests 限制客户端连接的频率 0.7.20 –without-http_limit_req_module
    Limit Conn 基于一个变量来限制并发连接 –without-http_limit_conn_module
    Log 自定义访问日志
    Map 使用任意的键/值对来配置变量 0.3.16 –without-http_map_module
    Memcached Memcached支持 –without-http_memcached_module
    Proxy 代理到上游服务器 –without-http_proxy_module
    Referer 根据Referer头信息来过滤请求 –without-http_referer_module
    Rewrite 使用正则表达式来改写请求 –without-http_rewrite_module
    SCGI 支持SCGI协议 0.8.42 –without-http_scgi_module
    Split Clients 根据一些条件类分隔客户端 0.8.37 –without-http_split_clients_module
    SSI 支持Server-side Includes 命令 –without-http_ssi_module
    Upstream 用于负载均衡 –without-http_upstream_ip_hash_module (只禁用ip_hash 指令)
    User ID 发起身份确认cookie –without-http_userid_module
    uWSGI uWSGI 协议支持 0.8.40 –without-http_uwsgi_module
    X-Accel X-Sendfile-like 模块

    表1 标准的HTTP模块

    对于可选的HTTP模块列表,请参考表2[5]

    名称 描述 版本 启用参数
    Addition 在页面后追加文字 –with-http_addition_module
    Auth Request 基于子请求的结果来实现客户端认证 1.5.4 –with-http_auth_request_module
    Degradation 在低内存情况下,允许对某些地址返回204或者444 0.8.25 –with-http_degradation_module
    Embedded Perl 在Nginx配置文件中使用Perl 0.3.21 –with-http_perl_module
    FLV Flash流视频 0.4.7 –with-http_flv_module
    GeoIP 使用来自MaxMind GeoIP二进制文件的信息来创建变量 0.8.6, 0.7.63 –with-http_geoip_module
    Google Perftools Google性能工具支持 0.6.29 –with-google_perftools_module
    Gzip Precompression 对静态文件启用预压缩版本 0.6.23 –with-http_gzip_static_module
    Gunzip 即时对经过gzip压缩的响应进行解压缩 1.3.6 –with-http_gunzip_module
    Image Filter 使用Libgd来转换图片 0.7.54 0.7.54
    MP4 启用mp4流媒体及其seeking功能 1.1.3, 1.0.7 –with-http_mp4_module
    Random Index 将目录索引随机化 0.7.15 –with-http_random_index_module
    Real IP 使用nginx作为后端服务器时启用 0.3.8 –with-http_realip_module
    Secure Link 使用秘钥来保护页面 0.7.18 –with-http_secure_link_module
    SSL 支持HTTPS/SSL –with-http_ssl_module
    Stub Status 查看服务器统计信息 0.1.18 –with-http_stub_status_module
    Substitution 替换页面中的文字 –with-http_sub_module
    WebDAV 支持WebDAV 穿越 0.3.38 –with-http_dav_module
    XSLT 使用XSLT对页面进行再处理 0.7.8 –with-http_xslt_module

    表2 可选的HTTP模块

    对于邮件模块列表,请参考表3[6]

    名称 描述 配置参数
    Mail Core 配置邮件模块的核心参数 –with-mail
    POP3 POP3设置 –without-mail_pop3_module
    IMAP IMAP设置 –without-mail_imap_module
    SMTP SMTP设置 –without-mail_smtp_module
    Auth HTTP 使用Nginx来认证邮件服务
    Proxy Nginx可以代理 IMAP、POP3及SMTP协议
    SSL 该模块可以确保为POP3/IMAP/SMTP提供SSL/TLS支持 –with-mail_ssl_module

    表3 邮件模块

    举例说明,我们可以重新编译Nginx,以便添加其他模块(如图18所示)。


    图18 使用其他模块重新编译Nginx

    将Nginx添加为一个系统服务

    • Debian/Ubuntuupdate-rc.d –f nginx defaults (在Ubuntu上使用sudo

    注意:如果已经存在/etc/rcrunlevel.d/[SK]??name 这样的文件,那么update-rc.d将不会起作用。这样做的目的,是为了避免修改可能经过系统管理员调整过的已有配置。只有不存在任何该类文件的情况下,例如该服务从未被安装过,该程序才会安装相应的链接。

    • CentOS: chkconfig nginx on

    1. Sept. 2013 Web Server Survey, http://news.netcraft.com/archives/2013/09/05/september-2013-web-server-survey.html

    2. download page, http://nginx.org/download/

    3. Nginx wiki, http://wiki.nginx.org/Modules

    4. Nginx modules, http://wiki.nginx.org/Modules

    5. Nginx modules, http://wiki.nginx.org/Modules

    6. Nginx modules, http://wiki.nginx.org/Modules

    相关文章

      网友评论

          本文标题:Nginx入门-在Linux上安装Nginx

          本文链接:https://www.haomeiwen.com/subject/glmmkttx.html