1.Nginx的应用
1.1 Nginx作为web服务器
Nginx可以作为静态页面的web服务器,同时还支持CGI协议的动态语言,如perl,php等。但是不支持java。java程序只能通过与Tomcat配合完成。有报告表明,Nginx能支持高达5万的并发。
1.2 反向代理
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只
需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返
回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器
地址,隐藏了真实服务器IP地址。
1.3 负载均衡
客户端发送多个请求到服务器,当并发量很大的时候,可能会导致访问速度很慢,严重的时候,可能会导致服务器崩溃。我们可以集群,增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
Nginx默认是负载均衡算法是轮询算法
1.4 动静分离
为了加快访问速度,可以把动态页面和静态页面交给不同的服务器来解析,加快解析速度。
2 Nginx的安装
只讲解Linux版的安装
2.1 Tengine的编译安装
Tengine 是nginx的加强版,封装版,淘宝开源,基于Nginx。因为原生的Nginx有很多BUG!淘宝团队封装了一下!
Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
从2011年12月开始,Tengine成为一个开源项目,Tengine团队在积极地开发和维护着它。Tengine团队的核心成员来自于淘宝、搜狗等互联网企业。
2.2 安装之前的准备工作
上传文件到指定位置
解压文件
tar -zxvf tengine-2.1.0.tar.gz
安装依赖
yum -y install gcc openssl-devel pcre-devel zlib-devel
编译安装tengine
在tengine目录中执行以下命令:
注意:此时要切换到已经解压好的目录下面
cd tengine-2.1.0
然后在该目录下执行下面的命令
./configure \
--prefix=/home/apps/nginx \
--error-log-path=/home/logs/nginx/error.log \
--http-log-path=/home/logs/nginx/access.log \
--pid-path=/home/apps/nginx/nginx.pid \
--lock-path=/home/apps/nginx/nginx.lock \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/home/apps/nginx/tmp/nginx/client \
--http-proxy-temp-path=/home/apps/nginx/tmp/nginx/proxy \
--http-fastcgi-temp-path=/home/apps/nginx/tmp/nginx/fcgi \
--http-uwsgi-temp-path=/home/apps/nginx/tmp/nginx/uwsgi \
--http-scgi-temp-path=/home/apps/nginx/tmp/nginx/scgi \
--with-pcre
注意:其中/usr/local/tengine-2.1.0/为安装路径,可以提前创建该目录,配置Nginx时就是在安装目录进行配置
运行该命令即可创建
mkdir -p home/apps/nginx
执行安装命令
make && make install
2.3 为tengine准备启动文件
将Nginx设置为系统的服务 Service,这样启动Nginx就很方便,同时也可以设置开机启动
在/etc/init.d目录下,创建一个启动文件名字为 nginx。
touch /etc/init.d/nginx
并粘贴以下脚本:
#!/bin/bash
#
# chkconfig: - 85 15
# description: nginx is a World Wide Web server. It is used to serve
# 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="/opt/myapp/soft/tengine-2.1.0/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/opt/myapp/soft/tengine-2.1.0/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' -`
# 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: "
# -HUP是nginx平滑重启参数
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
给脚本可执行权限
chmod 755 nginx
启动脚本
service nginx start
此时直接启动脚本会报错,提示工作目录不存在
创建一个工作目录就可以了
mkdir -p /var/tmp/nginx/client/
再次启动Nginx
service nginx start
提示启动成功
查看Nginx的进程
ps -ef | grep nginx
测试Nginx是否启动成功
打开浏览器,输入ip地址。不用输入端口号,Nginx默认是80端口
到这里,Nginx的安装已经完成了。
下面的是拓展
将tengine加入到启动服务中
chkconfig --add nginx
查看是否添加成功
chkconfig --list nginx
设置开机启动
chkconfig nginx on
nginx启动、停止、无间断服务重启
service nginx start
service nginx stop
service nginx reload (重启)