13.  nginx常用模块

1.  nginx模块分类:

      核心模块:提供最基本最核心的服务

      标准HTTP模块:提供标准HTTP功能

      可选HTTP模块:扩展标准HTTP功能

      邮件服务模块:支持nginx的邮件功能

      第三方模块:由第三方或者个人编写的可编译到nginx中的模块

2.  nginx的核心模块:    主要针对的是main块和event块

     ngx_core_module 核心

     ngx_errlog_module 错误日志

     ngx_conf_module   配置解析

     ngx_events_module  事件

     ngx_event_core_module  事件核心

     ngx_epoll_module  epoll驱动模型

     ngx_regex_module  正则

3.  nginx的标准HTTP模块:默认情况下是被编译到nginx中的,除非在配置的时候添加--without-xxx声明不编译。

     ngx_http_core  

     ngx_http_access_module  基于IP地址的访问控制

     ngx_http_auth_basic_module  基于HTTP的身份认证

     ngx_http_fastcgi_module  对FastCGI的支持

     ngx_http_gzip_module  压缩请求响应,可以减少数据传输

     ngx_http_log_module  自定义access日志

     ngx_http_memcached_module  对memcached的支持

     ngx_http_proxy_module  支持代理服务

     ngx_http_rewrite_module  通过正则表达式重定向请求

     ngx_http_upstream_module  主要用于负载均衡

4.  nginx的可选模块

     ngx_http_flv_module  支持将flash多媒体信息按照流文件传输

     ngx_http_gungzip_module  

     ngx_http_gzip_static_module  预压缩

     ngx_http_mp4_module  mp4流文件传输

     ngx_http_ssl_module  支持HTTPS/SSL

     ngx_http_stub_status_module  支持返回nginx服务器的统计信息

5.  邮件服务模块

     ngx_mail_smtp_module

     ngx_mail_pop3_module

     ngx_mail_core_module

     ngx_mail_auth_http_module

     ngx_mail_proxy_module

     ngx_mail_ssl_module 

15.  nginx的主配置文件详解

worker_processes  1;  worker进程的数量--一般与cpu核数一致
events {
    worker_connections  1024;  单个worker进程支持的最大TCP连接数
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;  虚拟主机的端口
        server_name  localhost;  虚拟主机的域名
        location / {
            root   html;  站点根目录
            index  index.html index.htm;  首页文件
        }
        error_page   500 502 503 504  /50x.html;  http状态码,使用50x.html回应客户端
        location = /50x.html {
            root   html;
        }
    }
}

20.  企业场景中重启nginx以后,检查网站是否正常的策略。

    通过一个脚本自动检查网站的响应码。

    脚本还在写

21.  nginx常用功能配置实战

    1.  规范nginx配置文件

        在nginx.conf的主配置文件中,删除server标签内容。

        把server标签内容分别放到以网站名称命名的配置文件中。如:www.conf  learning.conf

        在nginx.conf中添加关键字include  www.conf;  注意冒号

include website/learning.conf;
include website/www.conf;

    2.  为网站启用别名

        好处:当有多台网站的时候,用别名进行监控网站。常用语nginx负载均衡器后面的虚拟主机区别。 

           还有一个虚拟主机可以有多个域名。

server {
        listen 80;
        server_name learning.cmr.com.cn a.cmr.com.cn;
        location / {
           root html/learning;
           index index.html index.htm;
           }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ .*\.(php|php5)?$ {
           root html/learning;
           fastcgi_pass 127.0.0.1:9000;
           fastcgi_index index.php;
           include fastcgi.conf;
        }
    }

    3.  为虚拟主机开启状态信息功能

server {
        listen 80;
        server_name learning.cmr.com.cn a.cmr.com.cn;
        location / {
           root html/learning;
           index index.html index.htm;
           }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ .*\.(php|php5)?$ {
           root html/learning;
           fastcgi_pass 127.0.0.1:9000;
           fastcgi_index index.php;
           include fastcgi.conf;
        }
        location /status {
           stub_status on;
           access_log off;
        }
    }

        注意:这个状态是监控的整个nginx服务器的,而不是单独的某个虚拟主机。

           所以不需要为每个虚拟主机添加status,新建一个status.conf的配置文件,然后输入内容:  

server {
        listen 80;
        server_name status.cmr.com.cn;
        location /status {
           stub_status on;
           access_log off;
        }

           然后把配置文件的路径添加到nginx.conf主配置文件中。  

        通过浏览器访问一下a.cmr.com.cn/status,得到结果如下:   

Active connections: 1       当前建立的TCP连接数,TCP状态为ESTABLISHED 
server accepts handled requests
 22 22 49 
Reading: 0 Writing: 1 Waiting: 0

C:\Users\yangjianbo>netstat -ano | find "192.168.0.201:80"
TCP 192.168.0.106:49741 192.168.0.201:80 ESTABLISHED 4048

         server :表示从nginx启动后共有多少TCP连接

         accepts:表示从nginx启动后成功多少TCP连接

         handled request:表示一共处理了多少请求requests

         reading:nginx读取客户端的header信息数

         writing:nginx返回给客户端的header信息数

        waiting:nginx已经处理完正在等候下一次请求的驻留TCP连接数  wating=active -(reading+writing)

        淘宝自行研发的tengine里面多了一项:requests_time,增加对每请求的响应时间的统计:在nginx status模块中增加了所有请求的总响应时间(request_time),单位为ms.

      4.  为nginx增加错误日志

          在主配置文件添加:error_log logs/error.log;

          格式: error_log      file       level;

          level:[debug|info|notie|warn|error|crit|alert|emerg]  级别越少,信息越少,生产使用warn|error|crit即可。

22.  nginx访问日志

      1.  定义访问日志格式

          log_format     main   'nginx日志变量';

          常见的日志变量:

          $remote_addr  访问网站的客户端地址

          $http_x_forwarded_for  当前端有代理服务器时,设置web节点记录客户端地址,前提是代理服务器要使用x_forwarded_for

          $remote_user  远程客户端用户名称

          $time_local  记录访问时间和时区

          $request  用户的http请求首行

          $status  http状态码

          $body_byptes_sents  响应体大小

          $http_referer  记录此次请求从哪个链接访问过来的,可以根据referer进行防盗链

          $http_user_agent  记录客户端访问信息

          $request_time  客户端请求耗时,单位为秒

      2.  日志记录的配置

          access_log     file      main;

      3.  访问日志配置实战

          log_format在http标签配置

[root@rsync-server conf]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$request_time"'; 
    sendfile        on;
    keepalive_timeout  65;
     server {
        listen 81;
        server_name 192.168.0.201;
        location / {
           root html/learning;
           index index.html index.htm;
           }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
     server {
        listen 82;
        server_name 192.168.0.201;
        location / {
           root html/www;
           index index.html index.htm;
           }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
      server {
        listen 83;
        server_name 192.168.0.201;
        location / {
           root html/learning;
           index index.html index.htm;
           }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
     server {
        listen 83;
        server_name 192.168.0.202;
        location / {
           root html/www;
           index index.html index.htm;
           }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    include website/learning.conf;
    include website/www.conf;
}

          access_log在server标签配置

root@rsync-server website]# cat learning.conf 
    server {
        listen 80;
        server_name learning.cmr.com.cn a.cmr.com.cn;
        access_log logs/learning.txt main;
        location / {
           root html/learning;
           index index.html index.htm;
           }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ .*\.(php|php5)?$ {
           root html/learning;
           fastcgi_pass 127.0.0.1:9000;
           fastcgi_index index.php;
           include fastcgi.conf;
        }
        location /status {
           stub_status on;
           access_log off;
        }
    }

      4.  访问日志切割

          简单的脚本:

[root@rsync-server scripts]# cat access_log.sh 
#!/bin/bash
logurl="/application/nginx/logs"
cd ${logurl}
mv learning.log "learning"`date +'%F'`.log
/application/nginx/sbin/nginx -s reload

[root@rsync-server scripts]# crontab -l

37 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >>/tmp/ntp.log

39 18 * * * /bin/sh /server/scripts/access_log.sh >/dev/null 2>&1

      5.  access_log标签使用的位置

          可以使用在http,server,location中。

          也可以自定义变量。

log_format back_log '$http_host $remote_addr $upstream_addr [$time_local] "$request" $status $body_bytes_sent "$username_cookie#$request_body" "$http_user_agent" $upstream_response_time $request_time';
log_format back_log_no_request_body '$http_host $remote_addr $upstream_addr [$time_local] "$request" $status $body_bytes_sent "$username_cookie" "$http_user_agent" $upstream_response_time $request_time';

set $username_cookie "";
if ($http_cookie ~* "username=(.+?)(?=;|$)") {
set $username_cookie $1;
}

        参考文档:

23.  nginx的location指令

1.  location的作用

        根据用户请求的URI来执行不同的应用。

2.  location的语法

        location [= | ~ | ~* | ^~ ]   uri  {

     ...........

                  }

     1.  =  表示精确匹配

   2.  ~  表示匹配正则表达式(区分大小写)

   3.  ~*  表示匹配正则表达式(不区分大小写)

   4.  ^~  表示匹配常规字符串后,不做正则表达式的匹配

   5.  !~  表示不匹配正则表达式(区分大小写)

   6.  !~*   表示不匹配正则表达式(不区分大小写)

3.  location的匹配规则顺序

      

nginx geoip 国家 nginx官网是哪个_html

25.  nginx的认证

      1.  认证可以设置在http,server,location标签中。

      2.  认证主要有两个参数,一个用来启用认证,一个指定认证账号和密码。

          auth_base string | off;

          auth_basic_user_file  file_path;

      3.  实战例子:

[root@nginx-server-proxy conf]# cat ceshi.conf 
server {
     listen    90  ;
     server_name  172.16.252.212 ;
     location / {
       root  html/ceshi;
       index index.html;
       auth_basic "cehsi";
       auth_basic_user_file /application/nginx/conf/htpasswd;
     }
}

        使用htpasswd命令生成用户名和密码。

        htpasswd -bc /application/nginx/conf/htpasswd yangjianbo 123

26.  访问nginx的时候,出现403forbidden错误的原因

    1.  当访问目录没有index文件的时候,会报出403错误。html/ceshi目录下没有index.html文件。

[root@nginx-server-proxy ceshi]# cat /application/nginx/conf/ceshi.conf 
server {
     listen    90  ;
     server_name  172.16.252.212 ;
     location / {
       root  html/ceshi;
       index index.html;
       auth_basic "cehsi";
       auth_basic_user_file /application/nginx/conf/htpasswd;
     }
}

    2.  当配置文件中的index参数没有的时候,会报出403错误。

[root@nginx-server-proxy conf]# cat ceshi.conf 
server {
     listen    90  ;
     server_name  172.16.252.212 ;
     location / {
       root  html/ceshi;
       #index index.html;
       auth_basic "cehsi";
       auth_basic_user_file /application/nginx/conf/htpasswd;
     }
}

    3.  当nginx用户没有页面文件的访问权限的时候,也会报错403。

        [root@nginx-server-proxy ceshi]# chmod 700 index.html 

    4.  在server或者location标签中,设置了访问控制。

[root@nginx-server-proxy conf]# cat ceshi.conf 
server {
     listen    90  ;
     server_name  172.16.252.212 ;
     location / {
       allow 172.16.20.149;
       deny all;
       root  html/ceshi;
       index index.html;
       #auth_basic "cehsi";
       #auth_basic_user_file /application/nginx/conf/htpasswd;
     }
}

27.  nginx的web服务优化实战

    1.  隐藏nginx版本

在http模块添加下面的内容:

server_tokens off;

    2.  配置worker进程数

    3.  配置cpu亲和性

    4.  配置worker进程并发连接数

    5.  配置文件打开数

    6.  配置高效传输模式

         在http模块添加下面的内容:

sendfile参数用于开启文件的高效传输模式。同时将tcp_nopush和tcp_nodelay两个指令设置为on。

sendfile on;

tcp_nopush on;

tcp_nodelay on;

    7.  配置nginx限制客户端请求体的大小

在主配置文件 的http标签,添加下面参数:

client_max_body_size 8m;

参数作用:设置最大的允许的客户端请求主体大小,在请求头域"content-Length",如果超过了此配置值,客户端会收到413错误。

此参数设置为0,表示禁止检查客户端请求主体大小。

    9.  配置gzip

location ~* .(css|js)$ {
            expires 240h;
             gzip on;
                gzip_min_length  1k;
                gzip_buffers     4 16k;
                gzip_http_version 1.0;
                gzip_comp_level 3;
                gzip_types       text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
                gzip_vary on;
}

 

    10.   配置epoll模型

    11.   配置防爬虫

        在server块中添加,如下信息:

if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") 
{ 
return 403; 
}

if ($http_user_agent ~* "mpcrawler" ) {
           return 302  https://www.baidu.com;
        }

28.  nginx的反向代理与负载均衡

29.  nginx如何支持https站点

31.  nginx的信号控制

32.  nginx负载均衡监测节点状态

    1.  模块名称:nginx_upstream_check_module

       用于主动式后端服务器健康检查

    2.  Tengine原生支持这个模块,而nginx则需要打补丁将该模块添加到nginx中。

       补丁地址:https://github.com/yaoweibin/nginx_upstream_check_module

    3.  安装nginx_upstream_check_module这个模块

       wget https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master

       unzip master

       cd nginx-1.6.3

       patch -p1 < ../nginx_upstream_check_module-master/check_1.5.12+.patch

       ./configure --prefix=/usr/loca/nginx/   --add-module=../nginx_upstream_check_module-master

       make  如果第一次装还需要执行make install,如果已经安装过nginx,只执行make就可以了。

    4.  例子:

http {

        upstream cluster {

            # simple round-robin
            server 192.168.0.1:80;
            server 192.168.0.2:80;

            check interval=5000 rise=1 fall=3 timeout=4000;

            #check interval=3000 rise=2 fall=5 timeout=1000 type=ssl_hello;

            #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
            #check_http_send "HEAD / HTTP/1.0\r\n\r\n";
            #check_http_expect_alive http_2xx http_3xx;
        }

        server {
            listen 80;

            location / {
                proxy_pass http://cluster;
            }

            location /status {
                check_status;

                access_log   off;
                allow SOME.IP.ADD.RESS;
                deny all;
           }
        }

    }

      标红的表示:每5秒检查一次,请求一次正常则标记realserver为up,如果检测3次失败,就标记为down,  

33.  nginx常见错误

    1.  upstream timed out(110: connection timed out) while reading response header from upstream

        解决方法:

    2.  2019/10/11 05:05:42 [crit] 22938#0: *39617914 SSL_do_handshake() failed (SSL: error:140A1175:SSL routines:SSL_BYTES_TO_CIPHER_LIST:inappropriate fallback) while SSL handshaking, client: 208.100.26.235, server: 0.0.0.0:443

        解决方法:                

 


4.Systemd 命令和 sysvinit 命令的对照表

 

nginx geoip 国家 nginx官网是哪个_nginx_02

5.Sysvinit 运行级别和 systemd 目标的对应表

nginx geoip 国家 nginx官网是哪个_php_03

一往无前虎山行,拨开云雾见光明