最新版本的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的版本的故事。