Nginx 和 tengine 介绍以及配置

Nginx 和 tengine

•Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,

•其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:新浪、网易、腾讯等。

•功能:
–web服务器
–web reverse proxy
smtp
reverse proxy
Nginx和apache的优缺点
–1、nginx相对于apache的优点:
轻量级,同样起web 服务,比apache 占用更少的内存及资源
抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
高度模块化的设计,编写模块相对简单
社区活跃,各种高性能模块出品迅速啊
–2.apache 相对于nginx 的优点:
rewrite ,比nginx 的rewrite 强大
模块超多,基本想到的都可以找到
少bug ,nginx 的bug 相对较多
–3、Nginx 配置简洁, Apache 复杂
–4、最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程

Tengine 是nginx的加强版,封装版,淘宝开源
–官网http://tengine.taobao.org/
–动态模块加载(DSO)支持。加入一个模块不再需要重新编译整个Tengine;
–支持SO_REUSEPORT选项,建连性能提升为官方nginx的三倍;
–支持SPDY v3协议,自动检测同一端口的SPDY请求和HTTP请求;
–流式上传到HTTP后端服务器或FastCGI服务器,大量减少机器的I/O压力;
–更加强大的负载均衡能力,包括一致性hash模块、会话保持模块,还可以对后端的服务器进行主动健康检查,根据服务器状态自动上线下线,以及动态解析upstream中出现的域名;
–输入过滤器机制支持。通过使用这种机制Web应用防火墙的编写更为方便;
–支持设置proxy、memcached、fastcgi、scgi、uwsgi在后端失败时的重试次数
–动态脚本语言Lua支持。扩展功能非常高效简单;
–支持管道(pipe)和syslog(本地和远端)形式的日志以及日志抽样;
–支持按指定关键字(域名,url等)收集Tengine运行状态;
–组合多个CSS、JavaScript文件的访问请求变成一个请求;
–自动去除空白字符和注释从而减小页面的体积

写入nginx的服务文件
功能:
web服务器
web reverse proxy
smtp reverse proxy

安装之前准备
1、依赖 gcc openssl-devel pcre-devel zlib-devel
安装:yum install gcc openssl-devel pcre-devel zlib-devel
2、创建用户和用户组。为了方便nginx运行而不影响linux安全
创建组:groupadd -r nginx
创建用户:useradd -r -g nginx -M nginx
-M 表示不创建用户的家目录。

安装Nginx
./configure
–prefix=/usr/tengine-2.1

make && make install
进入到 /etc/init.d/ 创建一个 tengine的文件 修改 权限 chmod +x tengine
然后将tengine的配置 复制到里面
#!/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/conf/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/tengine-2.1/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/etc/nginx/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 N G I N X C O N F F I L E r e t v a l = NGINX_CONF_FILE retval= NGINXCONFFILEretval=?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}

stop() {
echo -n $"Stopping $prog: "
killproc p r o g − Q U I T r e t v a l = prog -QUIT retval= progQUITretval=?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}

restart() {
configtest || return $?
stop
sleep 1
start
}

reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc n g i n x − H U P R E T V A L = nginx -HUP RETVAL= nginxHUPRETVAL=?
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

进入到nginx.conf文件里去
vim /usr/tengine-2.1/conf/nginx.conf

nginx 是支持热部署 热升级

1、修改nginx文件的执行权限
• chmod +x nginx
2、添加该文件到系统服务中去
• chkconfig --add nginx
3 查看是否添加成功
• chkconfig --list nginx

启动,停止,重新装载
•service nginx start|stop|reload

工作模式与连接数上限
•events
•{
•#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
•use epoll;
•#单个进程最大连接数(最大连接数=连接数*进程数)
•worker_connections 65535;
•}
event下的一些配置及其意义
–# 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右
– # 我们来看看360M内存的VPS可以打开的文件句柄数是多少:
– # $ cat /proc/sys/fs/file-max
– # 输出 34336
– # 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
– # 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置
– # 使得并发总数小于操作系统可以打开的最大文件数目
– # 其实质也就是根据主机的物理CPU和内存进行配置
– # 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。

linux系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右
但这个10w 并不是一个文件都打开完 要有分配

查看linux可以打开的文件描述符
ulimit -a

设置 文件最大打开数
ulimit -SHn 65535 (设置一个比较合适的数字 不能太大)

nginx.conf配置文件
–#定义Nginx运行的用户和用户组
–user www www;

–#nginx进程数,建议设置为等于CPU总核心数。
–worker_processes 8;

–#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
–error_log /var/log/nginx/error.log info;

–#进程文件
–pid /var/run/nginx.pid;

–#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。
–worker_rlimit_nofile 65535;

max_clients = worker_processes * worker_connections / 4

http下的一些配置及其意义
–#设定http服务器
–http
–{
–include mime.types; #文件扩展名与文件类型映射表
–default_type application/octet-stream; #默认文件类型
–#charset utf-8; #默认编码
–server_names_hash_bucket_size 128; #服务器名字的hash表大小
–client_header_buffer_size 32k; #上传文件大小限制
–large_client_header_buffers 4 64k; #设定请求缓
–client_max_body_size 8m; #设定请求缓
–sendfile on; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
–autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。
–tcp_nopush on; #防止网络阻塞
–tcp_nodelay on; #防止网络阻塞
keepalive_timeout 120; #长连接超时时间,单位是秒

gzip的一些配置及其意义

–#gzip模块设置
gzip on; #开启gzip压缩输出
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区
gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 2; #压缩等级
gzip_types text/plain application/x-javascript text/css application/xml;
#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用

什么是虚拟主机
虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主机,每个虚拟主机可以独立对外提供www服务,这样就可以实现一台主机对外提供多个web服务,每个虚拟主机之间是独立的,互不影响的

虚拟主机一些配置及其意义
–#虚拟主机的配置
server
{
#监听端口
listen 80;
#域名可以有多个,用空格隔开
server_name www.ha97.com ha97.com;
index index.html index.htm index.jsp;
root /data/www/ha97;
location ~ .*.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.jsp;
include fastcgi.conf;
}

通过nginx可以实现虚拟主机的配置,nginx支持三种类型的虚拟主机配置,
–1、基于ip的虚拟主机, (一块主机绑定多个ip地址)
–2、基于域名的虚拟主机(servername)
–3、基于端口的虚拟主机(listen如果不写ip端口模式)
–示例基于虚拟机ip的配置,这里需要配置多个ip
–server
–{
– listen 192.168.20.20:80;
– server_name www.linuxidc.com;
– root /data/www;
–}
–server
–{
– listen 192.168.20.21:80;
– server_name www.linuxidc.com;
– root /data/www;
–}
虚拟主机端口
–server
–{
– listen 192.168.20.20:80;
– server_name www.linuxidc.com;
– root /data/www;
–}
–server
–{
– listen 192.168.20.20:8090;
– server_name www.linuxidc.com;
– root /data/www;
–}
虚拟主机
1、网址名称对应(Name-based)
网址名称对应(Name-based)是借由识别客户端所以提供的网址,决定其所对应的服务,这个方法有效的减少IP地址的占用,但缺点是必须仰赖DNS名称对应服务的支持,若名称对应服务中断,对应此名称的服务也会无法取用。
2、IP地址对应(IP-based)
IP地址对应(IP-based)是指在同一部服务器上,借由同一份配置设置、不同的IP来管理多个服务。
3、Port端口号对应(Port-based)
近似于IP地址对应,不过是在同一个IP之下,利用不同的Port端口号来区别不同的服务,藉以快速创建多个虚拟主机。例如:
192.168.0.1:80
192.168.0.1:8080
192.168.0.1:8888
nginx.conf下的配置
–http{
–server{
– #表示一个虚拟主机
–}
–}

location 映射(ngx_http_core_module)
– location [ = | ~ | ~* | ^~ ] uri { … }
– location URI {}:
– 对当前路径及子路径下的所有对象都生效;
– location = URI {}: 注意URL最好为具体路径。
– 精确匹配指定的路径,不包括子路径,因此,只对当前资源生效;
– location ~ URI {}:
– location ~* URI {}:
– 模式匹配URI,此处的URI可使用正则表达式,区分字符大小写,不区分字符大小写;
– location ^~ URI {}:
– 不使用正则表达式
– 优先级:= > ^~ > |
> /|/dir/

nginx 收到请求头:判定ip,port,hosts决定server
nginx location匹配:用客户端的uri匹配location的uri

location配置规则
–先普通
–顺序无关
–最大前缀
–匹配规则简单
•打断:
–^~
–完全匹配
–再正则
•不完全匹配
•正则特殊性:一条URI可以和多条location匹配上
•有顺序的
•先匹配,先应用,即时退出匹配
如果没有打断 是先普通再正则 正则匹配上 就使用正则的 正则匹配不上 才使用普通的 如果普通 有^~ 或者完全匹配 就直接使用 普通的

请求头
–host:决策server负责处理
–uri:决策location
–反向代理:proxy_pass ip:port[uri];

Nginx和高并发

IP访问控制
–location {
– deny IP /IP段
– deny 192.168.1.109;
– allow 192.168.1.0/24;192.168.0.0/16;192.0.0.0/8
– }
–规则:按照顺序依次检测,直到匹配到第一条规则

用户认证访问
–模块ngx_http_auth_basic_module 允许使用“HTTP基本认证”协议验证用户名和密码来限制对资源的访问。
– location / {
– auth_basic “closed site”;
– auth_basic_user_file /var/users;
– }
–Apache发行包中的htpasswd命令来创建user_file 文件

–要通过yum –y install httpd
–htpasswd -c -m /var/users username

–注:需要安装httpd才可以使用上面命令

nginx访问状态监控
–location /basic_status {
– stub_status on;
–}

什么是反向代理?
•通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理服务器向Internet上的web服务器发起请求,最终达到客户机上网的目的。

•反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tengine是一个基于Nginx的Web服务器,具有高性能和高可靠性。如果您想将Tengine用作代理服务器,可以使用以下步骤进行单机代理替换Nginx: 1. 安装Tengine 请根据您的操作系统在Tengine官方网站下载适当的二进制文件,并按照说明进行安装。 2. 配置Tengine Tengine配置文件与Nginx配置文件类似。您需要根据您的需求修改Tengine配置文件。通常,您需要修改Tengine的监听端口、代理目标地址和代理请求头等。 3. 启动Tengine 在修改完配置文件后,您可以通过Tengine的命令行工具启动Tengine。如果一切正常,您将看到Tengine已经开始了工作。 如果您想将Tengine用作集群代理服务器,可以使用以下步骤进行Nginx替换: 1. 安装Tengine 您需要在所有服务器上安装Tengine。请根据您的操作系统在Tengine官方网站下载适当的二进制文件,并按照说明进行安装。 2. 配置Tengine 与单机代理类似,您需要根据您的需求修改Tengine配置文件。不同之处在于,您需要将所有Tengine实例的配置文件保持一致。 3. 配置负载均衡 您需要使用Tengine或其他负载均衡软件配置所有Tengine实例的负载均衡。负载均衡软件可以根据不同的负载均衡算法选择最佳的Tengine实例。 4. 启动Tengine 在修改完配置文件后,您可以通过Tengine的命令行工具启动所有Tengine实例。如果一切正常,您将看到所有Tengine实例已经开始了工作,并且负载均衡软件已经开始工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值