Nginx学习笔记

一、安装nginx 
 

    
    1、在nginx官方网站下载一个包,下载地址是:  http://nginx.org/download/nginx-1.4.2.tar.gz 
    2、WinSCP(ftp上传工具).exe FTP 上传工具上传达到CentOS中 
    3、我是先建一个目录,把要用的到的安装包放到一起. 
        #mkdir /home/ 
        #tar zxf nginx-1.4.1.tar.gz 
        #cd nginx-1.4.1 
    4、安装pcre开发包 
        #yum install -y pcre-devel 
    5、如果安装出现在下面的错误是缺少编译环境。安装编译源码所需的工具和库 
        ./configure: error: C compiler cc is not found 
        #yum install gcc gcc-c++ ncurses-devel perl 
    6、安装cmake,从http://www.cmake.org下载源码并编译安装 
        #yum -y install make gcc gcc-c++ ncurses-devel 
        #yum -y install zlib zlib-devel 
    7、如果需要ssl功能需要openssl库 
        #yum -y install openssl openssl--devel 
    8、安装nginx 
        #cd nginx-1.4.1 
        #./configure  --prefix =/opt/nginx 
        #make 
        #make install 
     9、 检查nginx的配置文件是否争取(假如修改过配置文件)
          #nginx -t
    10、 启动服务 
        #/opt/nginx/sbin/nginx  -c /opt/nginx/conf/nginx.conf 
    11、 停止服务  
         #/opt/nginx/sbin/nginx -s stop 
    12、查看端口占用情况 
        #netstat -tunlp 
    13、如果其它机器无法访问,解决方法如下: 
        #/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT 
        然后保存: 
        #/etc/rc.d/init.d/iptables save 
        重启防火墙 
        #/etc/init.d/iptables restart
 
 
二、日志文件的配置与切割
 

 
    1. 定义日志格式,默认combined

# log_format  formatName formaPattern
 
    2. 指定日志文件存放路径
 
        # access_log savePath logFormat
 
    3. 例子
 
        log_format weblog '$remote_addr - $remote_user [$time_local] "$request" '
           '$status $body_bytes_sent "$http_referer" '
           '"$http_user_agent" $http_x_forwarded_for';
        access_log /data/wslogs/1987.name_access.log weblog;
 
    4. 参数含义
  • $remote_addr 和 $http_x_forwarded_for:记录客户端的ip地址。
  •  
  • $remote_user:记录客户端用户名称。
  •  
  • $time_local:记录访问时间与时区。
  •  
  • $request:记录请求的URL与HTTP协议。
  •  
  • $status:记录请求状态;成功是200。
  •  
  • $body_bytes_sent:记录发送给客户端文件主体内容大小。
  •  
  • $http_referer:记录从那个页面链接访问过来的。
  •  
  • $http_user_agent:记录客户端浏览器的相关信息。
    5. 切割:
  • 就是把log文件用MV命令剪切到另一个文件,
  • 然后再kill -user1重启nginx,在重新生成nginx日志。
  • 这样写一段脚本,就可以把log文件每天存储一份了
 
三、信号控制
 

  •    TERM、INT    快速关闭
  •    QUIT    从容关闭
  •    HUP    平滑关闭,重新加载配置文件
  •    USER1    重新打开日志文件,在切割日志时用途较大
  •    USER2    平滑升级可执行程序
  •    WINCH    从容关闭工作进程
 
四、HTTP缓存


    
    1. 相关指令集
  • proxy_cache zone_name,该指令用于设置哪个缓存区将被使用,zone_name的值为proxy_cache_path指令创建的缓存区名称
  • proxy_cache_path  设置缓存文件存放路径,只能在http标签内配置
  • proxy_cache_methods [GET POST HEAD] 设置缓存哪些HTTP方法,默认GET/HEAD
  • proxy_cache_min_uses number 设置缓存的最小使用次数,默认1
  • proxy_cache_key line 设置web缓存的KEY值,如proxy_cache_key "$host:$server_port$uir$is_args$args"
  • proxy_cache_valid code time 对不同返回状态吗设置不同的缓存时间,如proxy_cache_valid 200 302 10m
proxy_cache_path /data/cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g
       
levels指定缓存空间有两层hash目录,第一层目录为一个字母,第二层为2个字母,类似data/cache/c/29/sd8923hsajdlfjaosdcjiajsdoij999;keys_zone参数用来为这个缓存区起名,500m指定缓存空间大小为500M;inactive的1d指如果缓存数据在1天内没有被访问,将被删除;max_size的30g是指硬盘缓存空间为30GB.
 
 
五、负载均衡与反向代理


 
    1. Http的Upstream模块
  • ip_hash: 让同一IP一直访问同一台机器,保证session正常使用
upstream stream_name {
    ip_hash;
    server 192.168.1.12:8080
    server 192.168.1.15:80
}
  • server参数
        weight    --权重越高,被分配到的客户端请求数越多
        max_fails    --在参数fail_timeout指定的时间内请求失败的次数(404除外)
        fail_timeout    --在max_fails次失败后,暂停的时间
        down    --标记服务器永久离线,适用于ip_hash
        backup    --仅在非backup服务器全部宕机或繁忙的时候才启用
 
 
六、URL重写Rewrite


 
    1. 标记
  • last,表示完成rewrite。使用alias时必须用
  • break,本条规则匹配完成后,终止匹配,不再匹配后面的规则。使用proxy_pass时必须用
  • redirect,返回302临时重定向,浏览器地址栏会显示跳转后的URL地址
  • permanent,返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
   
    2. 重定向URL末尾加?将不会把参数附加到URL后面,否则自动附加参数
    3. 花括号的使用{}
 
     如果在正则中使用了花括号,那么这条正则要用双引号引起来。
 
     rewrite "/image/([0-9]{2})" /image/$1.png;
 
    4. 实例
    
    a. 文件或目录不存在时,重定向到指定页面
    
    if(!-e $request_filename){
        rewrite ^/(.*)$ /index.jsp last;
    }
 
    b. 如果是IE浏览器,重定向到IE目录
 
            if($http_user_agent ~ MSIE){
                rewrite ^(.*)$ /IE/$1 break;
            }
 
    c. 设置文件缓存时间
 
            location ~ .*\.(gif|png|jpg|bmp|swf)${
                expires 30d;
            }
            location ~ .*\.(js|css)${
                expires 1h;
            }
 
    d. 示例代码如下:
 
http{
    proxy_temp_path /data0/proxy_temp_path ;
   #设置Web缓存区名称为cache_one,内存缓存空间大小为500M,自动清除超过1天没有被  
   #访问的缓存数据,硬盘缓存空间大小为30G
    proxy_cache_path /data0/proxy_cache_path levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g ;
    server{
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {
      #使用Web缓存区cache_one
      proxy_cache cache_one ;
      #对不同HTTP状态码缓存设置不同的缓存时间
      proxy_cache_valid 200 304 12h ;
      proxy_cache_valid 301 302 1m ;
      proxy_cache_valid any 1m ;
      #设置Web缓存的Key值,Nginx根据Key值md5哈希存储缓存,这里根据"域名,URI,
      #参数"组合成Key
      proxy_cache_key $host$uri$is_args$args;
        }

    #用于清除缓存,假设一个URL为http://my.domain.com/test.gif,通过访问
    #http://my.domain.com/purge/test.gif可以清除该URL的缓存
    location ~ /purge(/.*) {
      #设置只允许指定的IP或IP段才可以清除URL缓存
      allow 127.0.0.1 ;
      allow 192.168.0.0/16 ;
      deny all ;
      proxy_cache_purge cache_one $host$1$is_args$args ;
        }
    }
}
 
 
七、常用配置参数


 
    # 允许客户端请求的最大的单个文件字节数
    client_max_body_size 300m;
 
    # 缓冲区代理缓冲用户端请求的最大字节数,可以理解为先保存到本地再传给用户
    client_body_buffer_size 128k;
 
    # 跟后端服务器连接的超时时间,发起握手等候响应超时时间
    proxy_connect_timeout 600;
 
    # 连接成功后,等候后端服务器响应时间,其实已经进入后端的排队之中等候处理
    proxy_read_timeout 600;
 
    # 后端服务器数据回传时间,就是在规定时间之内后端服务器必须传完所有数据
    proxy_send_timeout 600;
 
    # 代理请求缓存区,这个缓存区会保存用户的头信息以供Nginx进行规则处理,一般只要能保存下头信息即可
    proxy_buffer_size 16k;
 
    # 临时缓存文件大小
    proxy_temp_file_write_size 64k;
 
    # 对网页文件、css、JS、XML等启动gzip压缩,减少数据传输量,提高访问速度
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
 

八、安装第三方模块



 
    1. 安装第三方模块的时候需要覆盖原来nginx文件,代码如下:
    

 

     ./configure  --prefix/nginx安装目录  --add-module=/第三方模块的目录

 

你可能感兴趣的:(nginx)