1. Nginx简介

Nginx [engine x]是HTTP和反向代理服务器,邮件代理服务器和通用TCP / UDP代理服务器,最初由Igor Sysoev编写。很长一段时间以来,它已经在许多重负载的俄罗斯站点上运行,包括 Yandex, Mail.Ru, VK和 Rambler。根据Netcraft的数据,Nginx 在2020年3月服务或代理了 25.65%最繁忙的站点。以下是一些成功案例: Dropbox, Netflix, Wordpress.com, FastMail.FM。

Nginx 适用于各类网站,处理能力和可扩展性都优于apache,目前为止,主流网站几乎都采用的Nginx作为核心的服务.

2. Web软件排名[截至2020年4月]

3. Nginx优势:

配置简单

使用灵活

扩展性强

负载均衡

缓存服务

高并发[异步i/o]

模块化

4.Nginx目录介绍

未安装的Nginx目录介绍:
wget http://nginx.org/download/Nginx-1.16.1.tar.gz
tar xf nginx-1.16.1.tar.gz
cd nginx-1.16.1 [root@k8s-node2 Nginx-1.16.1]# ll
total 752
drwxr-xr-x 6 1001 1001 326 Apr 11 23:11 auto #自动编译脚本目录
-rw-r--r-- 1 1001 1001 296463 Aug 13 2019 CHANGES #变更说明
-rw-r--r-- 1 1001 1001 452171 Aug 13 2019 CHANGES.ru #俄罗斯语变更说明
drwxr-xr-x 2 1001 1001 168 Apr 11 23:11 conf #配置文件目录
-rwxr-xr-x 1 1001 1001 2502 Aug 13 2019 configure #编译二进制文件
drwxr-xr-x 4 1001 1001 72 Apr 11 23:11 contrib #语法显示配置 cp -r contrib/vim/* ~/.vim/
drwxr-xr-x 2 1001 1001 40 Apr 11 23:11 html #默认网页目录
-rw-r--r-- 1 1001 1001 1397 Aug 13 2019 LICENSE #许可文件
-rw-r--r-- 1 root root 404 Apr 11 23:19 Makefile #make文件
drwxr-xr-x 2 1001 1001 21 Apr 11 23:11 man #Nginx帮助文件
drwxr-xr-x 3 root root 174 Apr 11 23:19 objs #二进制文件
-rw-r--r-- 1 1001 1001 49 Aug 13 2019 README #解读文件
drwxr-xr-x 9 1001 1001 91 Apr 11 23:11 src #源代码目录

5. Nginx编译模块介绍

在Nginx的模块中 带有  --with-xxx 这种是默认没有编译进Nginx中,通常需要手动添加后进行编译安装到Nginx中
在Nginx的模块中 带有 --without-xxx 这种是默认编译到了Nginx中,需要使用该参数来取消或移出Nginx中
在Nginx的模块中 带有 --with-xxx= 这种是需要你指定目录来进行编译安装到Nginx中 Nginx的 make 预编译:
在Nginx中使用 make 进行了预编译后,所有的即将编译加入到Nginx中的功能模块都会在 ngx_modules.c 文件中. 查看 ngx_modules.c 可获取即将编译的Nginx有哪些功能:
cat objs/ngx_modules.c

6. Nginx的安装

Nginx提供了多种方式,常用的有2种

6.1.yum安装:

yum install -y Nginx

6.2.编译安装:

yum install -y openssl openssl-devel
wget http://Nginx.org/download/nginx-1.16.1.tar.gz
tar xf nginx-1.16.1.tar.gz
cd nginx-1.16.1
./configure --prefix=/usr/local/nginx-1.16.1 --with-stream --with-http_stub_status_module --with-http_ssl_module
make
make install

6.3. 默认配置文件内容

[root@k8s-node2 Nginx-1.16.1]# egrep -v "#|^$"  /usr/local/Nginx-1.16.1/conf/Nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

7. Nginx编译安装后目录:

编译完成后,Nginx安装的目标目录会生成大量文件

[root@k8s-node2 Nginx-1.16.1]# ll /usr/local/Nginx-1.16.1/
total 0
drwx------ 2 nobody root 6 Apr 11 23:21 client_body_temp #临时文件目录
drwxr-xr-x 2 root root 333 Apr 11 23:20 conf #Nginx配置文件目录
drwx------ 2 nobody root 6 Apr 11 23:21 fastcgi_temp #临时文件目录
drwxr-xr-x 2 root root 40 Apr 11 23:20 html #Nginx网页目录
drwxr-xr-x 2 root root 58 Apr 11 23:21 logs #Nginx日志文件
drwx------ 2 nobody root 6 Apr 11 23:21 proxy_temp #临时文件目录
drwxr-xr-x 2 root root 36 Apr 12 00:16 sbin #Nginx二进制文件目录
drwx------ 2 nobody root 6 Apr 11 23:21 scgi_temp #临时文件目录
drwx------ 2 nobody root 6 Apr 11 23:21 uwsgi_temp #临时文件目录

conf 配置文件目录介绍

[root@k8s-node2 conf]# ll
total 68
-rw-r--r-- 1 root root 1077 Apr 11 23:20 fastcgi.conf #fastcgi配置文件
-rw-r--r-- 1 root root 1077 Apr 12 00:16 fastcgi.conf.default #fastcgi默认配置文件
-rw-r--r-- 1 root root 1007 Apr 11 23:20 fastcgi_params #fastcgi_params配置文件
-rw-r--r-- 1 root root 1007 Apr 12 00:16 fastcgi_params.default #fastcgi_params默认配置文件
-rw-r--r-- 1 root root 2837 Apr 12 00:16 koi-utf #转码文件
-rw-r--r-- 1 root root 2223 Apr 12 00:16 koi-win #转码文件
-rw-r--r-- 1 root root 5231 Apr 11 23:20 mime.types #mime类型文件
-rw-r--r-- 1 root root 5231 Apr 12 00:16 mime.types.default #mime模板类型文件
-rw-r--r-- 1 root root 2656 Apr 11 23:20 Nginx.conf #Nginx配置文件
-rw-r--r-- 1 root root 2656 Apr 12 00:16 Nginx.conf.default #Nginx模板配置文件
-rw-r--r-- 1 root root 636 Apr 11 23:20 scgi_params #cgi接口
-rw-r--r-- 1 root root 636 Apr 12 00:16 scgi_params.default #cgi接口
-rw-r--r-- 1 root root 664 Apr 11 23:20 uwsgi_params #fastcgi文件
-rw-r--r-- 1 root root 664 Apr 12 00:16 uwsgi_params.default #fastcgi模板文件
-rw-r--r-- 1 root root 3610 Apr 12 00:16 win-utf #编码字符支持文件

8. Nginx配置语法:

1. Nginx配置文件是由指令和指令块构成的
2. 每条指令都是以 ; 分号结尾,指令和参数中间使用空格来分隔开
3. 指令块使用 {} 大括号将多个小取快组织到一起
4. include语句是允许将组合多个配置文件,以提升可维护性
5. 使用 # 符号来添加注释
6. 使用 $ 符号来添加变量
7. 部分指令支持正则表达式

9.Nginx指令:

nginx可以通过  nginx [选项] [参数] 来进行操作
nginx -s 发送信号
-s reload 重载nginx
-s stop 停止nginx
-s quit 优雅停止nginx
-s reopen 重新开始记录日志 nginx -h 获取帮助 nginx -? 也是同等效果 nginx -c 指定配置文件
nginx -t 检查配置
nginx -T 检查语法并打印出配置文件内容信息
nginx -p 指定运行目录[没用过]
nginx -v 打印版本信息
nginx -V 打印编译信息 nginx 可以操作的进程有master进程和work进程 master进程可以操作的信号:
kill -HUP [进程id] 平滑读取配置文件
kill -USR1 [进程id] 重新读取日志,不停止服务[在做日志切割的时候常用]
kill -USR2 [进程id] 平滑重启nginx
kill -WINCH [进程id] 等待进程结束后关闭nginx[常用于nginx版本升级]
kill -QUIT [进程id] 优雅退出,执行完当前的请求后退出

10.Nginx版本升级

1. 下载新版本nginx
2. 获取老版本nginx编译参数[nginx -V]
3. 拿到编译参数编译新版本nginx
4. 编译完成后,将老版本nginx二进制文件进行备份.
5. 新版本nginx拷贝并覆盖原有nginx二进制文件 [\cp -ra objs/nginx /nginx/sbin/nginx]
6. 给nginx发送指令给nginx的pid号,让新版本与老版本同时运行 [kill -USR2 `cat nginx-pid`]
7. 新版本会启动一个新的nginx work进程,通过ps -ef|grep nginx 可以看到nginx新老进程都在运行了,这时老版本nginx就不会再处理新的请求了,但是老的master进程依旧存在,现在所有新的请求将会平滑过渡到新版本nginx中. 8.1 没有问题的话就可以优雅关闭 nginx work老进程,让它停止 [kill -WINCH `cat nginx-pid`]
记住此时老的nginx master进程它依然在运行中,它用于唤醒老进程.
8.2 如果有问题的话就重新拉起老版本nginx master进程和work进程.
重新拉起老版本,关闭新版本: 直接nginx -s reload 即可重新拉起老版本

11.NGINX日志切割

nginx重新重载会生成新的日志记录文件.通过这个特点我们可以写shell脚本来生成自定义日志文件.
保存为 cut_log.sh
#---------------------------------------------------------------------------------------
#!/bin/bash
#每天00:00执行此脚本 将前一天的access.log重命名为access-xxxx-xx-xx.log格式,并重新打开日志文件
#Nginx日志文件所在目录
LOG_PATH=/application/nginx/logs
#获取昨天的日期
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
#获取pid文件路径
PID=/var/run/nginx/nginx.pid
#分割日志
mv ${LOG_PATH}access.log ${LOG_PATH}access-${YESTERDAY}.log
mv ${LOG_PATH}error.log ${LOG_PATH}error-${YESTERDAY}.log
#向nginx发送reopen信号,只重新记录日志文件[建议用reopen而不是reload.]
nginx -s reopen
#--------------------------------------------------------------------------------------- #脚本配置完毕,每天执行即可
crontab -e
00 00 * * * /bin/sh cut_log.sh 或
echo "00 00 * * * /bin/sh cut_log.sh" >>/var/spool/cron/root
陶辉写法:  vi cur_log.sh
1. 脚本:
#!/bin/bash
LOG_PATH=/application/nginx/logs/history
CUT_LOG=/application/nginx/logs
time=$(date -d "yesterday" +%Y-%m-%d)
cp -a ${CUT_LOG}/access_log ${LOG_PATH}/access_${time}.log
cp -a ${CUT_LOG}/error_log ${LOG_PATH}/error_${time}.log
kill -USR1 $(cat /application/nginx/logs/nginx.pid) 2.权限
chmod +x /bin/sh cut_log.sh 3.计划任务
crontab -e
00 00 * * * /bin/sh cut_log.sh

12. nginx 优化

12.1 gzip压缩

配置在 http server location 区块
gzip on;
gzip_min_length 500;
gzip_buffers 4 256k;
gzip_http_version 1.1;
gzip_comp_level 5;
gzip_types image/png image/jpeg image/jpg image/gif text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss application/x-httpd-php;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";

13. 静态资源目录配置

在 server location区块中添加以下参数,可以让用户以网页目录的形式访问:

location / {
alias mulu/;
autoindex on;
} 此时通过网页访问这个路径,出现的页面将是以目录形式展现.

14. 网速限制

set $limit_rate 1k;

用于对用户访问继续进行限速,这是个内置变量.可用于 server location 区块

15.日志定义

1. 定义日志格式[]http区块定义:
log_format leilei '$remote_addr - $remote_user [$time_local]'
'"$request" $status $body_bytes_sent'
'"$http_referer" - "$http_x_forwarded_for" - "$http_user_agent"'; 2. 应用日志格式
access_log logs/access.log leilei; #注意:
日志格式的定义在http区块中,这个日志格式可以定义多个,可以给多个网站记录详细日志.

16.反向代理服务

16.1 反向代理的工作流程

环境规划:
10.0.0.64 nginx1
10.0.0.65 nginx2
10.0.0.66 upstream
10.0.0.64:
yum install -y nginx
echo "$(hostname -i)" >/usr/share/nginx/html/index.html
添加语法样式[nginx源码目录才有]: cp -r contrib/vim/* ~/.vim/ 10.0.0.65:
yum install -y nginx
echo "$(hostname -i)" >/usr/share/nginx/html/index.html
添加语法样式[nginx源码目录才有]: cp -r contrib/vim/* ~/.vim/ 10.0.0.66:
mkdir /server
#添加语法样式:
wget http://nginx.org/download/Nginx-1.16.1.tar.gz
tar xf nginx-1.16.1.tar.gz
cd nginx-1.16.1
cp -r contrib/vim/* ~/.vim/ ##nginx配置 - iphash 算法:
#----------------------------------------------------------
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65; upstream leilei {
ip_hash;
server 10.0.0.64:80;
server 10.0.0.65:80;
}
server {
listen 80;
server_name 10.0.0.66;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://leilei;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
#----------------------------------------------------------
# ip_hash 算法会让一个客户端一直访问上一次访问的服务器,除非上一次服务器无法连接才会切换到新的服务器,这是用于绘画保持的一种办法 X-Real-IP $remote_addr; 是用于获取用户浏览器端的IP地址.记录日志.

16.1 反向代理算法

默认权重方式  max_fails=3 fail_timeout=20s

ip_hash 算法:  这个算法会让同一台资源服务器只为同一台客户端服务. 在这台服务器失效后才会切换到另一台服务器上.在老服务器重新上线后还会继续切换到这台服务器中. 这种算法最大的好处是可以解决 session会话共享的问题.

least_conn   把请求转发给连接数较少的后端服务器

fair 算法:  按照响应时间最短的提供服务,这个是第三方模块需要进行手动安装.[但是该模块已经在2008年停更,不建议使用]

加权轮询算法: 指定轮询比率 weight和访问几率成正比,主要用于后端服务器异质的场景下。

url_hash算法: 它与ip_hash算法类似,只不过它是按照 url 的hash结果来分发请求.可以让每个url都定向到指定后端服务.
配置方式: hash $request_uri;

16.2 反向代理缓存

1. 配置proxy_cache_path  反向代理缓存的目录
mkdir /tmp/proxy_cache 2. nginx配置文件添加缓存参数:
proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; 3. 将这个定义的缓存应用到某个反向代理区块中. location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://leilei; proxy_cache my_cache; <---定义的缓存
proxy_cache_key $host$uri$is_args$args; <---定义的缓存
proxy_cache_valid 200 304 301 302 1d; <---定义的缓存
} 4. 重启nginx服务.
此时 我停止了10.0.0.65这台nginx服务,访问web页面同样显示了 10.0.0.65的处理.
同时也可以看到缓存目录生成了缓存文件: [root@k8s-node2 nginx-1.16.1]# tree /tmp/nginx_cache
/tmp/nginx_cache
└── 9
└── e9
└── bffaf06f40da4f9c5cdcdb0860defe99

17. goaccess的使用

wget https://tar.goaccess.io/goaccess-1.3.tar.gz
tar -xzvf goaccess-1.3.tar.gz
cd goaccess-1.3/
./configure --enable-utf8 --enable-geoip=legacy
make
make install
1. 在server区块下添加一个location

location /go.html {
alias /application/nginx/html/go.html;
} 保存后退出 2. 在nginx 网页目录添加 一个 go.html ,确保它可以被访问
touch /application/nginx/html/go.htm 3. 创建go.sh脚本
#-----------------------goaccess日志----------------
#!/bin/sh
LANG="zh_CN.UTF-8" #页面转换为中文
/usr/local/bin/goaccess /application/nginx/logs/access.log -o /application/nginx/html/go.html -p /usr/local/etc/goaccess/goaccess.conf
#-----------------------goaccess日志---------------- 计划任务 [一分钟一次] 4. 把命令配置为定时任务
[root@leilei html]# crontab -l
*/1 * * * * /bin/bash /root/go.sh > /dev/null 2>&1 &

nginx基础安装使用和负载均衡高可用,日志切割配置的更多相关文章

  1. Nginx+Keepalived负载均衡高可用

    Nginx+Keepalived负载均衡高可用方案: Nginx 使用平台:unix.linux.windows. 功能: A.www web服务  http 80 b.负载均衡(方向代理proxy) ...

  2. JAVAEE——宜立方商城03:Nginx负载均衡高可用、Keepalived+Nginx实现主备

    1 nginx负载均衡高可用 1.1 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务, ...

  3. Nginx负载均衡高可用

    1.   Nginx负载均衡高可用 首先介绍一下Keepalived,它是一个高性能的服务器高可用或热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的配合实 ...

  4. Nginx负载均衡高可用---架构

    1. Nginx负载均衡高可用 首先介绍一下Keepalived,它是一个高性能的服务器高可用或热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的配合实现w ...

  5. 23.Nginx+keepalived负载均衡高可用

    Nginx+keepalived负载均衡高可用 结构图 环境: 主 服务器:192.168.239.10 备 服务器:192.168.239.20 Web 服务器1:192.168.239.40 We ...

  6. Keepalived+Nginx实现负载均衡高可用

    一.负载均衡高可用 Nginx作为负载均衡器,所有请求都到了Nginx,可见Nginx处于非常重点的位置,如果Nginx服务器宕机后端web服务将无法提供服务,影响严重. 为了避免负载均衡服务器的宕机 ...

  7. Nginx+keepalived实现负载均衡高可用配置

    1. 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重. 为了屏蔽负载均衡服务 ...

  8. nginx负载均衡高可用部署和代理配置

    nginx负载均衡高可用配置 服务器A:172.16.100.2 服务器B:172.16.100.3 首先先在两台服务器上分别安装好nginx和keepalived后,再进行下面的操作 配置keepa ...

  9. 实现基于Haproxy+Keepalived负载均衡高可用架构

    1.项目介绍: 上上期我们实现了keepalived主从高可用集群网站架构,随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务 ...

  10. Lvs+keepAlived实现负载均衡高可用集群(DR实现)

    第1章 LVS 简介 1.1 LVS介绍 LVS是Linux Virtual Server的简写,意为Linux虚拟服务器,是虚拟的服务器集群系统,可在UNIX/LINUX平台下实现负载均衡集群功能. ...

随机推荐

  1. Spring Cloud Stream 源码解析

    Spring Cloud Stream 是一个消息驱动微服务的框架.   应用程序通过inputs 或者outputs 来与 Spring Cloud Stream 中binder 交互,通过我们配置 ...

  2. 润乾报表如何从 mongodb 中取数

    MongoDB 属于 NoSql 中的基于分布式文件存储的文档型数据库,是非关系数据库当中功能最丰富,最像关系数据库的.它支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较 ...

  3. 在ashx中如何使用session

    前言 都是写陈年往事罢了,如何在ashx 使用session 正文 我们知道在ashx 中使用context.Session 我们即读取不到值,同时设置完也感觉无效. 原因是我们在ashx 中使用的s ...

  4. Gowin 1nr-9k mipi测试

    本次实验是利用gowin 1nr-9k的开发板测试MIPI屏. 测试的屏是2.0寸的,接口如下: 接上IO就是RST和MIPI的时钟和数据接口,另外就是电源和地. Gowin的案例中,首先是软件要升级 ...

  5. Filebeat 日志采集工具安装

    Filebeat 是比较轻量的日志采集工具,对于一些简单的采集任务可以直接使用 Filebeat 采集,同时也支持很多的方式输出,可以输出至 Kafka.Elasticsearch.Redis 等,下 ...

  6. CF1995E Long Inversions(贪心 + 差分)

    见代码 点击查看代码 //背景:夸一下自己,CF1955A~E均是自己想出来的,这道题思路是自己想的,唯一没想到用差分数组维护 //原理:贪心(想最左边的1开始,不可能对其左边包括自己操作了,否则又要 ...

  7. Linux基础-01:Linux命令的基本格式

    2.1.1 命令提示符 在CentOS 7操作系统中,Linux命令提示符就像是你与电脑交流的一个小标志,告诉你系统已经准备好接受你的指令了. 它通常会显示在你打开的终端窗口或控制台的最前面. 让我们 ...

  8. ORA-29278: SMTP transient error: 421 Service not available

    ORA-29278: SMTP transient error: 421 Service not available 一般来说,很可能是邮件服务器连接不上 p_conn := utl_smtp.ope ...

  9. 力扣569(MySQL)-员工薪水中位数(困难)

    题目: 写一个SQL查询,找出每个公司的工资中位数,以任意顺序返回结果表.查询结果个数如下所示. 输出结果如下:  解题思路: 中位数:位于集合正中间的元素.当数据总书为奇数时,最中间的数就是中位数, ...

  10. Java 断言 Assert 使用教程与最佳实践

    本文收录于 Github.com/niumoo/JavaNotes,Java 系列文档,数据结构与算法! 本文收录于网站:https://www.wdbyte.com/,我的公众号:程序猿阿朗 作为一 ...