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)
上一篇 2017-05-08 22:37
下一篇 2017-05-08 23:06

相关推荐

  • linux发展简史

    前言 为什么要写这么一篇文章呢?我发现我虽然知道linux的一些知识,却不知道linux方面的历史,所以今天写一篇关于linux方面历史的文章,用来总结这段时间自己所学习到的关于linux的历史与linux的知识。关于说起linux的历史,就不得不介绍计算机的历史,与其他相关操作系统的一些历史,所以本文中的会简单介绍Linux与其他操作系统的关系。主要讲li…

    Linux干货 2017-02-16
  • N25第五周作业

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; ]# grep -E '^[[:space:]]+.*' /boot/grub/grub.conf 2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;…

    Linux干货 2017-01-08
  • 网络班N22期第六周博客作业

    请详细总结vim编辑器的使用并完成以下练习题 打开文件: ~]# vim [options] [file ..]       +#:打开文件后,直接让光标处于第#行       +/PART…

    Linux干货 2016-09-26
  • 第八周:网络基础知识和shell脚本练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别; 网桥:是连接两个局域网的基于MAC地址数据存储转发设备,工作于数据链路层 集线器:所有端口处于同一个广播域和冲突域中,带宽共享,工作于物理层 二层交换机:多端口网桥,一个端口一个冲突域,默认所有端口位于同一个广播域中,可以划分vlan,隔离广播域,带宽独享 三层交换机:具有路由功…

    Linux干货 2016-11-21
  • 7.28_Linux_ext数据结构inode的原理浅析、软硬链接的区别

    inode表结构浅析 下图以ext文件系统为参考,以4k块大小分区,简单描述一下ext文件系统的数据结构原理,如果有任何错误,烦请各位指出 inode 索引节点 硬盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区。硬盘的读写以扇区为基本单位。 扇区的大小,是2的N次方倍。分区的大小可以有多样,1k、2k、4k…以4k块大小来说明。4k块大…

    Linux干货 2016-08-03