• Nginx 安装和配置
    • Nginx 说明
    • 来自网络上的一个好介绍
    • Nginx 源码编译安装
    • 把 Nginx 添加到系统服务中
    • Nginx 全局变量
    • Nginx 配置
      • Nginx 在 1.8.1 版本下的默认配置(去掉注释)
      • HTTP 服务,虚拟主机
      • 反向代理和负载均衡
      • 配置 HTTPS 服务(SSL 证书配置)
    • Nginx 配置文件常用配置积累
      • location 配置
      • HTTP 服务,绑定多个域名
      • 安装第三方模块
      • 生成规格图
      • 启用 Gzip 压缩
      • 防盗链
      • Nginx 禁止特定用户代理(User Agents)访问,静止指定 IP 访问
      • Nginx 缓存
      • Nginx 自动分割日志文件
      • Nginx 处理跨域请求
      • 安全相预防
    • 使用 logrotate 做 nginx 日志轮询分割
      • 杂七杂八
    • 资料

    Nginx 安装和配置

    Nginx 说明

    • Nginx 是一个很强大的高性能 Web 和反向代理服务器,常被我们用作负载均衡服务器,也可以作为邮件代理服务器
    • Nginx WIKI:https://zh.wikipedia.org/zh/Nginx
    • Nginx 百科:http://baike.baidu.com/item/nginx
    • Nginx 官网:http://nginx.org/en/
    • Nginx 官网下载:http://nginx.org/en/download.html
      • 源码包方式下载:http://nginx.org/en/download.html,注意该页面的:Stable version,这个表示稳定版本,2016-03-22 最新版本是:nginx-1.8.1,这是一个 tar.gz 的文件链接。
      • 构建包方式下载:http://nginx.org/en/linux_packages.html#stable
    • Nginx 文档:
      • 优先:https://www.nginx.com/resources/wiki/
      • 次要:http://nginx.org/en/docs/
    • Nginx 模块地址:https://www.nginx.com/resources/wiki/modules/

    来自网络上的一个好介绍

    • 来源:https://help.aliyun.com/knowledge_detail/6703521.html?spm=5176.788314854.2.2.CdMGlB
    • 传统上基于进程或线程模型架构的 Web 服务通过每进程或每线程处理并发连接请求,这势必会在网络和 I/O 操作时产生阻塞,其另一个必然结果则是对内存或 CPU 的利用率低下。生成一个新的进程/线程需要事先备好其运行时环境,这包括为其分配堆内存和栈内存,以及为其创建新的执行上下文等。这些操作都需要占用 CPU,而且过多的进程/线程还会带来线程抖动或频繁的上下文切换,系统性能也会由此进一步下降。
    • 在设计的最初阶段,Nginx 的主要着眼点就是其高性能以及对物理计算资源的高密度利用,因此其采用了不同的架构模型。受启发于多种操作系统设计中基于“事件”的高级处理机制,nginx采用了模块化、事件驱动、异步、单线程及非阻塞的架构,并大量采用了多路复用及事件通知机制。在 Nginx 中,连接请求由为数不多的几个仅包含一个线程的进程 Worker 以高效的回环(run-loop)机制进行处理,而每个 Worker 可以并行处理数千个的并发连接及请求。
    • 如果负载以 CPU 密集型应用为主,如 SSL 或压缩应用,则 Worker 数应与 CPU 数相同;如果负载以 IO 密集型为主,如响应大量内容给客户端,则 Worker 数应该为 CPU 个数的 1.5 或 2 倍。
    • Nginx会按需同时运行多个进程:一个主进程(Master)和几个工作进程(Worker),配置了缓存时还会有缓存加载器进程(Cache Loader)和缓存管理器进程(Cache Manager)等。所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。主进程以root用户身份运行,而 Worker、Cache Loader 和 Cache manager 均应以非特权用户身份运行。
    • 主进程主要完成如下工作:
      • 1.读取并验正配置信息;
      • 2.创建、绑定及关闭套接字;
      • 3.启动、终止及维护worker进程的个数;
      • 4.无须中止服务而重新配置工作特性;
      • 5.控制非中断式程序升级,启用新的二进制程序并在需要时回滚至老版本;
      • 6.重新打开日志文件,实现日志滚动;
      • 7.编译嵌入式perl脚本;
    • Worker 进程主要完成的任务包括:
      • 1.接收、传入并处理来自客户端的连接;
      • 2.提供反向代理及过滤功能;
      • 3.nginx任何能完成的其它任务;
    • Cache Loader 进程主要完成的任务包括:
      • 1.检查缓存存储中的缓存对象;
      • 2.使用缓存元数据建立内存数据库;
    • Cache Manager 进程的主要任务:
      • 1.缓存的失效及过期检验;

    Nginx 源码编译安装

    • 官网下载最新稳定版本 1.8.1,大小:814K
    • 官网安装说明:https://www.nginx.com/resources/wiki/start/topics/tutorials/install/
    • 源码编译配置参数说明:
      • https://www.nginx.com/resources/wiki/start/topics/tutorials/installoptions/
      • http://nginx.org/en/docs/configure.html
    • 开始安装:

      • 安装依赖包:yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
      • 预设几个文件夹,方便等下安装的时候有些文件可以进行存放:
        • mkdir -p /usr/local/nginx /var/log/nginx /var/temp/nginx /var/lock/nginx
      • 下载源码包:wget http://nginx.org/download/nginx-1.8.1.tar.gz
      • 解压:tar zxvf nginx-1.8.1.tar.gz
      • 进入解压后目录:cd nginx-1.8.1/
      • 编译配置:

        1. ./configure \
        2. --prefix=/usr/local/nginx \
        3. --pid-path=/var/local/nginx/nginx.pid \
        4. --lock-path=/var/lock/nginx/nginx.lock \
        5. --error-log-path=/var/log/nginx/error.log \
        6. --http-log-path=/var/log/nginx/access.log \
        7. --with-http_gzip_static_module \
        8. --http-client-body-temp-path=/var/temp/nginx/client \
        9. --http-proxy-temp-path=/var/temp/nginx/proxy \
        10. --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
        11. --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
        12. --with-http_ssl_module \
        13. --http-scgi-temp-path=/var/temp/nginx/scgi
      • 编译:make

      • 安装:make install
    • 启动 Nginx

      • 先检查是否在 /usr/local 目录下生成了 Nginx 等相关文件:cd /usr/local/nginx;ll,正常的效果应该是显示这样的:

        1. drwxr-xr-x. 2 root root 4096 3 22 16:21 conf
        2. drwxr-xr-x. 2 root root 4096 3 22 16:21 html
        3. drwxr-xr-x. 2 root root 4096 3 22 16:21 sbin
      • 停止防火墙:service iptables stop

        • 或是把 80 端口加入到的排除列表:
        • sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
        • sudo service iptables save
        • sudo service iptables restart
      • 启动:/usr/local/nginx/sbin/nginx,启动完成 shell 是不会有输出的
      • 检查 时候有 Nginx 进程:ps aux | grep nginx,正常是显示 3 个结果出来
      • 检查 Nginx 是否启动并监听了 80 端口:netstat -ntulp | grep 80
      • 访问:192.168.1.114,如果能看到:Welcome to nginx!,即可表示安装成功
      • 检查 Nginx 启用的配置文件是哪个:/usr/local/nginx/sbin/nginx -t
      • 刷新 Nginx 配置后重启:/usr/local/nginx/sbin/nginx -s reload
      • 停止 Nginx:/usr/local/nginx/sbin/nginx -s stop
      • 如果访问不了,或是出现其他信息看下错误立即:vim /var/log/nginx/error.log

    把 Nginx 添加到系统服务中

    • 新建文件:vim /etc/init.d/nginx
    • 添加如下内容:
    1. #!/bin/bash
    2. #nginx执行程序路径需要修改
    3. nginxd=/usr/local/nginx/sbin/nginx
    4. # nginx配置文件路径需要修改
    5. nginx_config=/usr/local/nginx/conf/nginx.conf
    6. # pid 地址需要修改
    7. nginx_pid=/var/local/nginx/nginx.pid
    8. RETVAL=0
    9. prog="nginx"
    10. # Source function library.
    11. . /etc/rc.d/init.d/functions
    12. # Source networking configuration.
    13. . /etc/sysconfig/network
    14. # Check that networking is up.
    15. [ ${NETWORKING} = "no" ] && exit 0
    16. [ -x $nginxd ] || exit 0
    17. # Start nginx daemons functions.
    18. start() {
    19. if [ -e $nginx_pid ];then
    20. echo "nginx already running...."
    21. exit 1
    22. fi
    23. echo -n $"Starting $prog: "
    24. daemon $nginxd -c ${nginx_config}
    25. RETVAL=$?
    26. echo
    27. [ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
    28. return $RETVAL
    29. }
    30. # Stop nginx daemons functions.
    31. # pid 地址需要修改
    32. stop() {
    33. echo -n $"Stopping $prog: "
    34. killproc $nginxd
    35. RETVAL=$?
    36. echo
    37. [ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/local/nginx/nginx.pid
    38. }
    39. # reload nginx service functions.
    40. reload() {
    41. echo -n $"Reloading $prog: "
    42. #kill -HUP `cat ${nginx_pid}`
    43. killproc $nginxd -HUP
    44. RETVAL=$?
    45. echo
    46. }
    47. # See how we were called.
    48. case "$1" in
    49. start)
    50. start
    51. ;;
    52. stop)
    53. stop
    54. ;;
    55. reload)
    56. reload
    57. ;;
    58. restart)
    59. stop
    60. start
    61. ;;
    62. status)
    63. status $prog
    64. RETVAL=$?
    65. ;;
    66. *)
    67. echo $"Usage: $prog {start|stop|restart|reload|status|help}"
    68. exit 1
    69. esac
    70. exit $RETVAL
    • 修改权限:chmod 755 /etc/init.d/nginx
    • 启动服务:service nginx start
    • 停止服务:service nginx stop
    • 重启服务:service nginx restart

    Nginx 全局变量

    • $arg_PARAMETER #这个变量包含GET请求中,如果有变量PARAMETER时的值。
    • $args #这个变量等于请求行中(GET请求)的参数,例如foo=123&bar=blahblah;
    • $binary_remote_addr #二进制的客户地址。
    • $body_bytes_sent #响应时送出的body字节数数量。即使连接中断,这个数据也是精确的。
    • $content_length #请求头中的Content-length字段。
    • $content_type #请求头中的Content-Type字段。
    • $cookie_COOKIE #cookie COOKIE变量的值
    • $document_root #当前请求在root指令中指定的值。
    • $document_uri #与$uri相同。
    • $host #请求主机头字段,否则为服务器名称。
    • $hostname #Set to the machine’s hostname as returned by gethostname
    • $http_HEADER
    • $is_args #如果有$args参数,这个变量等于”?”,否则等于””,空值。
    • $http_user_agent #客户端agent信息
    • $http_cookie #客户端cookie信息
    • $limit_rate #这个变量可以限制连接速率。
    • $query_string #与$args相同。
    • $request_body_file #客户端请求主体信息的临时文件名。
    • $request_method #客户端请求的动作,通常为GET或POST。
    • $remote_addr #客户端的IP地址。
    • $remote_port #客户端的端口。
    • $remote_user #已经经过Auth Basic Module验证的用户名。
    • $request_completion #如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty)。
    • $request_method #GET或POST
    • $request_filename #当前请求的文件路径,由root或alias指令与URI请求生成。
    • $request_uri #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。不能修改。
    • $scheme #HTTP方法(如http,https)。
    • $server_protocol #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
    • $server_addr #服务器地址,在完成一次系统调用后可以确定这个值。
    • $server_name #服务器名称。
    • $server_port #请求到达服务器的端口号。
    • $uri #不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。该值有可能和$request_uri 不一致。
    • $request_uri是浏览器发过来的值。该值是rewrite后的值。例如做了internal redirects后。

    Nginx 配置

    • Nginx 默认配置文件:vim /usr/local/nginx/conf/nginx.conf

    Nginx 在 1.8.1 版本下的默认配置(去掉注释)

    1. user root;#我这里习惯使用 root,所以这里需要这样设置。如果你有为你的 nginx 专门配置一个用户,这里需要改为你的用户
    2. worker_processes 1;
    3. events {
    4. worker_connections 1024;
    5. }
    6. http {
    7. include mime.types;
    8. default_type application/octet-stream;
    9. sendfile on;
    10. keepalive_timeout 65;
    11. server {
    12. listen 80;
    13. server_name localhost;
    14. location / {
    15. root html;
    16. index index.html index.htm;
    17. }
    18. error_page 500 502 503 504 /50x.html;
    19. location = /50x.html {
    20. root html;
    21. }
    22. }
    23. }

    HTTP 服务,虚拟主机

    • 停止防火墙:service iptables stop,防止出现特别干扰
    • 编辑默认的配置文件:vim /usr/local/nginx/conf/nginx.conf
    • 设置两个虚拟主机(通过端口来区分开)
    1. user root;#我这里习惯使用 root,所以这里需要这样设置。如果你有为你的 nginx 专门配置一个用户,这里需要改为你的用户
    2. worker_processes 1;
    3. events {
    4. worker_connections 1024;
    5. }
    6. http {
    7. include mime.types;
    8. default_type application/octet-stream;
    9. sendfile on;
    10. keepalive_timeout 65;
    11. # 一个 server 代表一个虚拟主机
    12. server {
    13. listen 80;
    14. server_name localhost;
    15. location / {
    16. # 虚拟机根目录是 /usr/local/nginx/html 目录
    17. root html;
    18. # 虚拟机首页是 /usr/local/nginx/html 目录下这两个文件
    19. index index.html index.htm;
    20. }
    21. error_page 500 502 503 504 /50x.html;
    22. location = /50x.html {
    23. root html;
    24. }
    25. }
    26. server {
    27. # 第二个虚拟机的端口是 90,服务地址还是本地
    28. listen 90;
    29. server_name localhost;
    30. location / {
    31. root html90;
    32. index index.html index.htm;
    33. }
    34. error_page 500 502 503 504 /50x.html;
    35. location = /50x.html {
    36. root html;
    37. }
    38. }
    39. }
    • 设置两个虚拟主机(通过域名来区分开)
    1. user root;#我这里习惯使用 root,所以这里需要这样设置。如果你有为你的 nginx 专门配置一个用户,这里需要改为你的用户
    2. worker_processes 1;
    3. events {
    4. worker_connections 1024;
    5. }
    6. http {
    7. include mime.types;
    8. default_type application/octet-stream;
    9. sendfile on;
    10. keepalive_timeout 65;
    11. # 一个 server 代表一个虚拟主机
    12. server {
    13. listen 80;
    14. # 两个虚拟主机都使用 80 端口,设置不同域名
    15. server_name code.youmeek.com;
    16. location / {
    17. # 虚拟机根目录是 /usr/local/nginx/html 目录
    18. root html;
    19. # 虚拟机首页是 /usr/local/nginx/html 目录下这两个文件
    20. index index.html index.htm;
    21. }
    22. error_page 500 502 503 504 /50x.html;
    23. location = /50x.html {
    24. root html;
    25. }
    26. }
    27. server {
    28. listen 80;
    29. # 两个虚拟主机都使用 80 端口,设置不同域名
    30. server_name i.youmeek.com;
    31. location / {
    32. root html-i;
    33. index index.html index.htm;
    34. }
    35. error_page 500 502 503 504 /50x.html;
    36. location = /50x.html {
    37. root html;
    38. }
    39. }
    40. }

    反向代理和负载均衡

    • 最精简的环境:一台虚拟机

      • 1 个 JDK
      • 1 个 Nginx
      • 2 个 Tomcat
    • Nginx 配置:

    1. user root;#我这里习惯使用 root,所以这里需要这样设置。如果你有为你的 nginx 专门配置一个用户,这里需要改为你的用户
    2. worker_processes 1;
    3. events {
    4. worker_connections 1024;
    5. }
    6. http {
    7. include mime.types;
    8. default_type application/octet-stream;
    9. sendfile on;
    10. keepalive_timeout 65;
    11. # 自己定义的两个 tomcat 请求地址和端口
    12. # 也就是当浏览器请求:tomcat.youmeek.com 的时候从下面这两个 tomcat 中去找一个进行转发
    13. upstream tomcatCluster {
    14. server 192.168.1.114:8080;
    15. server 192.168.1.114:8081;
    16. # 添加 weight 字段可以表示权重,值越高权重越大,默认值是 1,最大值官网没说,一般如果设置也就设置 3,5,7 这样的数
    17. # 官网:https://www.nginx.com/resources/admin-guide/load-balancer/#weight
    18. # server 192.168.1.114:8080 weight=2;
    19. # server 192.168.1.114:8081 weight=1;
    20. }
    21. server {
    22. listen 80;
    23. server_name tomcat.youmeek.com;
    24. location / {
    25. proxy_pass http://tomcatCluster;
    26. index index.html index.htm;
    27. }
    28. }
    29. }

    配置 HTTPS 服务(SSL 证书配置)

    • 免费申请 SSL 证书渠道
      • 教程:https://www.wn789.com/4394.html
      • SSL For Free:https://www.sslforfree.com
      • 配置要点其实就是下面该图:
    • 免费申请 SSL 证书渠道
    • 一般你会下载下面两个文件:certificate.crtprivate.key
    • 如果你需要把 crt 和 key 的证书转换成 keystore(如果你有这个需求的话)
    • 从 key 和 crt 生成 pkcs12 格式的 keystore,生成过程会让人你输入密码,这个密码下面会用到,我这里假设输入 123456
      • openssl pkcs12 -export -in certificate.crt -inkey private.key -out youmeek.p12 -name youmeek -CAfile certificate.crt -caname -chain
      • keytool -importkeystore -v -srckeystore youmeek.p12 -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore youmeek.keystore -deststoretype jks -deststorepass 123456
    • 修改 nginx 配置文件,增加对 HTTPS 支持(下面的配置是基于默认安装 nginx 后的配置)
    • vim /usr/local/nginx/conf/nginx.conf
    1. worker_processes 1;
    2. events {
    3. worker_connections 1024;
    4. }
    5. http {
    6. include mime.types;
    7. default_type application/octet-stream;
    8. sendfile on;
    9. keepalive_timeout 65;
    10. # 如果访问 http 也直接跳转到 https
    11. server {
    12. listen 80;
    13. server_name sso.youmeek.com;
    14. return 301 https://$server_name$request_uri;
    15. }
    16. # crt 和 key 文件的存放位置根据你自己存放位置进行修改
    17. server {
    18. listen 443;
    19. server_name sso.youmeek.com;
    20. ssl on;
    21. ssl_certificate /opt/ssl/certificate.crt;
    22. ssl_certificate_key /opt/ssl/private.key;
    23. location / {
    24. root html;
    25. index index.html index.htm;
    26. }
    27. error_page 500 502 503 504 /50x.html;
    28. location = /50x.html {
    29. root html;
    30. }
    31. }
    32. }

    Nginx 配置文件常用配置积累

    location 配置

    1. = 开头表示精确匹配
    2. ^~ 开头表示uri以某个常规字符串开头,不是正则匹配
    3. ~ 开头表示区分大小写的正则匹配;
    4. ~* 开头表示不区分大小写的正则匹配
    5. / 通用匹配, 如果没有其它匹配,任何请求都会匹配到
    6. location / {
    7. }
    8. location /user {
    9. }
    10. location = /user {
    11. }
    12. location /user/ {
    13. }
    14. location ^~ /user/ {
    15. }
    16. location /user/youmeek {
    17. }
    18. location ~ /user/youmeek {
    19. }
    20. location ~ ^(/cas/|/casclient1/|/casclient2/|/casclient3/) {
    21. }
    22. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico|woff|woff2|ttf|eot|txt)$ {
    23. }
    24. location ~ .*$ {
    25. }

    HTTP 服务,绑定多个域名

    • https://www.ttlsa.com/nginx/use-nginx-proxy/

    安装第三方模块

    生成规格图

    启用 Gzip 压缩

    防盗链

    • https://help.aliyun.com/knowledge_detail/5974693.html?spm=5176.788314853.2.18.s4z1ra

    Nginx 禁止特定用户代理(User Agents)访问,静止指定 IP 访问

    • https://www.ttlsa.com/nginx/how-to-block-user-agents-using-nginx/
    • https://help.aliyun.com/knowledge_detail/5974693.html?spm=5176.788314853.2.18.s4z1ra
    • <>
    • <>
    • <>

    Nginx 缓存

    Nginx 自动分割日志文件

    Nginx 处理跨域请求

    安全相预防

    在配置文件中设置自定义缓存以限制缓冲区溢出攻击的可能性
    client_body_buffer_size 1K;
    client_header_buffer_size 1k;
    client_max_body_size 1k;
    large_client_header_buffers 2 1k;

    1. 将timeout设低来防止DOS攻击
      所有这些声明都可以放到主配置文件中。
      client_body_timeout 10;
      client_header_timeout 10;
      keepalive_timeout 5 5;
      send_timeout 10;
    1. 限制用户连接数来预防DOS攻击
      limit_zone slimits $binary_remote_addr 5m;
      limit_conn slimits 5;

    使用 logrotate 做 nginx 日志轮询分割

    • 前提:

      • 我 nginx 的成功日志路径:/var/log/nginx/access.log
      • 我 nginx 的错误日志路径:/var/log/nginx/error.log
      • pid 路径:/var/local/nginx/nginx.pid
    • 一般情况 CentOS 是装有:logrotate,你可以检查下:rpm -ql logrotate,如果有相应结果,则表示你也装了。

    • logrotate 配置文件一般在:

      • 全局配置:/etc/logrotate.conf 通用配置文件,可以定义全局默认使用的选项。
      • 自定义配置,放在这个目录下的都算是:/etc/logrotate.d/
    • 针对 nginx 创建自定义的配置文件:vim /etc/logrotate.d/nginx

    • 文件内容如下:
    1. /var/log/nginx/access.log /var/log/nginx/error.log {
    2. create 644 root root
    3. notifempty
    4. daily
    5. rotate 15
    6. missingok
    7. dateext
    8. sharedscripts
    9. postrotate
    10. if [ -f /var/local/nginx/nginx.pid ]; then
    11. kill -USR1 `cat /var/local/nginx/nginx.pid`
    12. fi
    13. endscript
    14. }
    • /var/log/nginx/access.log /var/log/nginx/error.log:多个文件用空格隔开,也可以用匹配符:/var/log/nginx/*.log
    • notifempty:如果是空文件的话,不转储
    • create 644 root root:create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
    • 调用频率,有:daily,weekly,monthly可选
    • rotate 15:一次将存储15个归档日志。对于第16个归档,时间最久的归档将被删除。
    • sharedscripts:所有的日志文件都轮转完毕后统一执行一次脚本
    • missingok:如果日志文件丢失,不报错继续执行下一个
    • dateext:文件后缀是日期格式,也就是切割后文件是:xxx.log-20131216.gz 这样,如果注释掉,切割出来是按数字递增,即前面说的 xxx.log-1 这种格式
    • postrotate:执行命令的开始标志
    • endscripthttp:执行命令的结束标志
    • if 判断的意思不是中止Nginx的进程,而是传递给它信号重新生成日志,如果nginx没启动不做操作
    • 更多参数可以看:http://www.cnblogs.com/zengkefu/p/5498324.html
    • 手动执行测试:/usr/sbin/logrotate -vf /etc/logrotate.d/nginx
    • 参数:‘-f’选项来强制logrotate轮循日志文件,‘-v’参数提供了详细的输出。
    • 验证是否手动执行成功,查看 cron 的日志即可:grep logrotate /var/log/cron
    • 设置 crontab 定时任务:vim /etc/crontab,添加下面内容:
    1. //每天02点10分执行一次
    2. 10 02 * * * /usr/sbin/logrotate -f /etc/logrotate.d/nginx

    杂七杂八

    • nginx实现简体繁体字互转以及中文转拼音
    • nginx记录分析网站响应慢的请求(ngx_http_log_request_speed)
    • nginx空白图片(empty_gif模块)

    资料

    • https://help.aliyun.com/knowledge_detail/5974693.html?spm=5176.788314853.2.18.s4z1ra
    • http://www.ydcss.com/archives/466
    • http://blog.sae.sina.com.cn/archives/2107
    • http://www.nginx.cn/273.html