欢迎来到Nginx配置文件的世界

Welcome:

       漫漫长夜中茁壮成长的Nginx业已成为Web服务器中比较流行的软件,虽然现在Apache占大部分主流,但Nginx始终是个小趋势:原因就在于Nginx支持更大的并发量,比较适用高性能高并发的生产环境中;而Apache则比较适用于高稳定性的开发环境当中.两个Web服务器软件之间的关系只能说是各司其职,各为其主罢了.说到Web服务器,微软的IIS是大家最熟悉不过的,它可以通过向导搭建服务,这对于初学者来说比较容易接受,但在我看来,冷冰冰的命令行才是我的最爱(he he).今天我们来说说Nginx的配置文件吧.对于部署安装的话,大家可以去百度一下~~


Begin:

            Nginx是模块化设计的软件,主配置文件中有很多关键字组成,每个关键字后都带 {} 中括号将参数包含起来,而参数就没有{}中括号。

            软件我一般会安装在/usr/local/ 下,所以我的配置文件在/usr/local/nginx/conf/nginx.conf (默认的我就不显示出来了)        

            注意!:注意关键字插入的位置,注意空格位置。我在这里所说明的,只是对应关键字应该插入的位置以及关键字与参数的作用和关系,

            只供参考使用,因为有些关键字和参数并不能共存,有些却是联系在一起的。



stream {                                                    //基于TCP/UDP的调度.以ssh为例,所需模块stream

upstream backed-ssh {
        server 192.168.2.100:22;

        server 192.168.2.200:22;
    }
    server {
        listen 12345;
        proxy_pass backed-ssh;
    }
}

http {
    worker_processes 1;                            //工作的线程数,此数越高,消耗的资源越大,处理的请求数越快,一般与CPU核心数量一致;
    worker_connections 65536;                //每个worker最大并发连接数,最大是65536;
    client_header_buffer_size 1k;             //默认请求包头信息的缓存,解决URL太长的问题;
    client_body_buffer_size  1K;               //此指令设置用于请求主体的缓冲区大小;

    client_max_body_size 1k;                    //此指令设置用于请求主体的最大缓冲区大小;

    large_client_header_buffers 4 1m;     //大请求包头部信息的缓存个数与容量,将URL设置为4个1M大小,即使是很大的URL请求也不报401;


    server_tokens off;                                //不显示版本号,保证服务器相对安全,防止黑客找到漏洞
    net.ipv4.tcp_syncookies=1;                //表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;


    net.ipv4.tcp_fin_timeout = 1              //如果套接字由本端要求关闭,这个参数决定了它保持在 FIN-WAIT-2  状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是 60 秒。2.2  内核的通常值是 180 秒,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的 WEB 服务器,也有因为大量的死套接字而内存溢出的风险,FIN-  WAIT-2 的危险性比 FIN-WAIT-1 要小,因为它最多只能吃掉1.5K 内存,但是它们的生存期长些;


    net.ipv4.tcp_syn_retries = 1               //在内核放弃建立连接之前发送SYN包的数量;
    net.ipv4.tcp_synack_retries = 1         //为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量;

    gzip on;                                                //开启压缩,提高传输速度;
    gzip_min_length 1000;                        //小文件不压缩,因为对于小文件来说没必要压缩,压缩完后反而会更大;
    gzip_comp_level 4;                              //压缩比率;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;                                        //对特定文件压缩,类型参考mime.types;


    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;            //限制并发量; 

    upstream webserver {                        
        ip_hash;                                            //可以让相同客户端访问相同web服务器,因为调度器调度后端的服务器有N台,有时要规定哪个客户端要访问特定服务器;

        server 套接字(ip:port) [weight=1..] [max_fails=1..] [fail_timeout=20..];    //这是添加一个后端服务器的基本语法格式;max_fails表示最大失败访问次数.默认1,尝试连接一次;ail_timeout表示访问失败停滞时间.一但访问失败后,N秒后才恢复访问.(客户机在N秒内不访问它);


        server 192.168.0.1:80 weight=1 max_fails=1 fail_timeout=20;                 //这是一个示例;

        server 192.168.0.2:8080 weight=2;                                                       //这是另一个示例,但监听在8080,我们都知Tomcat;

        ...                                                                                                           //可以添加N个server;
    }
    server{
        listen 80;
        server_name localhost;
        limit_req zone=one burst=5;
        error_page    404    /404.html;                   //可自定义错误页面(404为例),将注释去掉,再换成自己想要的网页文件就可以 ;      
        location / {
            root html;
            index index.php index.html index.htm;              //限制并发量;

            if ($request_method !~ ^(GET|POST)$) {            //只允许GET|POST方法请求数据,拒绝非法连接
                        return 444;
                    }

        }
        location ~* \.(jpg|png)$ {
            expires 30d;                                        //期满时间,定义客户端对于以.jpg或.png结尾的文件只缓存30天;
        }
        location ~\.php$ {
            root html;
            fastcgi_pass 127.0.0.1:9000;             //跳转到本机的服务器.调用PHP-fpm 实现动态解析;
            fastcgi_index index.php;
        }
        location / {
            proxy_pass webserver;                     //调度器调度的后端服务器的upstream组的名字;一旦客户来访问服务器,会直接调webserver组中的服务器,这时本机充当调度器的角色;

        }
        location /status {
                    stub_status on;                        //需要添加模块:http_stub_status_module: Web服务器状态,设置完成后,在浏览器中输入 http://127.0.0.1/status  就可以看到服务器的状态信息;

         }

        if ($http_user_agent ~* firefox) {
            rewrite ^/(.*) /xx/$1 break|last|redirect|permament;    //地址重写,注意!if是一种条件;这段的意思是如果是用firefox来访问的客户端就将其地址重写到网页根目录的xx目录下;

        }
    }
}


Make-Up:


                    http_ssl_module:    Nginx的ssl模块,可以支持https协议,在数据传输中加密传输;


假设你已经搭建了Nginx并配置好了http_stub_status_module模块,在访问http://127.0.0.1/status时会看到以下参数:

Active connections:当前活动的连接数量;
Accepts:已经接受客户端的连接总数量。
Handled:已经处理客户端的连接总数量(一般与accepts一致,除非服务器限制了连接数量)。
Requests:客户端发送的请求数量。
Reading:当前服务器正在读取客户端请求头的数量。
Writing:当前服务器正在写响应信息的数量。
Waiting:当前多少客户端在等待服务器的响应。



END:

          其实说这么多,对于Nginx我是认识的不多,但不难发现,只要有哪些不懂的,大家都可以上官网查一下;比如Nginx模块的作用是什么,调度器究竟是什么,都是在官网可以查看到的;好了,我要睡觉去了。。。。






猜你喜欢

转载自blog.51cto.com/chenjunye/2106581