nginx学习

nginx
    nginx的核心配置项:
        Core functionality:核心配置,Glob配置段
            daemon:是否开启为守护进程
                daemon {on|off}:默认为开启,只能使用在main段
            error_log:错误日志定义,有存放路径与日志等级,这个指令可以使用在main, http, mail, stream, server, location段中
                error_log file [level]:file就是错误日志位置了,面level级别从高到低分别为debug,info,notice,warn,error,crit,alert,emerg.
            include:这个指令主要是将其它独立配置文件引用到主配置文件,使主配置文件生效,这个指令可以配置在任意位置,核心为调用其它文件
                include {file|mask}:调用独立配置文件或者mime单位类型文件,示例如下
                    include mime.type;调用主配置文件所在目录下的mime.type文件,这些文件类型为nginx可识别的类型
                    include vhosts/.conf:调用主配置文件所在的目录一睥vhosts目录下的所有以.conf结尾的文件
            load_module:这个指令为模块自由装卸载的控制指令
                load_module file:file就是模块存放位置,可配置位置为mian
            lock_file:锁文件存放位置
                lock_file file:file就是文件存放位置,默认为logs/nginx.lock,可以配置位置为main
            master_process {on|off}:是否开启master进程,默认为开启,可以配置在main段
            multi_accept {on|off}:同一时间是否只接收一个连接,如果开启,那么同一时间将接收所有新的请求,默认为关闭,只能在events段配置此指令
            pid file:pid文件存放位置,file为文件位置,默认位置为主配置文件目录下的nginx.pid,这个指令只可以配置在main段
            thread_pool NAME threads=NUMBER [max_queue=NUM]:定义nginx运行线程池
            use method:指明并发连接请求的处理法则,默认为epoll,配置位置为events
            user USER[GROUP]:配置启动nginx的worker进程的用户,默认用户,用户组为nobody,noboduy,配置位置为main段
            worker_connections NUM:一个worker最大可以进行多少个连接,默认为512,配置位置为events
            worker_cpu_affinity CPUMASK…:配置worker对应的CPU,主要是一个CPU对应一个worker时配置,可以提高nginx性能,配置位置main
                worker_cpu_affinity 0001 0010 0100 1000;有四个CPU,每一个CPU对就一个worker,如果此选项的值为auto,那么就是自适应
            worker_priority NUM:此指令主要是对worker进程的优先级进行配置,默认优先级为0,这个优先级为nice优先级,范围为-20到20之间,越小越优先
            worker_processes {NUM|auto}:配置nginx进程启动多少个worker进程,这个worker进程主要是跟cpu核心数有关,一般情况下一核对应下人worker进程,这个指令默认值为0,配置位置为main

    nginx的部分模块说明:
        ngx_http_core_module模块:nginx核心模块,核心的不能再核心了
            aio {on|off}:是否开启异步IO读写,默认为关闭,配置位置为http,server,location,但是这个指令只有在nginx的0.8.11版本才有效
            alias PATH:别名,假如访问一个指定的url时,这个url可能并不存在,这时可以进行别名配置,使其访问一个存在在url,配置位置为location
            client_boby_timeout TIME:读取客户端发送请求报文的body超时时长,这个超长是两个操作时间差的时长,默认为60s,配置位置为http,server,location
            client_header_timeout TIME:读取客户端发送请求报文的header超时时长,同上
            client_header_bufer_size SIZE:用于接收客户端的body部分的缓冲区大小,默认为1K,配置位置http,server
            client_body_temp_path PATH [level1 [level2 [level3 …]]]:配置用于存储客户端请求报文的body部分的临时存储路径,及其子目录结构和数量
                client_body_temp_path /tmp/nginx/body_cache 1 2 2;   //body缓冲目录为/temp/nginx/body_cache,缓冲级别为1 2 2,这里的数字为几个十六进制数组成,1代表1外十六进制组面,也就是会生成十六个目录,后面的二就是两个十六进制组成,也就是会生成16
16种方法,也就是创建256个目录,依此类推,一级一级,不需要再遍历所有的文件,可以提高nginx效率
            client_max_body_size SIZE:客户端的body最大值,在抓包中的显示为”Content-Length”,默认值为1M,配置位置为1M,配置位置为http,server
            default_type MIME-TYPE:配置识别的默认mime类型,默认为text/plain,配置位置为http,server,location
            directio {SIZE|off}:这个指令与aio指令配合使用,在Linux主机上开启O_DIRECT标记,此处意味文件大于给定的大小时使用,例如directio 4m;或者是directio off
            error_page CODE [=RESPONSE] uri;重定向错误页面,配置位置http,server,location,在location中的if语句中
                error_page 404 =200 /xxx.xxx;    //将错误的code改为200,并将页面定向到/xxx.xxx
            etag {on|off}:是否开启etag头信息,默认为开启,配置位置为http,server,location
            keepalive_disable {none|BROWSER}:定义在那些浏览器中不使用长连接,默认为msie6,配置位置为http,server,location
            keepalive_requests NUMBER:在长连接时请求的资源最大数量,默认100,配置位置为http,server,location
            keepalive_timeout {TIME|header_time}:长连接超时时长,默认为75s,配置位置为http,server,location
            limit_rate RATE:限制给客户端响应的传输频率,单位是bytes/second,0表示无限制
            limit_except METHOD1…{…}:限制对应的请求方法之外的其它方法的允许与不允许操作,配置位置location
                limit_except GET HEAD {   //对GET与HEAD进行操作,允许,其它的不允许 
                    allow 192.168.1.0/32;
                    deny all;
                }
            listen IP[:PORT]…..:定义监听IP端口等,还有什么代理,ssl等,配置位置server
            location [=|^~|~|~] uri {…}:根据请求uri进行配置,使其访问特有的资源,配置位置server,location
                符号匹配优先级:= > 无符号 > ^~ > ~|~

            open_file_cache off:关闭文件缓冲,这是默认状态,open_file_配置位置http,server,location
            open_file_cacht max=N [inactive=TIME]:N为可缓存的缓存项上限,达到上限后会使用LRU算法实现缓存管理,inactive=TIME为缓冲项的非活动时长,在此处指定的时长内被命中或者未被命中的次数少于open_file_chche_min_user指令指定的次数的缓存即为非活动项;
                nginx的缓冲信息:文件大小,描述符,mtime,目录结构,文件权限
            open_file_cache_errors {on|off}:是否缓存查找时发生错误的文件一类信息
            open_file_chche_valid TIME:缓冲项有效性检查频率,默认为60s;
            open_file_cache_min_user NUMBER:在open_file_cache的inactive参数指定时长内,至少应该被命中多少次方为活动项
            root PATH:网页文件的存放位置,配置位置为http,server,location,location中的if语句
            send_timeout TIME:对于客户端的请求进行响应的时候的超时时间,仅对两个操作之间的时间差进行判断
            sendfile {on|off}:是否启用sendfile的功能,默认关闭,配置位置http,server,location
            server_name HOSTNAME/FQDN:定义服务器的域名或者主机名,配置位置为server
            try_file file … uri:以指定的顺序检查文件,并使用第一个找到的文件进行处理,该处理在当前上下文中执行,文件路径是根据根与别名进行定义的
            try_file file1 file2 … =code:如里在指定顺序中没有找到资源,那么返回一个代码
            type {…}:响应的MIME类型,可以有多个,配置位置http,server,location
        ngx_http_auth_basic_module:nginx的basic的认证
            auth_basic:在认证的时候输出的提示字符串
                auth_basic “closed site”;
            auth_basic_user_file:指定用户认证的认证文件,nginx没有独立的生成认证文件的命令,需要使用httpd-tools包中的htpasswd进行生成
                htpasswd -c -m FILE   //只有在生成文件时才使用-c,如果不生成文件是不能使用-c的,会将原有的文件覆盖
        ngx_http_fastcgi_module:定义fcgi协议的模块
            fastcgi_pass IP/HOSTNAME:能往fcgi的IP或者HOSTNAME,也可以UNIX套接字文件
                fastcgi_pass 192.168.10.2:9000    //通过IP,端口进行访问后端fcgi程序
                fastcgi_pass unix:/tmp/fastcgi.socket    //通过unix套接字访问后端fcgi程序
            fastcgi_index NAME:访问fcgi主页的名字
                fastcgi_index index.php;     //通过fcgi访问的主页为index.php
            fastcgi_param PAEAMETER VALUE [if_not_empty]:将指定的参数传递给后端的fcgi,当没有定义此值时,会继承上一级发送的内容
                fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
                fastcgi_param QUERY_STRING $query_string;
                fastcgi_param REDIRECT_STATUS 200;
            fastcgi_cache_path PATH [level1 [level2 [level3…]]]:指定缓冲路径与缓冲级别
                fastcgi_cache_path /data/fcgicache 1 1 1;    //定义一个缓冲目录与三层缓冲
            fastcgi_cache {zone|off}:定义一段内存空间为缓冲空间,默认此指令为关闭
            fastcgi_cache_key STRING:定义用作缓冲项的key的字符串
            fastcgi_cache_methods GET |HEAD |POST …:为那些请求类型使用缓冲
            fastcgi_cache_min_uses NUMBER:定义缓冲项在缓冲空间内,非活动时间内至少要被访问多少次才可以被认作为活动的缓冲
            fastcgi_cache_valid [code …] time:不同的响应码对就的缓冲时长
                fastcgi_cache_valid 301 1h;    //临时重定向的缓冲时间为1个小时
            fastcgi_keep_conn {on|off}:相当于是否开启fastcgi的长连接,也可以对nginx有一定的优化效果
        ngx_http_gzip_module模块:进行流量压缩的模块
            gzip            on;     //开启gzip压缩
            gzip_min_length 1000;     //最小为1000字节的内容才会进行压缩
            gzip_proxied    expired no-cache no-store private auth;    //定义nginx在做为代理服务器时,在收到代理服务器的响应时,对那些报文进行压缩
            gzip_types      text/plain application/xml;    //定义nginx压缩的文件类型有那些
        ngx_http_index_module模块:可以指定响应的首页文件的类型
            index index.php index.html index.htm
        ngx_http_proxy_modeule模块:nginx的代理功能
            proxy_pass URL:代理的协议,主机与资源
            proxy_set_header field value:发往后端主机的请求首部的值
            proxy_cache_path PATH [levels=levels] …..:定义缓冲位置,缓冲级别,内存空间域等内容
                proxy_cache_path /data/proxycache levels=1:1:1 key_zone=proxy_cache:10m;   //定义一个代理缓冲,缓冲文件位置为/data/proxycache,缓冲级别为1:1:1三个级别,内存空间域名与大小为proxycache:10m
            proxy_cache {zone|off}:是否启内存区域缓冲
            proxy_cache_key string:缓冲中用于”键”的内容
            proxy_cache_valid [code …] time;不同的响应码对应的缓冲时间的不同
            proxy_cache_use_stale:在那些情况下使用过时的缓冲
            proxy_cache_methods GET | HEAD | POST …;对那些类型的请求进行缓冲
            proxy_hide_header field:对代理响应的头信息不予发送给客户端,如Date,Server,X-Pad,X-Accel这些信息,默认情况下都是不会发送给客户端的,如果想要传递某些信息,可以配置proxy_pass_header
            proxy_connect_timeout TIME:定义与代理服务器连接的超时时间,这个值最大不应该超过75s,默认为60s
        ngx_http_referer_module模块:阻止对无效站点的访问
            valid_referers none | blocked | server_names | string …;定义referer的合法可用值
                none:请求报文没有可用的referer首部
                blocked:请求报文的referer首部没有可用的值
                server_names:参数,其可以有值作为主机名或主机名模式
                if ($invalid_referers) {    //说明响应在定义的valid_referers之外的值时返回的代码
                    return 403;
                }
        ngx_http_rewrite_module模块:url重写模块
            break:当达到一定的条件时,中断此模块
            return:反回特定的url,类同于error_log指令
            rewrite regex replacement [flag]:重写一个url
                last:如果已经匹配,就不再对同一队列的rewrite进行遍历,不间断的进行循环,所以,如果其它的队列中也含有last,有可能会变为圆环地址
                break:同上进行,但是只进行一次循环,如果,本队列匹配到url,那么就中断了,不再继续进循环了
                redirect:重写完成以后生成新的url,再发送给客户端,由客户端重新进行访问,这个是临时重定向
                permanent:同上为永久重定向
            rewrite_log {on|off}:重写是否保存日志  
            set $variable value:定义变量,variable为变量名,value变值 
            if (condition){body}:
                condition:比较字符
                    =|!=:对比变量与字符串是否相等
                    ~|!~:是否属于
                    ~
|!~*:是否属于,并且不区分大小写
                    -f|!-f:是否是一个文件
                    -d|!-d:是否是一具目录
                    -e|!-e:文件是否存在
                    -x|!-x:是否可以执行
        ngx_http_ssl_module模块:进行流量加密的模块
            ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;      //加密协议,当然还有SSLv2,SSLv3….
            ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;指定启用的密码,密码以openssl库所指定
            ssl_certificate     /usr/local/nginx/conf/cert.pem;证书存放位置
            ssl_certificate_key /usr/local/nginx/conf/cert.key;私钥存放位置
            ssl_session_cache   shared:SSL:10m;ssl会话缓冲类型与大小
            ssl_session_timeout 10m;ssl响应会话超时时间,默认为5分钟
        ngx_http_stub_status_module模块:当前nginx的状态
            location /basic_status {
                stub_status;
            }

    提供两个虚拟主机,实现LNMP,使用不同的方法建设其后端php后进行压测,对比其性能,后端使用np,ap的方法,压测内容为wordpress,然后建立https

        拓扑图:

    nginx学习

            见nginx试验
   在nginx_proxy端进行配置
       安装nginx程序,如果使用yum源安装nginx程序,那么需要使用epel源
           yum -y install nginx 
       进入主配置文件:
           注释server配置段,并按照include指令所指定的目录创建一个存放主机的文件
               vim /etc/nginx/conf.d/vhost.conf
               在配置文件中添加如下内容
                   server {
   listen :80;
   #root /data/www;
   location / {
       proxy_pass http://172.18.250.37:80;
   }
}
       启动服务:
                systemctl start nginx 
   在ap(就是httpd+php)端配置
            安装ap
                yum -y install httpd php php-mysql
            vim /etc/httpd/conf/httpd.conf
                DirectoryIndex index.php index.html index.html.var
            新建一个php网页
                vim /var/www/html/index.php
                    <?php
                        phpinfo();
                    ?>
            启动服务:
                service httpd start
        在client端进行压测
            进行压测:
                ab -n 2000 -c 500 http://172.18.252.96:80/index.php
                返回值:
                    Time per request:       3222.389 [ms] (mean)
                    Time per request:       6.445 [ms] (mean, across all concurrent requests)
        将ap修改为np,进行压测
            卸载ap
                yum -y remove httpd php
            安装np
                yum -y install nginx php-fpm
            配置php-fpm主配置文件
                vim /etc/php-fpm.d/www.conf
                将监听端口修改为如下配置
                    listen = 0.0.0.0:9000
            配置nginx的配置文件
                vim /etc/nginx/conf.d/virtual.conf
                修改配置如下
                    将此中的server注释去掉,server配置如下
                        server {
   listen       8080;
   #listen       somename:8080;
   #server_name  somename  alias  another.alias;
   server_name www.a.com;
   root   /data/www;
   index  index.php index.html index.htm;

   location ~ .php$ {
       fastcgi_pass  localhost:9000;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params;
   }
}
修改proxy服务器的proxy_pass指令端口为8080;
            进行压力测试:
                ab -n 2000 -c 500 http://172.18.252.96/index.php
                设备网卡岩了,说明这个性能还不如ap,重启,重新测试
                    Time per request:       890.024 [ms] (mean)
                    Time per request:       1.780 [ms] (mean, across all concurrent requests)
                这个np还是比ap强的,强了一倍不止啊,很给力啊
        配置wordpress与pam
            配置mysql:
                安装mysql
                    yum -y install mariadb-server
                启动mysql
                    systemctl start mariadb
                配置数据库
                    mysql -u root
                    create database wordpress;
                    grant all privileges on *.
to test@’localhost’ identified by ‘test’;
                    grant all privileges on . to test@’127.0.0.1′ identified by ‘test’;
                    grant all privileges on . to test@’%’ identified by ‘test’;
                    \q
            将wordpress解压到网页根目录
                修改权限
                    chmod 777 -R wordpress
                    访问即可
                进行压测:
                    ab -n 2000 -c 500 http://172.18.252.96/wordpress
                这个很快,比index.php还快,不知道为什么
            配置一个url重写方便点
                在np上的/etc/nginx/conf.d/vhost.conf中添加如下内容:
                    location / {
                        rewrite ^([/^]+/) $1/wordpress break;   //这样写的目地是,不知道为什么,IP后面老是出现两个’/’,所以这里就匹配一个’/’就好了
                    }
        在proxy上配置一个CA
            cd /etc/pki/CA/
            生成CA的私钥:
                openssl genrsa -out private/cakey.pem 2048
            生成自签证书
                openssl req -x509 -new -key private/cakey.pem -out cacert.pem -days 3650
            生成文件
                touch index.txt serial
                echo 01 > serial 
            CA配置完成
        生成nginx的CA
            cd /etc/nginx/conf.d/   
            openssl genrsa -out nginx.key 1024 
            openssl req -new -key nginx.key -out nginx.pem -days 365
        给CA进行确认
            openssl ca -in nginx.pem -out nginx.crt -days 365
        配置nginxssl:
                server {
       listen       443 ssl http2 default_server;
       listen       [::]:443 ssl http2 default_server;
       server_name  www.tom.com;
       ssl_certificate “/etc/nginx/conf.d/nginx.crt”;
       ssl_certificate_key “/etc/nginx/conf.d/nginx.key”;
       ssl_session_cache shared:SSL:1m;
       ssl_session_timeout  10m;
       ssl_ciphers HIGH:!aNULL:!MD5;
       ssl_prefer_server_ciphers on;
       location / {
               proxy_pass http://172.18.250.37:80;
       }
       error_page 404 /404.html;
           location = /40x.html {
       }
       error_page 500 502 503 504 /50x.html;
           location = /50x.html {
       }
   }
        同理,配置php服务器上的ssl使其成为全站ssl,如果只有是部分ssl,那么php上需要做重写,不然访问不了https,需要将https重写成http后就可以了

原创文章,作者:gaomei,如若转载,请注明出处:http://www.178linux.com/75071

(0)
gaomeigaomei
上一篇 2017-05-08 22:37
下一篇 2017-05-08 23:06

相关推荐

  • Nginx工作原理和优化、漏洞。

    1.  Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。 Nginx的模块…

    Linux干货 2015-04-04
  • vim编辑以及脚本编程练习

    vim编辑器的使用总结: vim在工作过程当中有三种模式:编辑模式、输入模式、末行模式。 1、编辑模式:即命令模式,键盘操作常被理解为编辑命令; 2、输入模式:在文本文件当中进行输入内容; 3、末行模式:vim内置的命令行接口,执行vim的内置命令。   vim的使用 打开文件 #vim[option]…[FILE] +#:打开文件后,直接让光标处…

    Linux干货 2017-10-29
  • 安装包管理

       软件包管理 软件的运行和编译 ABI 由于window和linux不兼容 linux是ELF window 是PE 对应的内核解析方式不同,可以用虚拟化 API 只程序与程序的公用的接口,相互调用方式 程序源代码 –>预处理–>编译–>汇编–>链接 预处理只会引…

    Linux干货 2017-04-24
  • 正则表达式之初体验

    学习正则表达式之前,看过这复杂的表达式,犹如天书,无比高大上;怀着战战兢兢的心情,开始了学习之旅: 一、  正则表达式:Global search REgular expression and Print out the line. 我的理解是:通过一大堆符号组成的公式逐行查找文本中匹配的字符串并显示出来  分类: &…

    Linux干货 2015-03-31
  • 优云老王(四)干货总结:数据带来的奇妙世界

    作为产品经理的我们,不仅仅需要业务敏感的直觉,还需要数据驱动我们的产品不断创新!关于如何看数据,我列了主要的四个场景。 场景一:看页面点击,了解用户关注什么,卡在哪里 给谁看:产品经理和交互设计师 看什么: 由于我们对Web应用的所有界面,可交互元素都做了埋点,那么我们就可以看用户在页面里都做了哪些点击动作。首先是整个页面的横向比较,每个页面本身的操作数(重…

    2016-09-19
  • sed文本处理工具

    Sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转…

    Linux干货 2017-12-02