tengine 淘宝 nginx,
tengine 淘宝 nginx,
Nginx Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。 2011年6月1日,nginx 1.0.4发布。 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器, 并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发, 其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用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 \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_flv_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/tmp/nginx/client/ \ --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ --http-scgi-temp-path=/var/tmp/nginx/scgi \ --with-pcre
make && make install
配置Nginx为系统服务,以方便管理 1、在/etc/rc.d/init.d/目录中建立文本文件nginx -------> lrwxrwxrwx. 1 root root 11 May 7 22:28 /etc/init.d -> /etc/rc.d/init.d 2、在文件中粘贴下面的内容: #!/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/sbin/nginx" prog=$(basename $nginx)
NGINX_CONF_FILE="/etc/nginx/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
3、修改nginx文件的执行权限 chmod +x nginx 4、添加该文件到系统服务中去 chkconfig --add nginx 查看是否添加成功 chkconfig --list nginx
启动,停止,重新装载 service nginx start|stop
chkconfig nginx on
nginx是多进程,主从结构。一个主(master)进程多个从(worker)进程
配置文件
#运行用户 user nobody; #启动进程,通常设置成和cpu(核心)的数量相等 worker_processes 1;
#全局错误日志及PID文件 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;
#pid logs/nginx.pid;
#工作模式及连接数上限 events { #epoll是多路复用IO(I/O Multiplexing)中的一种方式, #仅用于linux2.6以上内核,可以大大提高nginx的性能 use epoll;
#单个后台worker process进程的最大并发链接数 worker_connections 1024;
# 并发总数是 worker_processes 和 worker_connections 的乘积 # 即 max_clients = worker_processes * worker_connections # 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4 为什么 # 为什么上面反向代理要除以4,应该说是一个经验值 # 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000 # worker_connections 值的设置跟物理内存大小有关 # 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数 # 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右 # 我们来看看360M内存的VPS可以打开的文件句柄数是多少: # $ cat /proc/sys/fs/file-max # 输出 34336 # 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内 # 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置 # 使得并发总数小于操作系统可以打开的最大文件数目 # 其实质也就是根据主机的物理CPU和内存进行配置 # 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。 # ulimit -SHn 65535
}
http { #设定mime类型,类型由mime.type文件定义 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 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件, #对于普通应用,必须设为 on, #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off, #以平衡磁盘与网络I/O处理速度,降低系统的uptime. sendfile on; #tcp_nopush on;
#连接超时时间 #keepalive_timeout 0; keepalive_timeout 65; tcp_nodelay on;
#开启gzip压缩 gzip on; gzip_disable "MSIE [1-6].";
#设定请求缓冲 client_header_buffer_size 128k; large_client_header_buffers 4 128k;
#设定虚拟主机配置 server { #侦听80端口 listen 80; #定义使用 www.nginx.cn访问 server_name www.nginx.cn;
#定义服务器的默认网站根目录位置 root html;
#设定本虚拟主机的访问日志 access_log logs/nginx.access.log main;
#默认请求 location / {
#定义首页索引文件的名称 index index.php index.html index.htm;
}
# 定义错误提示页面 error_page 500 502 503 504 /50x.html; location = /50x.html { }
#静态文件,nginx自己处理 location ~ ^/(images|javascript|js|css|flash|media|static)/ {
#过期30天,静态文件不怎么更新,过期可以设大一点, #如果频繁更新,则可以设置得小一点。 expires 30d; }
#PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置. location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
#禁止访问 .htxxx 文件 location ~ /.ht { deny all; }
} }
htttp{
server{ #表示一个虚拟主机 } }
location 映射 location [ = | ~ | ~* | ^~ ] uri { ... }
location URI {}: 对当前路径及子路径下的所有对象都生效;
location = URI {}: 必须执行一个具体文件路径(不能使用目录) 精确匹配指定的路径,不包括子路径,因此,只对当前资源生效;
location ~ URI {}: location ~* URI {}: 模式匹配URI,此处的URI可使用正则表达式,~区分字符大小写,~*不区分字符大小写;
location ^~ URI {}: 不使用正则表达式
优先级:= > ^~ > ~|~* > /|/dir/
访问控制 IP访问控制 location { deny IP /IP段 deny 192.168.1.109; allow 192.168.1.0/24; }
用户认证访问
模块ngx_http_auth_basic_module 允许使用“HTTP基本认证”协议验证用户名和密码来限制对资源的访问。 location / { auth_basic "closed site"; # ""closes site 是任意字符,展示在页面上 auth_basic_user_file /var/users; } Apache发行包中的htpasswd命令来创建user_file 文件 htpasswd -c -m /var/users username
autoindex 在浏览器中列出当前目录的文件索引 autoindex on;
启用访问状态模块 location /status{ stub_status on; }
虚拟主机 一个server{} 就是一个虚拟主机 基于域名
反向代理: proxy_pass
1、自动监测当机 2、自动心跳
upstream 名字 { server IP:PORT; server IP:PORT; }
server { location / { proxy_pass http://名字;
}
}
location [op] URI { proxy_pass http://192.168.100.11/; } 比如: location /forum/ { proxy_pass http://172.16.100.11:8080/bbs/; }
http://www.bjsxt.com/forum/ --> http://172.16.100.11:8080/bbs/;
location ~* ^/forum { proxy_pass http://172.16.100.11:8080; }
http://www.bjsxt.com/forum/ --> http://172.16.100.11:8080/forum/
改变反向代理时,apache记录的日志
httpd.conf LogFormat %{X-Real_IP}i
作业
2、使用nginx完成SEO中的,动态网页静态化。 http://192.168.239.3/test.action?id=1 http://192.168.239.3/test.action?id=2 http://192.168.239.3/test.action?id=3
3、自学apache反向代理和负载均衡(wrr)。
评论暂时关闭