• Nginx学习


    一、安装

    1. 官网http://nginx.org/下载对应的nginx包,推荐使用稳定版本

    2. 上传nginx到linux系统

    3. 安装依赖环境

      (1)安装gcc环境

        yum install gcc-c++
      

      (2)安装PCRE库,用于解析正则表达式

       yum install -y pcre pcre-devel
      

      (3)zlib压缩和解压缩依赖,

       yum install -y zlib zlib-devel
      

      (4)SSL 安全的加密的套接字协议层,用于HTTP安全传输,也就是https

       yum install -y openssl openssl-devel
      
    4. 解压,需要注意,解压后得到的是源码,源码需要编译后才能安装

      tar -zxvf nginx-1.16.1.tar.gz
      
    5. 编译之前,先创建nginx临时目录,如果不创建,在启动nginx的过程中会报错

      mkdir /var/temp/nginx -p
      
    6. 在nginx目录,输入如下命令进行配置,目的是为了创建makefile文件  

      ./configure 
      --prefix=/usr/local/nginx 
      --pid-path=/var/run/nginx/nginx.pid 
      --lock-path=/var/lock/nginx.lock 
      --error-log-path=/var/log/nginx/error.log 
      --http-log-path=/var/log/nginx/access.log 
      --with-http_gzip_static_module 
      --http-client-body-temp-path=/var/temp/nginx/client 
      --http-proxy-temp-path=/var/temp/nginx/proxy 
      --http-fastcgi-temp-path=/var/temp/nginx/fastcgi 
      --http-uwsgi-temp-path=/var/temp/nginx/uwsgi 
      --http-scgi-temp-path=/var/temp/nginx/scgi
    7. make编译

      make
    8. 安装

      make install
    9. 进入sbin目录启动nginx

      ./nginx

    二、nginx.conf 核心配置文件

    1. 设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,默认为nobody

      user root;
      
    2. worker进程工作数设置,一般来说CPU有几个,就设置几个,或者设置为N-1也行

      worker_processes 1;
      
    3. nginx 日志级别debug | info | notice | warn | error | crit | alert | emerg,错误级别从左到右越来越大

    4. 设置nginx进程 pid

      pid        logs/nginx.pid;
      
    5. 设置工作模式

      events {
          # 默认使用epoll
          use epoll;
          # 每个worker允许连接的客户端最大连接数
          worker_connections  10240;
      }
      
    6. http 是指令块,针对http网络传输的一些指令配置

      http {
      }
      
    7. include 引入外部配置,提高可读性,避免单个配置文件过大

      include       mime.types;
      
    8. 设定日志格式,main为定义的格式名称,如此 access_log 就可以直接使用这个变量了

      参数名参数意义
      $remote_addr 客户端ip
      $remote_user 远程客户端用户名,一般为:’-’
      $time_local 时间和时区
      $request 请求的url以及method
      $status 响应状态码
      $body_bytes_send 响应客户端内容字节数
      $http_referer 记录用户从哪个链接跳转过来的
      $http_user_agent 用户所使用的代理,一般来时都是浏览器
      $http_x_forwarded_for 通过代理服务器来记录客户端的ip
    9. sendfile使用高效文件传输,提升传输性能。启用后才能使用tcp_nopush,是指当数据表累积一定大小后才发送,提高了效率。

      sendfile        on;
      tcp_nopush      on;
      
    10. keepalive_timeout设置客户端与服务端请求的超时时间,保证客户端多次请求的时候不会重复建立新的连接,节约资源损耗。

    #keepalive_timeout  0;
    keepalive_timeout  65;
    1. gzip启用压缩,html/js/css压缩后传输会更快

      gzip on;
      
    2. server可以在http指令块中设置多个虚拟主机

      • listen 监听端口
      • server_name localhost、ip、域名
      • location 请求路由映射,匹配拦截
      • root 请求位置
      • index 首页设置
          server {
                  listen       88;
                  server_name  localhost;
          
                  location / {
                      root   html;
                      index  index.html index.htm;
                  }
          }

    三、root 与 alias

           假如服务器路径为:/home/imooc/files/img/face.png

     

      • root 路径完全匹配访问
        配置的时候为:

        location /imooc {
            root /home
        }
        

     

    用户访问的时候请求为:url:port/imooc/files/img/face.png

     

      • alias 可以为你的路径做一个别名,对用户透明
        配置的时候为:

        location /hello {
            alias /home/imooc
        }
        

        用户访问的时候请求为:url:port/hello/files/img/face.png,如此相当于为目录imooc做一个自定义的别名。

    四、日志分割

    1. 创建一个shell可执行文件:cut_my_log.sh,内容为:

      #!/bin/bash
      LOG_PATH="/var/log/nginx/"
      RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M)
      PID=/var/run/nginx/nginx.pid
      mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log
      mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log
      
      #向Nginx主进程发送信号,用于重新打开日志文件
      kill -USR1 `cat $PID`
    2. cut_my_log.sh添加可执行的权限:

      chmod +x cut_my_log.sh
      
    3. 测试日志切割后的结果:

      ./cut_my_log.sh
    4. crontab -e 编辑并且添加一行新的任务:

      59 23 * * * /usr/local/nginx/sbin/cut_my_log.sh
    5. 重启定时任务:

      service crond restart

    五、Gzip压缩

    1. 编辑nginx核心配置文件

         vim /usr/local/nginx/conf/nginx.conf

    2. 添加如下代码 

      #开启gzip压缩功能,目的:提高传输效率,节约带宽
      gzip  on;
      #限制最小压缩,小于1字节的文件就不会压缩了
      gzip_min_length 1;
      #定义压缩比,文件越大,压缩越多,cpu使用就越大
      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 application/json;

    六、location 的匹配规则

      • 空格:默认匹配,普通匹配

        location / {
             root /home;
        }
        
      • =:精确匹配

        location = /imooc/img/face1.png {
            root /home;
        }
        
      • ~*:匹配正则表达式,不区分大小写

        #符合图片的显示
        location ~ .(GIF|jpg|png|jpeg) {
            root /home;
        }
        
      • ~:匹配正则表达式,区分大小写

        #GIF必须大写才能匹配到
        location ~ .(GIF|jpg|png|jpeg) {
            root /home;
        }
        
      • ^~:以某个字符路径开头

        location ^~ /imooc/img {
            root /home;
        }

    七、Nginx 跨域配置支持

    #允许跨域请求的域,*代表所有
    add_header 'Access-Control-Allow-Origin' *;
    #允许带上cookie请求
    add_header 'Access-Control-Allow-Credentials' 'true';
    #允许请求的方法,比如 GET/POST/PUT/DELETE
    add_header 'Access-Control-Allow-Methods' *;
    #允许请求的header
    add_header 'Access-Control-Allow-Headers' *;

    八、Nginx配置tomcat集群  

    #配置上游服务器
    #轮询 upstream tomcats{ server xxxxx1:
    8080; server xxxxx2:8081; server xxxxx3:8082; }

    #加权轮询
    #upstream tomcats{ # server xxxxx1:8080 weight=1; # server xxxxx2:8081 weight=2; # server xxxxx3:8082 weight=5; #}

    #限制连接数
    #upstream tomcats{
    #    server xxxxx1:8080 max_conns=2;
    #    server xxxxx2:8081 max_conns=2;
    #    server xxxxx3:8082 max_conns=2;
    #}
     
    server { listen 80; server_name yyyyy; location / { proxy_pass http://tomcats;  } }

    九、Nginx的缓存

      静态资源缓存

    location /files {
        alias /home/imooc;
        # expires 10s;
        # expires @22h30m;
        # expires -1h;
        # expires epoch;
        # expires off;
        expires max;
    }

      反向代理缓存

    # proxy_cache_path 设置缓存目录
    #       keys_zone 设置共享内存以及占用空间大小
    #       max_size 设置缓存大小
    #       inactive 超过此时间则被清理
    #       use_temp_path 临时目录,使用后会影响nginx性能
    proxy_cache_path /usr/local/nginx/upstream_cache keys_zone=mycache:5m max_size=1g inactive=1m use_temp_path=off;
    location / {
        proxy_pass  http://tomcats;
    
        # 启用缓存,和keys_zone一致
        proxy_cache mycache;
        # 针对200和304状态码缓存时间为8小时
        proxy_cache_valid   200 304 8h;
    }

     整理自慕课网《java架构师体系课》

  • 相关阅读:
    可遇不可求的Question之过滤单词字符的正则表达式\w的疑义
    可遇不可求的Question之DBNull.Value.ToString()
    可遇不可求的Question之MYSQL的10060和10061错误篇
    可遇不可求的Question之正在中止线程异常
    可遇不可求的Question之类型初始值设定项引发异常篇
    可遇不可求的Question之调用的目标发生了异常篇
    可遇不可求的Question之要复制的 LOB 数据的长度超出了配置的最大值篇
    熱海へ
    CC的留言
    研发才是硬道理钢铁侠的评论(摘自豆瓣)
  • 原文地址:https://www.cnblogs.com/hmxs/p/12005360.html
Copyright © 2020-2023  润新知