• 状态页


      1. #基于ngx_http_Stud_Status_module模块实现
      2. location /nginx_status {
      3. stub_status;
      4. allow 10.0.10.7;
      5. allow 127.0.0.1;
      6. deny all;
      7. }
      8. Active connections 当前处于活动状态的客户端连接数,包括连接等待空闲连接数。
      9. accepts:统计总值,Nginx⾃启动后已经接受的客户端请求的总数。
      10. handled:统计总值,Nginx⾃启动后已经处理完成的客户端请求的总数,通常等于accepts,除⾮有因
      11. worker_connections限制等被拒绝的连接。
      12. requests:统计总值,Nginx⾃启动后客户端发来的总的请求数。
      13. Reading:当前状态,正在读取客户端请求报⽂⾸部的连接的连接数。
      14. Writing:当前状态,正在向客户端发送响应报⽂过程中的连接数。
      15. Waiting:当前状态,正在等待客户端发出请求的空闲连接数,开启 keep-alive的情况下,这个值等于
      16. active (reading+writing),
    • 第三方模块

      • echo-nginx-module
    • 变量使用

      • 内置变量 变量信息**$remote_addr 客户端地址
        $args URL的指令,也就是参数传递
        $host 请求的主机
        $http_user_agent 客户端浏览器的信息
        $http_cookie 客户端的cookie
        $remote_port 客户端的端口
        $remote_user 用户名
        $request_method 请求方法
        $request_body_file 做反向代理发给后端服务器的本地资源路径
        $request_filename 请求的资源文件路径
        $request_uri 原始URI ,不包括主机名
        $scheme 请求协议
        $server_protocol 客户端请求资源使用的协议版本
        $server_addr 保存了服务器的IP地址
        $server_name 请求的服务器的主机名
        $server_port 请求的服务器的端口号**

      • 自定义变量

        1. set $name ahei;
        2. echo $name;
    • 自定义访问日志

      • 默认格式 ```shell log_format nginx_format ‘$remote_addr - $remote_user [$time_local] “$request” ‘ ‘$status $body_bytes_sent “$http_referer” ‘ ‘“$http_user_agent” “$http_x_forwarded_for”‘ ‘$server_name:$server_port’; access_log logs/access.log nginx_format;

      客户端地址-用户[时间]请求方式协议 状态 发送字节 头部携带信息 客户端信息 浏览器信息 请求主机。请求端口号

      1. - **json格式**
      2. ```shell
      3. log_format access_json '{"@timestamp":"$time_iso8601",'
      4. '"host":"$server_addr",'
      5. '"clientip":"$remote_addr",'
      6. '"size":$body_bytes_sent,'
      7. '"responsetime":$request_time,'
      8. '"upstreamtime":"$upstream_response_time",'
      9. '"upstreamhost":"$upstream_addr",'
      10. '"http_host":"$host",'
      11. '"uri":"$uri",'
      12. '"domain":"$host",'
      13. '"xff":"$http_x_forwarded_for",'
      14. '"referer":"$http_referer",'
      15. '"tcp_xff":"$proxy_protocol_addr",'
      16. '"http_user_agent":"$http_user_agent",'
      17. '"status":"$status"}';
      18. access_log /apps/nginx/logs/access_json.log access_json;
    • 压缩功能

      1. #启⽤或禁⽤gzip压缩,默认关闭
      2. gzip on | off;
      3. #压缩⽐由低到⾼从1到9,默认为1
      4. gzip_comp_level level;
      5. #禁⽤IE6 gzip功能
      6. gzip_disable "MSIE [1-6]\.";
      7. #gzip压缩的最⼩⽂件,⼩于设置值的⽂件将不会压缩
      8. gzip_min_length 1k;
      9. #启⽤压缩功能时,协议的最⼩版本,默认HTTP/1.1
      10. gzip_http_version 1.0 | 1.1;
      11. #指定Nginx服务需要向服务器申请的缓存空间的个数*⼤⼩,默认32 4k|16 8k;
      12. gzip_buffers number size;
      13. #指明仅对哪些类型的资源执⾏压缩操作;默认为gzip_types text/html,不⽤显示指定,否则出错
      14. gzip_types mime-type ...;
      15. #如果启⽤压缩,是否在响应报⽂⾸部插⼊“Vary: Accept-Encoding”
      16. gzip_vary on | off;

      1. cat nginx.conf
      2. gzip on ;
      3. gzip_comp_level 5;
      4. gzip_min_length 1k;
      5. gzip_types text/plain application/javascript application/x-javascript
      6. text/cssapplication/xml text/javascript application/x-httpd-php image/jpeg
      7. image/gif image/png;
      8. gzip_vary on ;
    • https功能

      • 实现步骤

        1. 1.客户端发起HTTPS请求:
        2. 客户端访问某个web端的https地址,⼀般都是443端⼝
        3. 2.服务端的配置:
        4. 采⽤https协议的服务器必须要有⼀套证书,可以通过⼀些组织申请,也可以⾃⼰制作,⽬前国内很多⽹站
        5. 都⾃⼰做的,当你访问⼀个⽹站的时候提示证书不可信任就表示证书是⾃⼰做的,证书就是⼀个公钥和私钥
        6. 匙,就像⼀把锁和钥匙,正常情况下只有你的钥匙可以打开你的锁,你可以把这个送给别⼈让他锁住⼀个箱
        7. ⼦,⾥⾯放满了钱或秘密,别⼈不知道⾥⾯放了什么⽽且别⼈也打不开,只有你的钥匙是可以打开的。
        8. 3.传送证书:
        9. 服务端给客户端传递证书,其实就是公钥,⾥⾯包含了很多信息,例如证书得到颁发机构、过期时间等等。
        10. 4.客户端解析证书:
        11. 这部分⼯作是有客户端完成的,⾸先回验证公钥的有效性,⽐如颁发机构、过期时间等等,如果发现异常则
        12. 会弹出⼀个警告框提示证书可能存在问题,如果证书没有问题就⽣成⼀个随机值,然后⽤证书对该随机值进
        13. ⾏加密,就像2步骤所说把随机值锁起来,不让别⼈看到。
        14. 5.传送4步骤的加密数据:
        15. 就是将⽤证书加密后的随机值传递给服务器,⽬的就是为了让服务器得到这个随机值,以后客户端和服务端
        16. 的通信就可以通过这个随机值进⾏加密解密了。
        17. 6.服务端解密信息:
        18. 服务端⽤私钥解密5步骤加密后的随机值之后,得到了客户端传过来的随机值(私钥),然后把内容通过该值
        19. 进⾏对称加密,对称加密就是将信息和私钥通过算法混合在⼀起,这样除⾮你知道私钥,不然是⽆法获取其
        20. 内部的内容,⽽正好客户端和服务端都知道这个私钥,所以只要机密算法够复杂就可以保证数据的安全性。
        21. 7.传输加密后的信息:
        22. 服务端将⽤私钥加密后的数据传递给客户端,在客户端可以被还原出原数据内容。
        23. 8.客户端解密信息:
        24. 客户端⽤之前⽣成的私钥获解密服务端传递过来的数据,由于数据⼀直是加密的,因此即使第三⽅获取到数
        25. 据也⽆法知道其详细内容
      • ssl参数配置

        1. ssl on | off;
        2. #为指定的虚拟主机配置是否启⽤ssl功能,此功能在1.15.0废弃,使⽤listen [ssl]替代。
        3. ssl_certificate /path/to/file;
        4. #当前虚拟主机使⽤使⽤的公钥⽂件,⼀般是crt⽂件
        5. ssl_certificate_key /path/to/file;
        6. #当前虚拟主机使⽤的私钥⽂件,⼀般是key⽂件
        7. ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
        8. #⽀持ssl协议版本,早期为ssl,现在是TSL,默认为后三个
        9. ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
        10. #配置ssl缓存
        11. off 关闭 none 暂不支持
        12. ssl_session_timeout time;
        13. #客户端连接可以复⽤ssl session cache中缓存的有效时⻓,默认5m
      • 自签名证书

        1. mkdir /apps/nginx/certs
        2. cd /apps/nginx/certs
        3. openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 3650 -out ca.crt
        4. #生成CA
        5. openssl req -newkey rsa:4096 -nodes -sha256 -keyout www.magedu.net.key -out www.magedu.net.csr
        6. #生成key和csr文件
        7. openssl x509 -req -days 3650 -in www.magedu.net.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out www.magedu.net.crt
        8. #签发证书
      • nginx配置证书

        1. listen 80;
        2. listen 443 ssl;
        3. ssl_certificate /apps/nginx/certs/www.magedu.net.crt;
        4. ssl_certificate_key /apps/nginx/certs/www.magedu.net.key;
        5. ssl_session_cache shared:sslcache:20m;
        6. ssl_session_timeout 10m;
      • 多域名配置HTTPS

        1. #制作key及csr文件
        2. openssl req -newkey rsa:4096 -nodes -sha256 -keyout mobile.magedu.net.key -out mobile.magedu.net.csr
        3. #签名证书
        4. openssl x509 -req -days 3650 -in mobile.magedu.net.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out mobile.magedu.net.crt
        5. #配置
        6. listen 443 ssl;
        7. server_name mobile.magedu.net;
        8. ssl_certificate /apps/nginx/certs/mobile.magedu.net.crt;
        9. ssl_certificate_key /apps/nginx/certs/mobile.magedu.net.key;
        10. ssl_session_cache shared:sslcache:20m;
        11. ssl_session_timeout 10m;
    • favicon.ico

      • 打开网址时显示的图标
        1. location = /favicon.ico {
        2. root /data/nginx/html/images;
        3. #expires 90d ; 设置过期时间
        4. }
    • 安全选项

      • 隐藏nginx版本号
        1. vim /usr/local/src/nginx/src/http/ngx_http_header_filter_module.c
        2. 49 static u_char ngx_http_server_string[] = "Server: linux38" CRLF;
        3. #定义响应报⽂中的server字段信息