美文网首页
Centos7安装Tengine

Centos7安装Tengine

作者: 天马行空_9f6e | 来源:发表于2021-02-26 15:23 被阅读0次

    [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文件,在<context>标签下加入如下内容

    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

    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

          本文链接:https://www.haomeiwen.com/subject/qhahfltx.html