最新版本的Nginx 1.9系被安装在樱花VPS上的故事

樱花虚拟专用服务器

(追記:2016-07-09)

如果按照此处的方法安装Nginx,
发现openssl1.0.2存在漏洞(CVE-2016-2107,CVE-2016-2105,CVE-2016-2106,CVE-2016-2109,CVE-2016-2176),
建议升级openssl的版本。

如果您是在这里安装Nginx或者准备安装Nginx的人,请参考这里。

樱花VPS的情况

ここかここの初期設定が終わってる状態.
OSは標準のCentOS 6.7

确认 Sakura VPS 上安装的操作系统的命令。

$ cat /etc/redhat-release
CentOS release 6.7 (Final)

Nginx的构建

我立刻开始构建Nginx。
以下假设已经连接到樱花VPS并通过SSH进行操作。
我想尝试使用yum安装。

$ yum info nginx

尝试一下这个版本太旧了,你是在骗人吗?所以,可以用下面的命令来添加代码库。

$ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

我本以为这样就可以了。

$ sudo yum -y install nginx
$ nginx -v
nginx version: nginx/1.8.1

安装的是Nginx 1.8版本,我想要的是1.9版本,所以不可以。(如果1.8版本也可以的话,可以接受)

从源代码中编译和安装Nginx。

如果之前安装了nginx的人,执行yum remove nginx

首先,无论哪个都可以,在工作目录中创建一个文件夹。

$ mkdir ~/hoge
$ cd ~/hoge

下载源代码

在创建的目录中下载所需的最新源代码。
所需源代码的主页在这里。

    • nginx-1.9系 http://nginx.org/en/download.html

openssl-1.0.2系 https://www.openssl.org/source/

pcre-8.3系 http://ftp.csx.cam.ac.uk/pub/software/programming/pcre/

zlib-1.2系 http://zlib.net/

目前(2016-03-03)最新的是以下内容。

    • nginx-1.9.12

 

    • openssl-1.0.2g

 

    • pcre-8.38

 

    • zlib-1.2.8

 

    (筆者はwgetだけど他の方法でもok)
$ wget http://nginx.org/download/nginx-1.9.12.tar.gz
$ wget https://www.openssl.org/source/openssl-1.0.2g.tar.gz
$ wget http://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz
$ wget http://zlib.net/zlib-1.2.8.tar.gz

如果有任何疑虑或担心,就要确保进行MD5、SHASUM等哈希值的核对。

源代码展开

如果能够进行匹配,那就进行展开。
可以执行以下4个命令,但是…

$ tar zxvf nginx-1.9.12.tar.gz
$ tar zxvf openssl-1.0.2g.tar.gz
$ tar zxvf pcre-8.38.tar.gz
$ tar zxvf zlib-1.2.8.tar.gz

依靠shell一次完成以下工作会更加高效。

$ find ./ -type f -name "*.tar.gz" -exec tar zxf {} \;

暫且核對一下。 .)
or
暫時確保,我記下來了。 , wǒ le.)

Note: Both options are commonly used to convey the meaning of “Just to make sure, I’ll double check.”

$ ls
nginx-1.9.12         openssl-1.0.2g.tar.gz
nginx-1.9.12.tar.gz  pcre-8.38              zlib-1.2.8.tar.gz    zlib-1.2.8
openssl-1.0.2g       pcre-8.38.tar.gz

好的。

源代码的构建和安装

确认后,在Nginx的源代码中进行构建和安装。
安装路径为 /usr/local/nginx 及以下。

$ cd nginx-1.9.12
$ ./configure --with-openssl=../openssl-1.0.2g/ --with-http_ssl_module --with-pcre=../pcre-8.38 --with-zlib=../zlib-1.2.8  --with-http_v2_module --with-debug
$ make
$ sudo make install

如果发生错误,请检查 configure 函数的每个参数的名称是否匹配。

这基本上就结束了。

确认。

$ sudo /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.9.12

好的。

我启动并确认一下。

$ sudo /usr/local/nginx/sbin/nginx
$ tail /usr/local/nginx/logs/error.log
2016/03/02 17:18:03 [notice] 3008#0: signal process started

好的。对于各种设定,您可以修改”/usr/local/nginx/conf/nginx.conf”文件。只需从个人电脑的浏览器访问您订阅的樱花VPS的IP地址(将IP地址输入URL栏),如果能看到Nginx的初始页面,则表示成功。

将Nginx的路径添加进去。

虽然成功安装了该软件,但是每次启动、停止或重新加载时都需要输入 “sudo /usr/local/nginx/sbin/nginx” 这样的命令,这样很麻烦。所以最好设置一个环境变量。

$ sudo vim ~/.bash_profile

请将以下内容记下。

export PATH=/usr/local/nginx/sbin:$PATH

如果能够书写的话,重新加载 bash_profile。

$ source ~/.bash_profile

应该可以做到这件事。

如果在执行sudo命令时被告知找不到命令的人,可以按照以下方式编辑visudo,nginx命令现在已经可以运行了。

$ sudo nginx -v
sudo: nginx: コマンドが見つかりません
$ sudo visudo
# Defaults   env_keep += "HOME"
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
↓
Defaults   env_keep += "HOME"
# Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

我可以尽情地使用sudo命令来操作nginx。

$ sudo nginx -v
nginx version: nginx/1.9.12

设置Nginx自动启动

安装源码编译的Nginx后,由于无法使用service或chkconfig命令,需要对其进行相应的配置使其可用。

在/etc/init.d中创建启动脚本并将其变为守护进程,使其能够自动启动。

$ sudo vim /etc/init.d/nginx

请记述以下内容。

#!/bin/bash

#chkconfig: 2345 80 30
#description: nginx
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin/:/usr/sbin:/usr/bin
DESC="nginx deamon"
NAME=nginx
DAEMON=/usr/local/nginx/sbin/$NAME
SCRIPTNAME=/etc/init.d/$NAME

test -x $DAEMON || exit 0

d_start() {
        $DAEMON || echo -n " already running"
}

d_stop() {
        $DAEMON -s stop || echo -n " not running"
}

d_reload() {
        $DAEMON -s reload || echo -n " could not reload"
}

case "$1" in
        start)
                echo -n "Starting $DESC: $NAME"
                d_start
                echo "."
        ;;
        stop)
                echo -n "Stopping $DESC: $NAME"
                d_stop
                echo "."
        ;;
        reload)
                echo -n "Reloading $DESC configuration..."
                d_reload
                echo "reloaded."
        ;;
        restart)
                echo -n "Restarting $DESC: $NAME"
                d_stop
                sleep 2
                d_start
                echo "."
        ;;
        *)
                echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
                exit 3
        ;;
esac

exit 0

如果可以的话,请更改权限。

$ sudo chmod +x /etc/init.d/nginx
$ ls -l /etc/init.d/nginx
-rwxr-xr-x 1 root root 872  3月  3 18:55 2016 /etc/init.d/nginx

好的。
将 nginx 添加到 chkconfig。
将 nginx 加入到 chkconfig。

$ sudo chkconfig --add nginx
$ chkconfig --list nginx
nginx           0:off   1:off   2:on    3:on    4:on    5:on    6:off

现在已经设定为自动启动了。

接下来,您可以随意修改 /usr/local/nginx/conf/nginx.conf 文件。

将Nginx升级到支持HTTP/2的版本的故事。

广告
将在 10 秒后关闭
bannerAds