文章目录



1.Nginx简介

Nginx专题(一)-Nginx基础入门_nginx
Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一 IMAP/POP3/SMTP 代理服务器。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200314140334221.png
第一个公开版本0.1.0发布于2004年10月4日。

其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。

2011年6月1日,nginx 1.0.4发布。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx专题(一)-Nginx基础入门_服务器_02
​​​https://lnmp.org/nginx.html​​ 简介

2.Nginx应用场景

2.1.Nginx作为web服务器

Nginx可以作为静态页面的web服务器,同时还支持CGI协议的动态语言,比如perl、php
等。但是不支持java。Java程序只能通过与tomcat配合完成。Nginx专为性能优化而开发,
性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高
达 50,000个并发连接数。

2.2.反向代理

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只
需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返
回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器
地址,隐藏了真实服务器IP地址。
Nginx专题(一)-Nginx基础入门_服务器_03

2.3.负载均衡

客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易
造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情况呢?

我们首先想到的可能是升级服务器的配置,比如提高CPU执行频率,加大内存等提高机器的物理性能来解决此问题,但是我们知道摩尔定律的日益失效,硬件的性能提升已经不能满足日益提升的需求了。最明显的一个例子,天猫双十一当天,某个热销商品的瞬时访问量是极其庞大的,那么类似上面的系统架构,将机器都增加到现有的顶级物理配置,都是不能够满足需求的。那么怎么办呢?

上面的分析我们去掉了增加服务器物理配置来解决问题的办法,也就是说纵向解决问题的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
Nginx专题(一)-Nginx基础入门_反向代理_04

2.4.动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速
度。降低原来单个服务器的压力。
Nginx专题(一)-Nginx基础入门_服务器_05

3.Nginx的安装

3.1.windows版nginx

nginx有windows版本,只不过仅供学习
Nginx专题(一)-Nginx基础入门_反向代理_06
使用管理员身份双击nginx.exe就可以启动,默认的是端口是8080

3.2.linux版nginx

3.1.1.进入nginx官网

下载 ​​http://nginx.org/​​​Nginx专题(一)-Nginx基础入门_服务器_07

下载nginx的安装文件。

3.1.2.Tengine

Tengine 是nginx的加强版,封装版,淘宝开源,基于Nginx。

Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
从2011年12月开始,Tengine成为一个开源项目,Tengine团队在积极地开发和维护着它。Tengine团队的核心成员来自于淘宝、搜狗等互联网企业。Tengine是社区合作的成果,我们欢迎大家参与其中,贡献自己的力量。

官网:​​http://tengine.taobao.org/​​​Nginx专题(一)-Nginx基础入门_反向代理_08

3.2.Tengine的编译安装

3.2.1.安装之前准备

上传安装文件到指定目录

解压安装文件

tar -zxvf tengine-2.1.0.tar.gz

安装依赖

yum -y install gcc openssl-devel pcre-devel zlib-devel

3.2.2.编译安装tengine

在tengine目录中执行以下命令

./configure \
--prefix=/opt/myapp/soft/tengine-2.1.0/ \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/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=/var/tmp/nginx/client/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--with-pcre

注意:其中/opt/myapp/soft/为安装路径,可以提前创建该目录

执行安装命令

make && make install

3.2.3.为tengine准备启动文件

在/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

注意 /opt/myapp/soft/ 路径一致

给启动脚本可执行权限

chmod 755 nginx

启动脚本

[root@bruce1 init.d]# service nginx start

Nginx专题(一)-Nginx基础入门_反向代理_09
提示没有一个工作目录:​​​/var/tmp/nginx/client/​

创建该目录:

[root@bruce1 init.d]# mkdir -p /var/tmp/nginx/client/

启动nginx

[root@bruce1 init.d]# service nginx start

Nginx专题(一)-Nginx基础入门_nginx_10
查看Nginx的进程

ps -ef | grep nginx

Nginx专题(一)-Nginx基础入门_服务器_11

测试nginx

将tengine加入到启动服务中(选择性试验)

chkconfig --add nginx

查看是否添加成功

chkconfig --list nginx

设置开机启动

chkconfig nginx on

nginx启动、停止、无间断服务重启

service nginx start
service nginx stop
service nginx reload (重启)