在Centos7中Nginx使用教程 二

在Centos7中Nginx使用教程 二
Nginx 日志切割-手动
现有的日志都会存在 access.log 文件中,但是随着时间的推移,这个文件的内容会越来越多,体积会越来越大,不便于运维人员查看,所以我们可以通过把这个大的日志文件切割为多份不同的小文件作为日志,切割规则可以以天为单位,如果每天有几百G或者几个T的日志的话,则可以按需以每半天或者每小时对日志切割一下。

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

Nginx 日志切割-定时
1.安装定时任务:

yum -y install crontabs

2.crontab -e 编辑并且添加一行新的任务:

*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh

3.重启定时任务:
service crond restart

附:常用定时任务命令:
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
crontab -e // 编辑任务
crontab -l // 查看任务列表

定时任务表达式:
Cron表达式是,分为5或6个域,每个域代表一个含义,如下所示:

分 时 日 月 星期几 年(可选)
取值范围 0-59 0-23 1-31 1-12 1-7 2019/2020/2021/…

每分钟执行:
*/1 * * * *
每日凌晨(每天晚上23:59)执行:
59 23 * * *
每日凌晨1点执行:
0 1 * * *

章节问答笔记资料
那么配置了这么多我们再来看看location的配置规则

root 与 alias
假如服务器路径为:/home/huadaxia/files/img/face.png
root 路径完全匹配访问
配置的时候为:

location /huadaxia {
    root /home
}

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

alias 可以为你的路径做一个别名,对用户透明

location /hello {
    alias /home/huadaxia 
}

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

location 的匹配规则
空格:默认匹配,普通匹配

location / {
     root /home;
}

=:精确匹配
(就是在/home/huadaxia/img/face1.png)这个图片外面的人可以访问

location = /huadaxia/img/face1.png {
    root /home;
}

~*:匹配正则表达式,不区分大小写,就是说所有的/home下面的图片后缀为GIF|jpg|png|jpeg可以访问
#符合图片的显示

location ~* .(GIF|jpg|png|jpeg) {
    root /home;
}

~:匹配正则表达式,区分大小写
#GIF必须大写才能匹配到

location ~ .(GIF|jpg|png|jpeg) {
    root /home;
}

^~:以某个字符路径开头

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

Nginx 跨域配置支持
在我们的springboot项目中也可以进行跨域访问,那么我用过比较常见的前后端分离模式,以及动静分离多是采用Nginx配置跨域这才是主流。
springboot中
在这里插入图片描述

在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防盗链配置,防盗链就是为了防止别人盗用你的图片等静态资源
防止的方式有多种
1:水印,品牌宣传,你的带宽,服务器足够
2:防火墙,直接控制,前提是你知道IP来源
3:防盗链策略下面的方法是直接给予404的错误提示
在这里插入图片描述

#对源站点验证
valid_referers *.huadaxia.com; 
#非法引入会进入下方判断
if ($invalid_referer) {
    return 404;
}
listen       90;
    server_name  localhost;
    #允许跨域请求的域,*代表所有
    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' *;
    #对源站点验证
    valid_referers *.huadaxia.com;
    #非法引入会进入下方判断
    if ($invalid_referer) {
            return 404;
            }

upstream:负载均衡
默认情况下是轮询发送
upstream 指令参数 max_conns

worker进程设置1个,便于测试观察成功的连接数

worker_processes  1;

upstream tomcats {
        server 192.168.1.173:8080 max_conns=2;
        server 192.168.1.174:8080 max_conns=2;
        server 192.168.1.175:8080 max_conns=2;
}

upstream 指令参数 slow_start
商业版,需要付费

upstream tomcats {
        server 192.168.1.173:8080 weight=6 slow_start=60s;
#       server 192.168.1.190:8080;
        server 192.168.1.174:8080 weight=2;
        server 192.168.1.175:8080 weight=2;
}

注意
该参数不能使用在hash和random load balancing中。
如果在 upstream 中只有一台 server,则该参数失效。
章节问答笔记资料
upstream 指令参数 down、backup
#down用于标记服务节点不可用:

upstream tomcats {
        server 192.168.1.173:8080 down;
#       server 192.168.1.190:8080;
        server 192.168.1.174:8080 weight=1;
        server 192.168.1.175:8080 weight=1;
}

backup表示当前服务器节点是备用机,只有在其他的服务器都宕机以后,自己才会加入到集群中,被用户访问到:

upstream tomcats {
        server 192.168.1.173:8080 backup;
#       server 192.168.1.190:8080;
        server 192.168.1.174:8080 weight=1;
        server 192.168.1.175:8080 weight=1;
}

backup参数不能使用在hash和random load balancing中。

upstream 指令参数 max_fails、fail_timeout
用户访问的时候请求为:url:port/huadaxia/files/img/face.pngmax_fails:表示失败几次,则标记server已宕机,剔出上游服务。
fail_timeout:表示失败的重试时间。
假设目前设置如下:

max_fails=2 fail_timeout=15s

则代表在15秒内请求某一server失败达到2次后,则认为该server已经挂了或者宕机了,随后再过15秒,这15秒内不会有新的请求到达刚刚挂掉的节点上,而是会请求到正常运作的server,15秒后会再有新请求尝试连接挂掉的server,如果还是失败,重复上一过程,直到恢复。

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

upstream tomcats {
#       server 192.168.1.173:8080 max_fails=2 fail_timeout=1s;
        server 192.168.1.190:8080;
#       server 192.168.1.174:8080 weight=1;
#       server 192.168.1.175:8080 weight=1;
        keepalive 32;
}

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

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

负载均衡 ip_hash
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;
}

下面的只算前面三位的意思是比如你的ip是192.168.1.*,那么iphash算法是默认算前面的三位,所以你在内网中的话只有一台给你访问
在这里插入图片描述
但是这有的话也很麻烦的,就是当你丢了一台tomcat(宕机)那么又出现了新问题用户的session又要存另外一台,大部分session会改变,所以我们要用下面的一致性hash算法
在这里插入图片描述
一致性session是怎么解决这个问题的呢,保证只有宕机的用户会连接服务器其他人session还是一样呢,
一致性哈希算法你可以把它看成一条直线,下面的0和2的32次方减一当作地址
在这里插入图片描述
把他们当成圆环,并且有这么多的节点当节点3宕机了那么其他用户不用换服务器
在这里插入图片描述
只影响连接节点3的用户,其他用户不受到影响
在这里插入图片描述

consistent_hash
upstream tomcats {
        consistent_hash $request_uri;

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

负载均衡 url_hash 与 least_conn
根据每次请求的url地址,hash后访问到固定的服务器节点。(自动的)

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 www.tomcats.com;

    location / {
        proxy_pass  http://tomcats;
    }
}

Nginx的缓存
浏览器缓存:
加速用户访问,提升单个用户(浏览器访问者)体验,缓存在本地
Nginx缓存
缓存在nginx端,提升所有访问到nginx这一端的用户
提升访问上游(upstream)服务器的速度
用户访问仍然会产生请求流量
控制浏览器缓存:

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

在这里插入图片描述
Nginx的反向代理缓存

#keys_zone 设置共享内存以及占用空间大小
#keys_zone 设置共享内存以及占用的空间大小
#max_size 设置缓存大小
#inactive 超过此时间则缓存自动清理
#use_temp_path 关闭零时目录
proxy_cache_path /usr/local/nginx/upsteam_cache keys_zone=mycache:5m max_size=1g inactive=30s use_temp_path=off



location / {
    proxy_pass  http://tomcats;

    # 启用缓存,和keys_zone一致
    proxy_cache mycache;
    # 针对200和304状态码缓存时间为8小时
    proxy_cache_valid   200 304 8h;
}

在这里插入图片描述

使用Nginx配置HTTPS域名证书
这个的前提是你得有域名,如果没有的话去阿里云或者腾讯云申请一个

  1. 安装SSL模块
  2. 安装SSL模块
    要在nginx中配置https,就必须安装ssl模块,也就是: http_ssl_module。
    进入到nginx的解压目录: /home/software/nginx-1.16.1
    新增ssl模块(原来的那些模块需要保留)
./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  \
--with-http_ssl_module

编译和安装
make
make install

配置HTTPS
把ssl证书 *.crt 和 私钥 *.key 拷贝到/usr/local/nginx/conf目录中

按我这么配置

server {
listen       443 ssl;
 server_name 你的域名;
root html;
keepalive_timeout 70;
location / {
        root   html;
        index index.html index.htm;
        }
ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;
 ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
 ssl_certificate     你自己的pem.pem;
 ssl_certificate_key 你自己的key.key;
ssl_session_cache    shared:SSL:10m;
 ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;

}

在这里插入图片描述

如果你觉得对你有帮助请给我点个赞谢谢了

发布了8 篇原创文章 · 获赞 89 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/BryantJamesHua/article/details/105553528