博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tengine/Nginx 安装
阅读量:7001 次
发布时间:2019-06-27

本文共 16889 字,大约阅读时间需要 56 分钟。

原文出处:http://my.oschina.net/liuhuan0927/blog/604663

一.Tengine是什么

简介

Tengine是由淘宝网发起的Web服务器项目。它在的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如,等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。

从2011年12月开始,Tengine成为一个开源项目,Tengine团队在积极地开发和维护着它。Tengine团队的核心成员来自于、等互联网企业。Tengine是社区合作的成果,我们欢迎大家,贡献自己的力量。

特性

  • 继承Nginx-1.6.2的所有特性,兼容Nginx的配置;

  • 支持。加入一个模块不再需要重新编译整个Tengine;

  • ,建连性能提升为

  • 同时支持和,;

  • 到HTTP后端服务器或FastCGI服务器,大量减少机器的I/O压力;

  • 更加强大的负载均衡能力,包括、,,根据服务器状态自动上线下线,以及;

  • 支持。通过使用这种机制Web应用防火墙的编写更为方便;

  • 支持设置proxy、memcached、fastcgi、scgi、uwsgi

  • 支持。扩展功能非常高效简单;

  • 支持按指定关键字(域名,url等);

  • 从而减小页面的体积

  • 自动根据CPU数目设置进程个数和绑定CPU亲缘性;

  • 可以根据访问文件类型设置过期时间;

  • ……

 

二. 安装 Tengine

2.1 编译环境准备

1
2
3
4
 
yum -y 
install 
gcc 
gcc
-c++ autoconf automake wget
 
yum -y 
install 
zlib zlib-devel openssl openssl-devel pcre-devel pcre gd-devel 
 
groupadd nginx
 
useradd 
-g nginx  -s
/sbin/nologin 
-M nginx

zlib:nginx提供gzip模块,需要zlib库支持

openssl:nginx提供ssl功能

pcre:支持地址重写rewrite功能

concat:支持js,CSS的样式文件合并,减少nginx服务器请求链接数

 

 

 

安装jemalloc,优化nginx内存管理

1
2
3
4
5
6
7
wget http:
//www
.canonware.com
/download/jemalloc/jemalloc-4
.0.4.
tar
.bz2
tar 
xjf jemalloc-4.0.4.
tar
.bz2
cd 
jemalloc-4.0.4
.
/configure
make 
&& 
make 
install
echo 
'/usr/local/lib' 
/etc/ld
.so.conf.d
/local
.conf
ldconfig

2.2编译安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cd 
/opt/
wget http:
//tengine
.taobao.org
/download/tengine-2
.1.2.
tar
.gz
tar 
zxvf tengine-2.1.2.
tar
.gz
cd 
tengine-2.1.2
.
/configure  
\
--user=nginx \
--group=nginx \
--with-jemalloc \
--prefix=
/usr/local/nginx 
\
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-http_concat_module \
--with-pcre \
--with-http_sysguard_module \
--with-http_realip_module \
--with-http_image_filter_module
1
make
1
make 
install

2.3启动Tengine

1
/usr/local/nginx/sbin/nginx

2.4设置Tengine开机启动

entos版本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
cat 
>> 
/etc/init
.d
/nginx 
<<EOF
#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# it is v.0.0.2 version.
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
#              It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd=
/usr/local/nginx/sbin/nginx
nginx_config=
/usr/local/nginx/conf/nginx
.conf
nginx_pid=
/usr/local/nginx/logs/nginx
.pid
RETVAL=0
prog=
"nginx"
# Source function library.
.  
/etc/rc
.d
/init
.d
/functions
# Source networking configuration.
.  
/etc/sysconfig/network
# Check that networking is up.
[ \${NETWORKING} = 
"no" 
] && 
exit 
0
[ -x \$nginxd ] || 
exit 
0
# Start nginx daemons functions.
start() {
if 
[ -e \$nginx_pid ];
then
echo 
"nginx already running...."
exit 
1
fi
echo 
-n $
"Starting \$prog: "
daemon \$nginxd -c \${nginx_config}
RETVAL=$?
echo
[ \$RETVAL = 0 ] && 
touch 
/var/lock/subsys/nginx
return 
\$RETVAL
}
# Stop nginx daemons functions.
stop() {
echo 
-n $
"Stopping \$prog: "
killproc \$nginxd
RETVAL=\$?
echo
[ \$RETVAL = 0 ] && 
rm 
-f 
/var/lock/subsys/nginx 
/usr/local/nginx/logs/nginx
.pid
}
reload() {
echo 
-n $
"Reloading \$prog: "
#kill -HUP `cat \${nginx_pid}`
killproc \$nginxd -HUP
RETVAL=\$?
echo
}
# See how we were called.
case 
"\$1" 
in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
status)
status \$prog
RETVAL=\$?
;;
*)
echo 
$
"Usage: \$prog {start|stop|restart|reload|status|help}"
exit 
1
esac
exit 
\$RETVAL
EOF

 Ubuntu版本

#! /bin/sh### BEGIN INIT INFO# Provides:          nginx# Required-Start:    $remote_fs $syslog# Required-Stop:     $remote_fs $syslog# Default-Start:     2 3 4 5# Default-Stop:      0 1 6# Short-Description: nginx init.d dash script for Ubuntu or other *nix.# Description:       nginx init.d dash script for Ubuntu or other *nix.### END INIT INFO#------------------------------------------------------------------------------# nginx - this Debian Almquist shell (dash) script, starts and stops the nginx#         daemon for Ubuntu and other *nix releases.## description:  Nginx is an HTTP(S) server, HTTP(S) reverse \#               proxy and IMAP/POP3 proxy server.  This \#               script will manage the initiation of the \#               server and it's process state.## processname: nginx# config:      /usr/local/nginx/conf/nginx.conf# pidfile:     /usr/local/nginx/logs/nginx.pid# Provides:    nginx## Author:  Jason Giedymin#          
.## Version: 3.5.1 11-NOV-2013 jason.giedymin AT gmail.com# Notes: nginx init.d dash script for Ubuntu.# Tested with: Ubuntu 13.10, nginx-1.4.3# # This script's project home is:# http://github.com/JasonGiedymin/nginx-init-ubuntu##------------------------------------------------------------------------------# MIT X11 License#------------------------------------------------------------------------------## Copyright (c) 2008-2013 Jason Giedymin, http://jasongiedymin.com## Permission is hereby granted, free of charge, to any person obtaining# a copy of this software and associated documentation files (the# "Software"), to deal in the Software without restriction, including# without limitation the rights to use, copy, modify, merge, publish,# distribute, sublicense, and/or sell copies of the Software, and to# permit persons to whom the Software is furnished to do so, subject to# the following conditions:## The above copyright notice and this permission notice shall be# included in all copies or substantial portions of the Software.## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.#------------------------------------------------------------------------------#------------------------------------------------------------------------------# Functions#------------------------------------------------------------------------------LSB_FUNC=/lib/lsb/init-functions# Test that init functions existstest -r $LSB_FUNC || { echo "$0: Cannot find $LSB_FUNC! Script exiting." 1>&2 exit 5}. $LSB_FUNC#------------------------------------------------------------------------------# Consts#------------------------------------------------------------------------------PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin #更改此处DAEMON=/usr/local/nginx/sbin/nginx #更改此处PS="nginx"PIDNAME="nginx" #lets you do $PS-slavePIDFILE=$PIDNAME.pid #pid filePIDSPATH=/usr/local/nginx/logs #default pid location, you should change it更改DESCRIPTION="Nginx Server..."RUNAS=root #user to run asSCRIPT_OK=0 #ala error codesSCRIPT_ERROR=1 #ala error codesTRUE=1 #booleanFALSE=0 #booleanlockfile=/var/lock/subsys/nginxNGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf" #如有需要,更改此处#------------------------------------------------------------------------------# Simple Tests#------------------------------------------------------------------------------# Test if nginx is a file and executabletest -x $DAEMON || { echo "$0: You don't have permissions to execute nginx." 1>&2 exit 4}# Include nginx defaults if availableif [ -f /etc/default/nginx ]; then . /etc/default/nginxfi#set exit condition#set -e#------------------------------------------------------------------------------# Functions#------------------------------------------------------------------------------setFilePerms(){ if [ -f $PIDSPATH/$PIDFILE ]; then chmod 400 $PIDSPATH/$PIDFILE fi}configtest() { $DAEMON -t -c $NGINX_CONF_FILE}getPSCount() { return `pgrep -f $PS | wc -l`}isRunning() { if [ $1 ]; then pidof_daemon $1 PID=$? if [ $PID -gt 0 ]; then return 1 else return 0 fi else pidof_daemon PID=$? if [ $PID -gt 0 ]; then return 1 else return 0 fi fi}#courtesy of php-fpmwait_for_pid () { try=0 while test $try -lt 35 ; do case "$1" in 'created') if [ -f "$2" ]; then try='' break fi ;; 'removed') if [ ! -f "$2" ]; then try='' break fi ;; esac try=`expr $try + 1` sleep 1 done}status(){ isRunning isAlive=$? if [ "${isAlive}" -eq $TRUE ]; then log_warning_msg "$DESCRIPTION found running with processes: `pidof $PS`" rc=0 else log_warning_msg "$DESCRIPTION is NOT running." rc=3 fi return}removePIDFile(){ if [ $1 ]; then if [ -f $1 ]; then rm -f $1 fi else #Do default removal if [ -f $PIDSPATH/$PIDFILE ]; then rm -f $PIDSPATH/$PIDFILE fi fi}start() { log_daemon_msg "Starting $DESCRIPTION" isRunning isAlive=$? if [ "${isAlive}" -eq $TRUE ]; then log_end_msg $SCRIPT_ERROR rc=0 else start-stop-daemon --start --quiet --chuid \ $RUNAS --pidfile $PIDSPATH/$PIDFILE --exec $DAEMON \ -- -c $NGINX_CONF_FILE setFilePerms log_end_msg $SCRIPT_OK rc=0 fi return}stop() { log_daemon_msg "Stopping $DESCRIPTION" isRunning isAlive=$? if [ "${isAlive}" -eq $TRUE ]; then start-stop-daemon --stop --quiet --pidfile $PIDSPATH/$PIDFILE wait_for_pid 'removed' $PIDSPATH/$PIDFILE if [ -n "$try" ]; then log_end_msg $SCRIPT_ERROR rc=0 # lsb states 1, but under status it is 2 (which is more prescriptive). Deferring to standard. else removePIDFile log_end_msg $SCRIPT_OK rc=0 fi else log_end_msg $SCRIPT_ERROR rc=7 fi return}reload() { configtest || return $? log_daemon_msg "Reloading (via HUP) $DESCRIPTION" isRunning if [ $? -eq $TRUE ]; then kill -HUP `cat $PIDSPATH/$PIDFILE` log_end_msg $SCRIPT_OK rc=0 else log_end_msg $SCRIPT_ERROR rc=7 fi return}quietupgrade() { log_daemon_msg "Peforming Quiet Upgrade $DESCRIPTION" isRunning isAlive=$? if [ "${isAlive}" -eq $TRUE ]; then kill -USR2 `cat $PIDSPATH/$PIDFILE` kill -WINCH `cat $PIDSPATH/$PIDFILE.oldbin` isRunning isAlive=$? if [ "${isAlive}" -eq $TRUE ]; then kill -QUIT `cat $PIDSPATH/$PIDFILE.oldbin` wait_for_pid 'removed' $PIDSPATH/$PIDFILE.oldbin removePIDFile $PIDSPATH/$PIDFILE.oldbin log_end_msg $SCRIPT_OK rc=0 else log_end_msg $SCRIPT_ERROR log_daemon_msg "ERROR! Reverting back to original $DESCRIPTION" kill -HUP `cat $PIDSPATH/$PIDFILE` kill -TERM `cat $PIDSPATH/$PIDFILE.oldbin` kill -QUIT `cat $PIDSPATH/$PIDFILE.oldbin` wait_for_pid 'removed' $PIDSPATH/$PIDFILE.oldbin removePIDFile $PIDSPATH/$PIDFILE.oldbin log_end_msg $SCRIPT_OK rc=0 fi else log_end_msg $SCRIPT_ERROR rc=7 fi return}terminate() { log_daemon_msg "Force terminating (via KILL) $DESCRIPTION" PIDS=`pidof $PS` || true [ -e $PIDSPATH/$PIDFILE ] && PIDS2=`cat $PIDSPATH/$PIDFILE` for i in $PIDS; do if [ "$i" = "$PIDS2" ]; then kill $i wait_for_pid 'removed' $PIDSPATH/$PIDFILE removePIDFile fi done log_end_msg $SCRIPT_OK rc=0}destroy() { log_daemon_msg "Force terminating and may include self (via KILLALL) $DESCRIPTION" killall $PS -q >> /dev/null 2>&1 log_end_msg $SCRIPT_OK rc=0}pidof_daemon() { PIDS=`pidof $PS` || true [ -e $PIDSPATH/$PIDFILE ] && PIDS2=`cat $PIDSPATH/$PIDFILE` for i in $PIDS; do if [ "$i" = "$PIDS2" ]; then return 1 fi done return 0}action="$1"case "$1" in start) start ;; stop) stop ;; restart|force-reload) stop # if [ $rc -ne 0 ]; then # script_exit # fi sleep 1 start ;; reload) $1 ;; status) status ;; configtest) $1 ;; quietupgrade) $1 ;; terminate) $1 ;; destroy) $1 ;; *) FULLPATH=/etc/init.d/$PS echo "Usage: $FULLPATH {start|stop|restart|force-reload|status|configtest|quietupgrade|terminate|destroy}" echo " The 'destroy' command should only be used as a last resort." exit 3 ;;esacexit $rc

 

授予执行权限

1
2
chmod 
+x 
/etc/init
.d
/nginx
chkconfig nginx --level 345 on

添加开机启动( Ubuntu版本),service nginx start后

sudo update-rc.d -f nginx defaults

 

三.测试

3.1 用浏览器访问主机80端口

 

出现如图所示界面即表示Tengine安装完成!

 

反向代理配置

#user  nobody;worker_processes  2;#error_log  logs/error.log;#error_log  logs/error.log  notice;#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {    worker_connections  1024;}# load modules compiled as Dynamic Shared Object (DSO)##dso {#    load ngx_http_fastcgi_module.so;#    load ngx_http_rewrite_module.so;#}http {    include       mime.types;    default_type  application/octet-stream;    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '    #                  '$status $body_bytes_sent "$http_referer" '    #                  '"$http_user_agent" "$http_x_forwarded_for"';    #access_log  logs/access.log  main;    sendfile        on;    #tcp_nopush     on;    #keepalive_timeout  0;    keepalive_timeout  65;    fastcgi_send_timeout 300;    fastcgi_read_timeout 300;    #gzip  on;    server {        listen       80;        server_name  localhost;        #charset koi8-r;        #access_log  logs/host.access.log  main;        access_log  /data/logs/host.access.log;        error_log  /data/logs/host.error.log;       # location / {       #     root   html;       #     index  index.html index.htm;       # }        location / {            root   /data/www/;            index  index.html index.htm;            concat on;            concat_max_files 20;        }        proxy_ignore_client_abort on;        # demo        location ^~ /demo{            proxy_set_header X-Real-IP $remote_addr;            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;            proxy_set_header Host $http_host;            proxy_set_header X-NginX-Proxy true;            rewrite /demo/(.+)$ /$1 break;            proxy_pass http://localhost:8080;            access_log  /data/logs/demo.access.log;        }        #error_page  404              /404.html;        # redirect server error pages to the static page /50x.html        #        error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }        # proxy the PHP scripts to Apache listening on 127.0.0.1:80        #        #location ~ \.php$ {        #    proxy_pass   http://127.0.0.1;        #}        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000        #        #location ~ \.php$ {        #    root           html;        #    fastcgi_pass   127.0.0.1:9000;        #    fastcgi_index  index.php;        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;        #    include        fastcgi_params;        #}        # deny access to .htaccess files, if Apache's document root        # concurs with nginx's one        #        #location ~ /\.ht {        #    deny  all;        #}    }    # another virtual host using mix of IP-, name-, and port-based configuration    #    #server {    #    listen       8000;    #    listen       somename:8080;    #    server_name  somename  alias  another.alias;    #    location / {    #        root   html;    #        index  index.html index.htm;    #    }    #}    # HTTPS server    #    #server {    #    listen       443 ssl;    #    server_name  localhost;    #    ssl_certificate      cert.pem;    #    ssl_certificate_key  cert.key;    #    ssl_session_cache    shared:SSL:1m;    #    ssl_session_timeout  5m;    #    ssl_ciphers  HIGH:!aNULL:!MD5;    #    ssl_prefer_server_ciphers  on;    #    location / {    #        root   html;    #        index  index.html index.htm;    #    }    #}}

 

转载于:https://www.cnblogs.com/liubei/p/Tengine.html

你可能感兴趣的文章
linux怎么不输入路径直接运行程序脚本
查看>>
日志信息log
查看>>
扩大VMware虚拟机中CentOS 7的硬盘空间
查看>>
BZOJ2005:[NOI2010]能量采集(莫比乌斯反演,欧拉函数)
查看>>
前端工程师的价值
查看>>
Springboot如何利用http请求控制器
查看>>
node.js中的http.response.end方法使用说明
查看>>
会议2.1
查看>>
zzuli OJ 1905: 小火山的跳子游戏 【GCD】
查看>>
Asp.Net 常用代码-备用
查看>>
Android Studio代码调试大全
查看>>
记一次virtualbox和夜神模拟器冲突的问题
查看>>
面向对象之多态、多态性
查看>>
简单标签-JspFragment和invoke()方法
查看>>
【原创】驱动卸载之ControlService函数
查看>>
1578: [Usaco2009 Feb]Stock Market 股票市场
查看>>
前端基本功(七):javascript中的继承(原型、原型链、继承的实现方式)
查看>>
原生的Ajax实现
查看>>
收集的几个jQuery插件
查看>>
java SSM 框架 微信自定义菜单 快递接口 SpringMVC mybatis redis shiro ehcache websocket
查看>>