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 路径完全匹配访问,imooc必须是home下真实的路径
      配置的时候为:

      location /imooc {
          root /home
      }
      

 

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

 

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

      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 编辑并且添加一行新的任务:

    01 00 * * * /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;
    #定义压缩比(1--9),文件越大,压缩越多,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 192.168.1.105:
8080; server 192.168.1.106:8081; server 192.168.1.107:8082; }

#加权轮询
upstream tomcats{ server 192.168.1.105:8080 weight=1; server 192.168.1.106:8081 weight=2; server 192.168.1.107:8082 weight=5; }

#限制连接数
upstream tomcats{
    server 192.168.1.105:8080 max_conns=2;
    server 192.168.1.106:8081 max_conns=2;
    server 192.168.1.107:8082 max_conns=2;
}

#down 用于标记服务节点不可用
upstream tomcats {
  server 192.168.1.105:8080 down;
  server 192.168.1.106:8081 weight=1;
  server 192.168.1.107:8082 weight=1;
}

 #backup 表示当前服务器节点是备用机,只有在其他的服务器都宕机以后,自己才会加入到集群中,被用户访问到
 upstream tomcats {
   server 192.168.1.105:8080 backup;
   server 192.168.1.106:8081 weight=1;
   server 192.168.1.107:8082 weight=1;
  }


  #ip_hash 可以保证用户访问可以请求到上游服务中的固定的服务器,前提是用户ip没有发生更改。
  #使用ip_hash的注意点:
  #不能把后台服务器直接移除,只能标记down

  upstream tomcats {
    ip_hash;

    server 192.168.1.173:8080;
    server 192.168.1.174:8080 down;
    server 192.168.1.175:8080;
  }

 

  #URL哈希 与 最小连接数

  upstream tomcats {
    # url hash
    hash $request_uri;

    # 最少连接数
    # least_conn


    server 192.168.1.173:8080;
    server 192.168.1.174:8080;
    server 192.168.1.175:8080;
  }



server {
  listen
80;
  server_name 192.168.1.170;
  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;
}

 

十、防盗链

#对源站点验证
valid_referers *.imooc.com; 
#非法引入会进入下方判断
if ($invalid_referer) {
    return 404;
} 

 

十一、keepalived提高吞吐量

keepalived: 设置长连接处理的数量
proxy_http_version:设置长连接http版本为1.1
proxy_set_header:清除connection header 信息

upstream tomcats {
        server 192.168.1.190:8080;
        keepalive 32;
}

server {
        listen       80;
        server_name  www.tomcats.com;

        location / {
            proxy_pass  http://tomcats;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
        }
}

  

 

 

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

posted @ 2019-12-08 12:37  坏猫先生  阅读(376)  评论(0编辑  收藏  举报