Centos7安装Tengine

[TOC]

# Tengine

## Nginx和Tengine

### Nginx

Nginx ("engine x") 是一个高性能的 **HTTP** 和 **反向代理** 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。

•第一个公开版本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网站用户有:新浪、网易、腾讯等。

![image-20200103154530929](images/20200103154530929.png)

功能:

- web服务器

- web reverse proxy

- smtp reverse proxy


### Nginx和apache的优缺点

#### nginx相对于apache的优点:

- 轻量级,同样起web 服务,比apache 占用更少的内存及资源

- 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能

- 高度模块化的设计,编写模块相对简单

- 社区活跃,各种高性能模块出品迅速

####  apache 相对于nginx 的优点:

- rewrite ,比nginx 的rewrite 强大

- 模块超多,基本想到的都可以找到

- 少bug ,nginx 的bug 相对较多

Nginx 配置简洁, Apache 复杂

最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;

nginx是异步的,多个连接(万级别)可以对应一个进程

## Nginx解决的问题

- 高并发

- 负载均衡

- 高可用

- 虚拟主机

- 伪静态

- 动静分离

## 安装

### 准备工作

#### 操作系统

最好使用linux操作系统,课上使用VirtualBox或VMware虚拟机搭建centos6.x做实验。

系统依赖组件 ``` gcc openssl-devel pcre-devel zlib-devel```

安装:``yum install gcc openssl-devel pcre-devel zlib-devel ``


#### Tengine下载和文档

http://tengine.taobao.org/

#### Nginx官网和文档

http://nginx.org

上传Nginx压缩包到服务器,一般安装在/usr/local目录下


#### 编译安装

找到解压后的tengine根目录下

./configure --prefix=/安装路径

make && make install


#### 启动

找到安装路径的sbin目录,比如/usr/local/tengine/sbin目录下

运行./nginx,即可启动nginx

但是目前这种方式只能这样手动启动,如果关机重启,他不会自动启动,所以最好把他写入service让其自启动


#### 查看所有打开的nginx进程,并杀死进程

查看进程  ps -ef | grep nginx

根据PID杀死进程

kill -9 64861

kill -9 64862


### 启动服务

### 脚本自启动

在文件夹`/etc/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:      /etc/sysconfig/nginx

# pidfile:    /var/run/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/tengine/sbin/nginx"

prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/tengine/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: "

    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 777 nginx


#### 启动服务

service Nginx start 启动服务(/usr/local/tengine/sbin/nginx)   (systemctl start nginx)

service Nginx stop 停止(/usr/local/tengine/sbin/nginx -s stop)

service Nginx status 状态(systemctl status nginx)

service Nginx reload 动态重载配置文件(/usr/local/tengine/sbin/nginx -s reload)


####添加开机自启动

chkconfig --add nginx

chkconfig nginx on


#### 配置文件

默认配置文件位于 /usr/local/tengine/conf/nginx.conf

location的路径匹配

location = / {

    [ configuration A ]

}

location / {

    [ configuration B ]

}

location /documents/ {

    [ configuration C ]

}

location ^~ /images/ {

    [ configuration D ]

}

location ~* \.(gif|jpg|jpeg)$ {

    [ configuration E ]

}


请求“/”匹配配置A, 请求“/index.html”匹配配置B, 请求“/documents/document.html”匹配配置C, 请求“/images/1.gif”匹配配置D, 请求“/documents/1.jpg”匹配配置E。


限制访问配置范例

location / {

    deny  192.168.1.110;

    allow  all;

}

这里 192.168.1.110被禁止访问  除了 1.110 其他都可以访问。


访问要求输入账号密码

location ~* \.(avi)$ {

    auth_basic "closed site";

    auth_basic_user_file users;

}

当请求以 .avi 结尾的uri时候,会要求输入用户名密码,密码存放在conf目录下的users文件中

设置用户名密码 htpasswd -c -d /usr/local/users bruce


在线查看状态

location /basic_status {

    stub_status on;

}


打开目录浏览状态

设置了autoinex on则可以将页面变成目录浏览模式,多个location中只有一个能设置root,所以这里用alias替换root

location /xxx {

    alias /usr/local/games/Sekiro;

    autoindex on;

}



配置代理转发

/usr/local/tengine/conf/nginx.conf文件中,在http{}中,server{}之前,加入

upstream tomcats {

     url_hash;

     server 192.168.0.112:9999 weight=1;

     server 192.168.0.103:8080 weight=10;

}

server {

  location / {

    proxy_pass http://tomcats;

  }

}

以上配置则是对统一请求tengine服务器的时候,会按权重weight来对应转发到不同的web服务器,也有其他的方式如:

ip_hash(某个第一次ip访问后,一直就会转到第一次的web),

url_hash(通过请求url进行hash,可以请求一次后对应web生成缓存,后续请求相同url则直接走对应web缓存),

least_conn,least_time


共享session操作

在装有tengine的服务器上安装memcached,执行如下命令

yum -y install memcached

memcached -d -m 128 -u root -l 192.168.0.112 -p 11211 -c 256 -P /tmp/memcached.pid

memcached-tool 192.168.0.112:11211

在所有运行tomcat的服务器上的lib文件夹下,导入对应jar包  https://download.csdn.net/download/dante1987/15481678

打开所有服务器上的tomcat的conf文件夹下的context.xml文件,在标签下加入如下内容

memcachedNodes="n1:192.168.0.112:11211"

    sticky="false"

    lockingMode="auto"

    sessionBackupAsync="false"

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

    sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

/>

然后重启所有tomcat,重启tengine,这时候所有的web服务器通过tengine请求所得到的session都是共享的

如果运行过程中有问题报错检查一下jdk的环境变量是否有正确配置以及对应配置中的IP地址是否填写正确

安装jdk

yum install java-1.8.0-openjdk* -y

/etc/profile文件底部添加jdk环境变量,默认yum的方式会安装到/usr/lib/jvm目录下

JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64

PATH=$PATH:$JAVA_HOME/bin

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME  CLASSPATH  PATH


动静分离操作

将原来的工程中的静态图片、css、js等,剪切出来放到Linux下某个目录(这里用/home/brucewong/www/SpringBootMVCProject/static

使得原来的工程中没有静态内容,这是为了让静态内容以后都直接通过tengine来访问而不再通过tomcat等服务器,减少web服务器的性能消耗。

在tengine下的nginx.conf文件中添加下面配置

location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma|js|css)$ {

            root /home/brucewong/www/SpringBootMVCProject/static;

}

如果此时页面不能正常显示,尝试单独访问页面的图片是不是提示403错误,是的话在nginx.conf文件开头配上访问权限即可

use root


你可能感兴趣的:(Centos7安装Tengine)