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. HTC Vive之Unity3d开发日记——手柄交互编程

    目录:        HTC Vive之Unity3d开发日记 You can fool all the people some of the time,and some of the people ...

  2. Excel 分组后计算

    分组后的计算都类似,仍然采用 groups 函数,分组并同时计算出各洲的 GDP 总量,然后再求一遍各洲的 GDP 总量占全球 GDP 的百分比值. SPL 代码如下:   A B 1 =clipbo ...

  3. 深度解读《深度探索C++对象模型》之拷贝构造函数

    接下来我将持续更新"深度解读<深度探索C++对象模型>"系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文. 写作不易,请有心人到我的公众号上 ...

  4. 力扣233(java)-数字1的个数(困难)

    题目: 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数. 示例 1: 输入:n = 13输出:6示例 2: 输入:n = 0输出:0 提示: 0 <= n <= ...

  5. 阿里云 VPC 内网性能测试最佳实践

    ​简介:本文介绍了在阿里云 VPC 内网执行性能测试的方法.相较于传统的公网性能测试,VPC 内网性能测试完全在客户 VPC 环境进行,无需暴露服务到公网,安全性更高,灵活性更强. 作者:风起 背景 ...

  6. ADBPG&Greenplum成本优化之磁盘水位管理

    ​简介:本文我们将通过一个实际的磁盘空间优化案例来说明,如何帮助客户做成本优化. ​ 作者 | 玉翮 来源 | 阿里技术公众号 一 背景描述 目前,企业的核心数据一般都以二维表的方式存储在数据库中.在 ...

  7. dotnet 开启 Fiddler 抓包将会让请求 HOST 头被更改

    我在写域名备份功能,想要修改请求的 IP 地址,同时又将原有的请求域名带上.实现方法是修改请求的地址,在 HttpRequestMessage 的 Header 上添加 HOST 记录,记录的值就是原 ...

  8. LabView十六进制与字符串之间的转换

    一.准备工具 Labview开发软件 字符串与十六进制的转换工具(做测试使用) 在线转换工具:IEE754浮点数16进制转换 本地工具如下图所示: 二.LabView字符串转换为十六进制 在数值中选择 ...

  9. SAP集成技术(四)五种集成架构

    本文中,我们将介绍并解释五个主要的模型.我们主要区分直接集成.中间件导向集成以及两个一般的架构概念.直接集成(例如点对点集成)中的标准化很少,但中间件导向的拓扑(例如中心辐射型拓扑以及企业服务总线)追 ...

  10. @Async异步失效的9种场景

    前言 最近星球中有位小伙伴问了我一个问题:他在项目某个方法使用@Async注解,但是还是该方法还是同步执行了,异步不起作用,到底是什么原因呢? 伪代码如下: @Slf4j @Service publi ...