nginx小记

    Nginx (发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。 其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页伺服器中表现较好.目前中国大陆使用nginx网站用户有:新浪、网易、 腾讯。

   

一、nginx的配置文件nginx.conf

#Nginx所用用户和组
user  nginx nginx;
#工作进程数,一般与CPU核数一样
worker_processes  16;
#全局错误日志存放路径以及日志类型[debug|info|notice|warn|error|crit]
error_log  /var/log/nginx/error.log warn;
#指定pid存放文件
pid        /var/run/nginx.pid;

#工作模式与每隔工作进程连接数上限
events {
    #使用网络IO模型,在Linux下建议epoll
    #use epoll;
    #每个工作进程允许最大的连接数
    worker_connections  1024;
}

#设定http服务器
http {
    #文件扩展名与文件类型映射表
    include       /etc/nginx/mime.types;
    #默认文件类型
    default_type  application/octet-stream;
    #默认编码
    #charset utf-8;
    #定义日志格式
    log_format  main  '$host - $http_x_forwarded_for - $remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent $request_time "$http_referer" '
                      '"$http_user_agent"';

                        
    #设置访问日志存放路径
    access_log  /var/log/nginx/access.log  main;

    #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改 成off。
    sendfile        on;
    #防止网络阻塞
    #tcp_nopush     on;

    #长连接超时时间,单位是秒
    keepalive_timeout  65;

    #gzip模块设置
    #开启gzip压缩输出
    gzip  on;
    #最小压缩文件大小
    gzip_min_length 1024;
    #压缩类型
    gzip_types text/plain application/x-javascript text/css application/xml application/json;

    #include /etc/nginx/conf.d/*.conf;
    
    #设置负载均衡的服务器列表
    upstream qingyezhu.com {
        server 192.168.1.101:8080;
        server 192.168.1.102:8080;
        server 192.168.1.103:8080;
    }
    
    upstream xiaoxian.com {
        server 192.168.1.201:8080 weight=5;
        server 192.168.1.202:8080 max_fails=3 fail_timeout=30s;
        server 192.168.1.203:8080 down;
        server 192.168.1.204:8080 backup;
    }
    
    
    #虚拟主机的配置
    server {
        #监听端口
        listen 80;
        #域名可以多个,用空格隔开
        server_name 192.168.1.1 qingyezhu.com;
        #定义本虚拟主机的访问日志
        access_log /opt/logs/qingyezhu.access.log main;
        #对"/"启用反向代理
        location / {
            expires 0;
            root   html;
            index  index.html index.htm;
            proxy_pass http://qingyezhu.com;
            #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header   Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        #设置查看Nginx状态查看的地址
        location /NginxStatus {
            stub_status on;
            allow 192.168.1.1/8;
            deny all;
        }
        location /test.json {
            expires 300m;
            root /data/www;
            default_type  text/json;
        }
        location = /getts.json {
            root /data/www;
            expires 5m;
            default_type  application/json;
            access_log off;
        }
    }
    
    #虚拟主机的配置
    server {
        #监听端口
        listen 80;
        #域名可以多个,用空格隔开
        server_name 192.168.1.2 xiaoxian.com;
        #定义本虚拟主机的访问日志
        access_log /opt/logs/qingyezhu.access.log main;
        #对"/"启用反向代理
        location / {
            expires 0;
            proxy_pass http://xiaoxian.com;
            #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header   Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        #设置查看Nginx状态查看的地址
        location /NginxStatus {
            stub_status on;
        }
    }
        
}

二、日志文件格式
   log_format  main  '$host - $http_x_forwarded_for - $remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent $request_time "$http_referer" '
                      '"$http_user_agent"';
                      
    日志格式允许包含的变量注释如下:
    $remote_addr, $http_x_forwarded_for 记录客户端IP地址
    $remote_user 记录客户端用户名称
    $request 记录请求的URL和HTTP协议
    $status 记录请求状态
    $body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。
    $bytes_sent 发送给客户端的总字节数。
    $connection 连接的序列号。
    $connection_requests 当前通过一个连接获得的请求数量。
    $msec 日志写入时间。单位为秒,精度是毫秒。
    $pipe 如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。
    $http_referer 记录从哪个页面链接访问过来的
    $http_user_agent 记录客户端浏览器相关信息
    $request_length 请求的长度(包括请求行,请求头和请求正文)。
    $request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
    $time_iso8601 ISO8601标准格式下的本地时间。
    $time_local 通用日志格式下的本地时间。
    
三、upstream的配置方式
    1、轮询(默认)
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
    weight指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
    例如:
        upstream bakend {
            server 192.168.1.101 weight=5;
            server 192.168.1.102 weight=3;
        }
    2、ip_hash
    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题[也有人说不可以,由于]。
    例如:
    upstream bakend {
         ip_hash;
         server 192.168.1.201:8080;
         server 192.168.1.202:8080;
    }
    3、fair(第三方)
    按后端服务器的响应时间来分配请求,响应时间短的优先分配。
    upstream backend {
        server server1;
        server server2;
        fair;
    }

    4、url_hash(第三方)
    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
    例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
    upstream backend {
        server squid1:3128;
        server squid2:3128;
        hash$request_uri;
        hash_method crc32;
    }
    5、tips:
    upstream bakend{#定义负载均衡设备的Ip及设备状态
        ip_hash;
        server 192.168.1.101:8080 down;
        server 192.168.1.201:8080 weight=2;
        server 192.168.1.301:8080;
        server 192.168.1.401:8080 backup;
    }
    在需要使用负载均衡的server中增加
    proxy_passhttp://bakend/;

    每个设备的状态设置为:
    1.down 表示单前的server暂时不参与负载
    2.weight 默认为1.weight越大,负载的权重就越大。
    3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
    4.fail_timeout:max_fails次失败后,暂停的时间。
    5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

四、location语法

    nginx location可以根据字符串或者正则表达式来进行匹配
    如果要使用正则表达式,则必须以“~”或者"~*"开头
    "~"表示区分大小写
    "~*"表示不区分大小写

    匹配过程如下:
    第一步:进行字符串匹配,找到最合适的那一个
    第二步:进行正则表达式匹配,找到匹配上的第一个
    第三步:如果第二步匹配上了,则用第二步匹配的结果,否则用第一步匹配的结果
    从上面可以看出来,正则表达式的优先级要高一些

    上面的匹配过程的例外:
        1.可以用"="加在字符串前面,表示完全匹配,如果过来的url与某个字符串完全匹配(前面有"="),则搜索停止。因此经常访问"/",则用"=/"可以加快一点点处理速度(因为它停止了nginx配置中的其他搜索)
        2.如果只想用字符串匹配,则在字符串前加“^~”,则一旦字符串匹配上了,就不会再进行正则表达式匹配


    综上,location的匹配规则如下:
          1.先进行"="的完全匹配,如果匹配上,则搜索停止
          2.进行字符串匹配,如果匹配上了,但是没有"^~",则进行第3步;如果匹配上了,而且有"^~",则搜索停止;
          3.正则表达式匹配,如果匹配上了,则搜索停止;如果没有匹配上,则进行第4步;
          4.此时第3步没有匹配上,则拿第2步匹配的结果来进行,如果第2步也没有匹配上,则跳到错误页面(404)

五、一些命令
    检测nginx配置文件是否语法正确
    /usr/sbin/nginx -c /etc/nginx/nginx.conf -t
    或
    /opt/nginx/sbin/nginx -t

    重新启动nginx
    /usr/sbin/nginx -c /etc/nginx/nginx.conf -s reload
    或
    /opt/nginx/sbin/nginx -s reload


http://www.blogjava.net/niumd/archive/2011/05/10/349958.html
http://www.ibm.com/developerworks/cn/web/wa-lo-nginx/index.html
http://jahnkey.huang.blog.163.com/blog/static/27489840201242103925740/

 

转载于:https://www.cnblogs.com/xiaoxian1369/p/5257779.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值