Nginx (engine x) 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务。Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru 站点(俄文:Рамблер)开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。
其将源代码以类 BSD 许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4 发布。
Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在 BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx 可以在大多数 UnixLinux OS 上编译运行,并有 Windows 移植版。 Nginx 的 1.4.0 稳定版已经于 2013年4月24日发布,一般情况下,对于新建站点,建议使用最新稳定版作为生产版本,已有站点的升级急迫性不高。
Nginx 的源代码使用 2-clause BSD-like license。
Nginx 是一个很强大的高性能 Web 和反向代理服务,它具有很多非常优越的特性:
在连接高并发的情况下,Nginx 是 Apache 服务不错的替代品:Nginx 在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型。
Nginx 作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP 代理服务对外进行服务。Nginx 采用 C 进行编写,不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好很多。
处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。
无缓存的反向代理加速,简单的负载均衡和容错。
FastCGI,简单的负载均衡和容错。
模块化的结构。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。如果由 FastCG 或其它代理服务器处理单页中存在的多个 SSI,则这项处理可以并行运行,而不需要相互等待。
支持 SSL 和 TLSSNI。
Nginx 代码完全用 C 语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX 以及 Microsoft Windows。Nginx 有自己的函数库,并且除了 zlib、PCRE 和 OpenSSL 之外,标准模块只使用系统 C 库函数。而且,如果不需要或者考虑到潜在的授权冲突,可以不使用这些第三方库。
Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持 perl 语法)、 Bug 非常少的服务。
Nginx 启动特别容易,并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。
yum -y install make gcc-c++ libtool
PCRE 作用是让 Nginx 支持 Rewrite 功能
[root@localhost /]# cd /usr/local
[root@localhost local]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
[root@localhost local]# tar zxvf pcre-8.35.tar.gz
[root@localhost local]# cd pcre-8.35
[root@localhost local]# ./configure
[root@localhost local]# make && make install
[root@localhost local]# pcre-config --version
Nginx 的 gzip 模块需要 zlib 库
[root@localhost /]# cd /usr/local/
[root@localhost local]# wget http://zlib.net/zlib-1.2.11.tar.gz
[root@localhost local]# tar -zxvf zlib-1.2.11.tar.gz
[root@localhost local]# cd zlib-1.2.11
[root@localhost zlib-1.2.11]# ./configure
[root@localhost zlib-1.2.11]# make
[root@localhost zlib-1.2.11]# make install
Nginx的ssl 功能需要 openssl 库
[root@localhost /]# cd /usr/local/
[root@localhost local]# wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz
[root@localhost local]# tar -zxvf openssl-1.0.1j.tar.gz
[root@localhost local]# ./config
[root@localhost local]# make
[root@localhost local]# make install
[root@localhost /]# cd /usr/local/
[root@localhost local]# wget http://nginx.org/download/nginx-1.8.0.tar.gz
[root@localhost local]# tar -zxvf nginx-1.8.0.tar.gz
[root@localhost local]# cd nginx-1.8.0
[root@localhost nginx-1.8.0]# ./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/pcre-8.35 --with-openssl=/usr/local/openssl-1.0.1j --with-zlib=/usr/local/zlib-1.2.11
[root@localhost nginx-1.8.0]# make
[root@localhost nginx-1.8.0]# make install
#查看版本
$[root@localhost nginx-1.8.0]# /usr/local/webserver/nginx/sbin/nginx -v
[root@localhost /]# /usr/local/nginx/sbin/nginx
检查是否启动成功:
[root@localhost sbin]# ps -aux|grep nginx
root 5769 0.0 0.0 20484 608 ? Ss 14:03 0:00 nginx: master process ./nginx
nobody 5770 0.0 0.0 23012 1620 ? S 14:03 0:00 nginx: worker process
root 5796 0.0 0.0 112668 972 pts/0 R+ 14:07 0:00 grep --color=auto nginx
[1]+ 完成 ./nginx
[root@localhost sbin]#
打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。
重新载入配置文件:
$ /usr/local/webserver/nginx/sbin/nginx –s reload
重启:
$ /usr/local/webserver/nginx/sbin/nginx –s reopen
停止:
$ /usr/local/webserver/nginx/sbin/nginx –s stop
测试配置文件是否正常:
$ /usr/local/webserver/nginx/sbin/nginx –t
强制关闭:
$ pkill nginx
nginx -h #帮助
nginx -v #显示版本
nginx -V #显示版本和配置信息
nginx -t #测试配置
nginx -q #测试配置时,只输出错误信息
nginx -s stop #停止服务器
nginx -s reload #重新加载配置
编辑 Nginx 快捷启动脚本【注意 Nginx 安装路径,需要根据自己的 NGINX 路径进行改动】
[root@localhost init.d]# vim /etc/rc.d/init.d/nginx
编写脚本文件
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /usr/local/nginx/conf/nginx.conf
# pidfile: /usr/local/nginx/logs/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
#根据自己路径替换
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
#根据自己路径替换
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
make_dirs() {
# make required directories
user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
if [ -z "`grep $user /etc/passwd`" ]; then
useradd -M -s /bin/nologin $user
fi
options=`$nginx -V 2>&1 | grep 'configure arguments:'`
for opt in $options; do
if [ `echo $opt | grep '.*-temp-path'` ]; then
value=`echo $opt | cut -d "=" -f 2`
if [ ! -d "$value" ]; then
# echo "creating" $value
mkdir -p $value && chown -R $user $value
fi
fi
done
}
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
#configtest || return $?
stop
sleep 1
start
}
reload() {
#configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
[root@localhost init.d]# chmod -R 777 /etc/rc.d/init.d/nginx
[root@localhost init.d]# chkconfig nginx
#注意替换路径
[root@localhost init.d]# echo 'export PATH=$PATH:/usr/local/nginx/sbin'>>/etc/profile && source /etc/profile
[root@localhost]# service nginx (start|stop|restart)
[root@localhost]# chkconfig nginx
[root@localhost]# rm -rf /etc/nginx/
[root@localhost]# rm -rf /usr/sbin/nginx #解压路径
[root@localhost]# rm /usr/share/man/man1/nginx.1.gz #安装tar
[root@localhost]# apt-get remove nginx*