热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Tengine/Nginx安装

原文出处:http:my.oschina.netliuhuan0927blog604663一.Tengine是什么简介Tengine是由淘宝网发起的Web服务器项目。

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

一.Tengine是什么

简介

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

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

特性

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

  • 动态模块加载(DSO)支持。加入一个模块不再需要重新编译整个Tengine;

  • 支持SO_REUSEPORT选项,建连性能提升为官方nginx的三倍;

  • 同时支持HTTP v2协议和SPDY v3协议,可同时使用两种协议;

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

  • 更加强大的负载均衡能力,包括一致性hash模块、会话保持模块,还可以对后端的服务器进行主动健康检查,根据服务器状态自动上线下线,以及动态解析upstream中出现的域名;

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

  • 支持设置proxy、memcached、fastcgi、scgi、uwsgi在后端失败时的重试次数

  • 动态脚本语言Lua支持。扩展功能非常高效简单;

  • 支持管道(pipe)和syslog(本地和远端)形式的日志以及日志抽样;

  • 支持按指定关键字(域名,url等)收集Tengine运行状态;

  • 组合多个CSS、Javascript文件的访问请求变成一个请求;

  • 自动去除空白字符和注释从而减小页面的体积

  • 自动根据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开机启动

centos版本
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 <
#!/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&#39;s not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd&#61;/usr/local/nginx/sbin/nginx
nginx_config&#61;/usr/local/nginx/conf/nginx.conf
nginx_pid&#61;/usr/local/nginx/logs/nginx.pid
RETVAL&#61;0
prog&#61;"nginx"
# Source function library.
.  /etc/rc.d/init.d/functions
# Source networking configuration.
.  /etc/sysconfig/network
# Check that networking is up.
[ \${NETWORKING} &#61; "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&#61;$?
echo
[ \$RETVAL &#61; 0 ] && touch /var/lock/subsys/nginx
return \$RETVAL
}
# Stop nginx daemons functions.
stop() {
echo -n $"Stopping \$prog: "
killproc \$nginxd
RETVAL&#61;\$?
echo
[ \$RETVAL &#61; 0 ] && rm -f /var/lock/subsys/nginx /usr/local/nginx/logs/nginx.pid
}
reload() {
echo -n $"Reloading \$prog: "
#kill -HUP &#96;cat \${nginx_pid}&#96;
killproc \$nginxd -HUP
RETVAL&#61;\$?
echo
}
# See how we were called.
case "\$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
status)
status \$prog
RETVAL&#61;\$?
;;
*)
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
&#39;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
&#39;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
&#61;/lib/lsb/init-functions# Test that init functions exists
test
-r $LSB_FUNC || {echo "$0: Cannot find $LSB_FUNC! Script exiting." 1>&2exit 5
}. $LSB_FUNC#
------------------------------------------------------------------------------
# Consts
#
------------------------------------------------------------------------------
PATH
&#61;/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin #更改此处
DAEMON
&#61;/usr/local/nginx/sbin/nginx #更改此处PS&#61;"nginx"
PIDNAME
&#61;"nginx" #lets you do $PS-slave
PIDFILE
&#61;$PIDNAME.pid #pid file
PIDSPATH
&#61;/usr/local/nginx/logs #default pid location, you should change it更改DESCRIPTION&#61;"Nginx Server..."RUNAS&#61;root #user to run asSCRIPT_OK&#61;0 #ala error codes
SCRIPT_ERROR
&#61;1 #ala error codes
TRUE
&#61;1 #boolean
FALSE
&#61;0 #booleanlockfile&#61;/var/lock/subsys/nginx
NGINX_CONF_FILE
&#61;"/usr/local/nginx/conf/nginx.conf" #如有需要&#xff0c;更改此处#------------------------------------------------------------------------------
# Simple Tests
#
------------------------------------------------------------------------------# Test if nginx is a file and executable
test
-x $DAEMON || {echo "$0: You don&#39;t have permissions to execute nginx." 1>&2exit 4
}# Include nginx defaults
if available
if [ -f /etc/default/nginx ]; then. /etc/default/nginx
fi#set exit condition
#set
-e#------------------------------------------------------------------------------
# Functions
#
------------------------------------------------------------------------------setFilePerms(){if [ -f $PIDSPATH/$PIDFILE ]; thenchmod 400 $PIDSPATH/$PIDFILEfi
}configtest() {$DAEMON
-t -c $NGINX_CONF_FILE
}getPSCount() {return &#96;pgrep
-f $PS | wc -l&#96;
}isRunning() {
if [ $1 ]; thenpidof_daemon $1PID&#61;$?if [ $PID -gt 0 ]; thenreturn 1elsereturn 0fielsepidof_daemonPID&#61;$?if [ $PID -gt 0 ]; thenreturn 1elsereturn 0fifi
}#courtesy of php
-fpm
wait_for_pid () {try
&#61;0while test $try -lt 35 ; docase "$1" in&#39;created&#39;)if [ -f "$2" ]; thentry&#61;&#39;&#39;breakfi;;&#39;removed&#39;)if [ ! -f "$2" ]; thentry&#61;&#39;&#39;breakfi;;esactry&#61;&#96;expr $try &#43; 1&#96;sleep 1done
}status(){isRunningisAlive
&#61;$?if [ "${isAlive}" -eq $TRUE ]; thenlog_warning_msg "$DESCRIPTION found running with processes: &#96;pidof $PS&#96;"rc&#61;0elselog_warning_msg "$DESCRIPTION is NOT running."rc&#61;3fireturn
}removePIDFile(){
if [ $1 ]; thenif [ -f $1 ]; thenrm -f $1fielse#Do default removalif [ -f $PIDSPATH/$PIDFILE ]; thenrm -f $PIDSPATH/$PIDFILEfifi
}start() {log_daemon_msg
"Starting $DESCRIPTION"isRunningisAlive&#61;$?if [ "${isAlive}" -eq $TRUE ]; thenlog_end_msg $SCRIPT_ERRORrc&#61;0elsestart-stop-daemon --start --quiet --chuid \$RUNAS --pidfile $PIDSPATH/$PIDFILE --exec $DAEMON \-- -c $NGINX_CONF_FILEsetFilePermslog_end_msg $SCRIPT_OKrc&#61;0fireturn
}stop() {log_daemon_msg
"Stopping $DESCRIPTION"isRunningisAlive&#61;$?if [ "${isAlive}" -eq $TRUE ]; thenstart-stop-daemon --stop --quiet --pidfile $PIDSPATH/$PIDFILEwait_for_pid &#39;removed&#39; $PIDSPATH/$PIDFILEif [ -n "$try" ]; thenlog_end_msg $SCRIPT_ERRORrc&#61;0 # lsb states 1, but under status it is 2 (which is more prescriptive). Deferring to standard.elseremovePIDFilelog_end_msg $SCRIPT_OKrc&#61;0fielselog_end_msg $SCRIPT_ERRORrc&#61;7fireturn
}reload() {configtest
|| return $?log_daemon_msg "Reloading (via HUP) $DESCRIPTION"isRunningif [ $? -eq $TRUE ]; thenkill -HUP &#96;cat $PIDSPATH/$PIDFILE&#96;log_end_msg $SCRIPT_OKrc&#61;0elselog_end_msg $SCRIPT_ERRORrc&#61;7fireturn
}quietupgrade() {log_daemon_msg
"Peforming Quiet Upgrade $DESCRIPTION"isRunningisAlive&#61;$?if [ "${isAlive}" -eq $TRUE ]; thenkill -USR2 &#96;cat $PIDSPATH/$PIDFILE&#96;kill -WINCH &#96;cat $PIDSPATH/$PIDFILE.oldbin&#96;isRunningisAlive&#61;$?if [ "${isAlive}" -eq $TRUE ]; thenkill -QUIT &#96;cat $PIDSPATH/$PIDFILE.oldbin&#96;wait_for_pid &#39;removed&#39; $PIDSPATH/$PIDFILE.oldbinremovePIDFile $PIDSPATH/$PIDFILE.oldbinlog_end_msg $SCRIPT_OKrc&#61;0elselog_end_msg $SCRIPT_ERRORlog_daemon_msg "ERROR! Reverting back to original $DESCRIPTION"kill -HUP &#96;cat $PIDSPATH/$PIDFILE&#96;kill -TERM &#96;cat $PIDSPATH/$PIDFILE.oldbin&#96;kill -QUIT &#96;cat $PIDSPATH/$PIDFILE.oldbin&#96;wait_for_pid &#39;removed&#39; $PIDSPATH/$PIDFILE.oldbinremovePIDFile $PIDSPATH/$PIDFILE.oldbinlog_end_msg $SCRIPT_OKrc&#61;0fielselog_end_msg $SCRIPT_ERRORrc&#61;7fireturn
}terminate() {log_daemon_msg
"Force terminating (via KILL) $DESCRIPTION"PIDS&#61;&#96;pidof $PS&#96; || true[ -e $PIDSPATH/$PIDFILE ] && PIDS2&#61;&#96;cat $PIDSPATH/$PIDFILE&#96;for i in $PIDS; doif [ "$i" &#61; "$PIDS2" ]; thenkill $iwait_for_pid &#39;removed&#39; $PIDSPATH/$PIDFILEremovePIDFilefidonelog_end_msg $SCRIPT_OKrc&#61;0
}destroy() {log_daemon_msg
"Force terminating and may include self (via KILLALL) $DESCRIPTION"killall $PS -q >> /dev/null 2>&1log_end_msg $SCRIPT_OKrc&#61;0
}pidof_daemon() {PIDS
&#61;&#96;pidof $PS&#96; || true[ -e $PIDSPATH/$PIDFILE ] && PIDS2&#61;&#96;cat $PIDSPATH/$PIDFILE&#96;for i in $PIDS; doif [ "$i" &#61; "$PIDS2" ]; thenreturn 1fidonereturn 0
}action
&#61;"$1"
case "$1" instart)start;;stop)stop;;restart|force-reload)stop# if [ $rc -ne 0 ]; then# script_exit# fisleep 1start;;reload)$1;;status)status;;configtest)$1;;quietupgrade)$1;;terminate)$1;;destroy)$1;;*)FULLPATH&#61;/etc/init.d/$PSecho "Usage: $FULLPATH {start|stop|restart|force-reload|status|configtest|quietupgrade|terminate|destroy}"echo " The &#39;destroy&#39; command should only be used as a last resort." exit 3;;
esacexit $rc

 

授予执行权限

?
1
2
chmod &#43;x /etc/init.d/nginx
chkconfig nginx --level 345 on

添加开机启动&#xff08; Ubuntu版本&#xff09;,service nginx start后

sudo update-rc.d -f nginx defaults

 

三.测试

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

 

出现如图所示界面即表示Tengine安装完成&#xff01;

 

反向代理配置

#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 &#39;$remote_addr - $remote_user [$time_local] "$request" &#39;# &#39;$status $body_bytes_sent "$http_referer" &#39;# &#39;"$http_user_agent" "$http_x_forwarded_for"&#39;;#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;# demolocation ^~ /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/(.&#43;)$ /$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 &#61; /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&#39;s document root# concurs with nginx&#39;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



推荐阅读
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 集成电路企业在进行跨隔离网数据交换时面临着安全性问题,传统的数据交换方式存在安全性堪忧、效率低下等问题。本文以《Ftrans跨网文件安全交换系统》为例,介绍了如何通过丰富的审批流程来满足企业的合规要求,保障数据交换的安全性。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • nginx+多个tomcat
    学习nginx的时候遇到的问题:nginx怎么部署两台tomcat?upstream在网上找的资源,我在nginx配置文件(nginx.conf)中添加了两个server。结果只显 ... [详细]
  • 构建LNMP架构平台
    LNMP架构的组成:Linux、Nginx、MySQL、PHP关于NginxNginx与apache的作用一样,都是为了搭建网站服务器,由俄罗斯人lgorsysoev开发,其特点是 ... [详细]
  • redis知识汇总[随笔记录]
      ... [详细]
author-avatar
筷子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有