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)。

相关内容

    暂无相关文章