Nginx的安装和配置
以前装Nginx都是直接百度一下,装完了事,结果用的时候又有很多不明白的地方,所有今天打算把安装过程记录一下。
首先是安装环境的准备,我的系统环境是Centos 7,用的是虚拟机。因为打算自己编译安装,所以先看一下编译安装所需要的工具是否都安装好了。
编译安装Nginx需要GCC,PCRE,zlib和OpenSSL,如果这几样工具没有装好的话,要提前装一下,需要注意的是,PCRE,zlib和Openssl不仅要安装软件本身,还需要安装开发开发包。所以需要运行
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
这些前置的软件和工具安装好以后,就可以进行到下一步。
首先是从官网下载最新的稳定版的源码包,写这篇博客的时候是1.12.2版本了,将源码包下载并且解压
wget http://nginx.org/download/nginx-1.12.2.tar.gz
tar zxf nginx-1.12.2.tar.gz
解压完成以后进到目录下,还有三个步骤,第一个步骤是配置选项,如果要使用默认配置的话,就直接运行
./configure
如果需要设置自定义的选项的话,就可以带上对应的参数,详细的选项列表可以自己去找一下资料,这里我们只加上一个简单的开启https的选项
./configure --with-http_ssl_module
运行这个命令以后,会有一个验证的过程,来检测程序编译的前提条件是否都满足,如果有自定义的选项的话,还有检查选项是否配置正确。下一步使用
make
命令对源码进行编译,如果第一步的验证通过的话,这里不会出现什么问题,然后输入
make install
进行安装,默认的安装目录是/usr/local/nginx,所以如果不是root用户登陆的话,需要获取root权限。
如果前面的准备工作都做好了的话,安装过程应该会比较顺利,接下来看一下一些简单的配置。
一般情况下安装成功以后,可以执行/usr/local/nginx/sbin/nginx来开启Nginx的服务,Nginx默认是监听80端口
所以如果80端口被占用的话, 可能就无法正常启动,可以使用
ps aux | grep nginx
来查看nginx的相关进程,如果80端口被占用了,可以用
netstat -lnp | grep 80
这命令来查看是哪个进程占用了80端口
因为我之前没有启动例如apache等类似的服务器,所以正常启动了Nginx,这个3737就是进程号,如果是其他程序占用了80端口,可以将这个进程kill以后,再执行刚才的命令将Nginx启动。
输入
/usr/local/nginx/sbin/nginx -h
可以查看Nginx的相关操作命令
但是每次都要输入完整的地址,很麻烦,所以有几个方法可以方便一点的,这里介绍两种,
第一种是临时的,只在当前终端生效的,是创建一个别名来指向Nginx这个执行文件
alias nginx=/usr/local/nginx/sbin/nginx
这样就可以在命令行中直接输入类似
nginx -s reload
命令来操作Nginx
还有一种是永久的,那就是将Nginx的路径加入到环境变量中,使用vi打开/etc/profile文件,在文件末尾加上
PATH=$PATH:/usr/local/nginx/sbin export PATH
注意这里的路径到sbin就到头了,刚才创建别名是创建可执行文件的别名,所以要指定到nginx这个文件
然后source一下这个文件,就可以永久的在命令行直接输入nginx这个命令来操作Nginx了。
到这一步Nginx的安装就基本结束了,但是我还想让Nginx作为守护进程运行,并且能够随着系统的启动而启动,所以需要一个shell脚本来做这件事。
在/etc/init.d这个目录下新建一个名为nginx的文件,确保是在root用户或者有root权限下进行这些操作。然后在这个文件中输入以下内容
#! /bin/bash
# chkconfig:3 10 90
# description:.
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DESC="nginx daemon" NAME=nginx DAEMON=/usr/local/nginx/sbin/$NAME SCRIPTNAME=/etc/init.d/$NAME # 如果文件不存在的话,就结束脚本 test -x $DAEMON || exit 0 # 下面是定义几个函数,用来操作Nginx d_start() { $DAEMON || echo -n " Nginx is already running" } d_stop() { $DAEMON -s quit || echo -n " Nginx is not running" } d_reload() { $DAEMON -s reload || echo -n " Can not reload Nginx" } # $1表示第一个参数 case "$1" in start) echo -n "Starting $DESC: $NAME" d_start echo "Started!" ;; stop) echo -n "Stoping $DESC: $NAME" d_stop
echo "Terminated!"
;;
reload)
echo -n "Reloading $DESC configuration..."
d_reload
echo "Reloaded!"
;;
restart)
echo -n "Restarting $DESC: $NAME"
d_stop
# 这里暂停2秒钟以确保Nginx已经完全停止了
sleep 2
d_start
echo "Restarted!"
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
;;
esac
exit 0
然后将这个文件设置为可执行文件
chmod +x nginx
在这一步之后,已经可以使用类似
service nginx start
的命令来操作Nginx,最后一步是让这个脚本可以在系统启动时自动启动,不同的操作系统添加服务的方式有所不同,在Centos下通过输入
chkconfig --add nginx
将nginx添加进服务,但是我在第一次操作的时候报了一个错
service nginx does not support chkconfig
后来查了以下发现是在/etc/init.d/nginx文件中少写了两行注释
# chkconfig:3 10 90 # description:...
其中在这个chkconfig 3 10 90 中,3的意思表示的是运行级别,Centos的默认启动级别是3,所以这里写3,关于系统运行级别的内容,可以去查一下资料。10代表启动优先级,90代表停止优先级,数字越大优先级越低。
将这两行注释写在#! /bin/bash后面,然后再重新执行
chkconfig --add nginx
至此这篇博客的内容就介绍完了,后面将会记录一下Nginx在HTTP方面的使用和配置。