nginx简介

1、Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 服务器

2、常见的应用服务器:
Apache/Microsoft IIS/Tomcat/Lighttpd/Nginx

介绍nginx在系统架构(网关入口)中的作用,总结如下:
1、路由功能(与微服务对应):域名/路径,进行路由选择后台服务器
2、负载功能(与高并发高可用对应):对后台服务器集群进行负载
3、静态服务器(比tomcat性能高很多):在mvvm模式中,充当文件读取职责
总结:实际使用中,这三项功用,会混合使用。比如先分离动静,再路由服务,再负载机器
**
image.png

image.png

image.png

1.正向代理和反向代理

代理:意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。
image.png
反向代理(Reverse Proxy):方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
image.png
image.png
区别:正向代理偏向于多个客户端,反向代理偏向于多个服务器

2.nginx在Linux安装步骤

https://www.cnblogs.com/FondWang/p/11666557.html
make install出现错误是因为已经存在nginx目录,改目录名字即可

nginx在Linux下的目录:
•Conf 配置文件
•Html 静态网页文件
•Logs 日志文件
•Sbin 二进制程序

/usr/local/nginx/sbin/nginx -t 检测配置文件是否正确

3.nginx进程模型

Nginx会按需同时运行多个进程:
一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等。
所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。
主进程以root用户身份运行,而worker、cache loader和cache manager均应以非特权用户身份(user配置项)运行。
主进程主要完成如下工作:
1. 读取并验正配置信息;
2. 创建、绑定及关闭套接字;
3. 启动、终止及维护worker进程的个数;
4. 无须中止服务而重新配置工作特性;
5. 重新打开日志文件;
worker进程主要完成的任务包括:
1. 接收、传入并处理来自客户端的连接;
2. 提供反向代理及过滤功能;
3. nginx任何能完成的其它任务;

master主要管理worker进程,包含:
接收来自外界的信号,
向各worker进程发送信号,
监控worker进程的运行状态,
当worker进程退出后(异常情况下),会自动重新启动新的worker进程。

发送信号的方式
kill -QUIT 进程号 安全停止
kil -TERM 进程号 立即停止
停止nginx
./nginx -s stop 停止
./nginx -s quit退出
./nginx -s reload 重新加载nginx.conf
image.png

4.核心配置结构

main(全局设置)
events设定nginx的工作模式及连接数上限
http 服务器相关属性
server(虚拟主机设置)
upstream(上游服务器设置,主要为反向代理、负载均衡相关配置)
location(URL匹配特定位置后的设置)
image.png

虚拟主机
1个虚拟主机相当于是一个网站
nginx中多个server标签

基本配置:
image.png

image.png
直接访问nginx即可
image.png

5.日志配置以及切割

通过访问日志,你可以得到用户地域来源、跳转来源、使用终端、某个URL访问量等相关信息;
通过错误日志,你可以得到系统某个服务或server的性能瓶颈等。

$remote_addr 客户端的ip地址(代理服务器,显示代理服务ip)
$remote_user 用于记录远程客户端的用户名称(一般为“-”)
$time_local 用于记录访问时间和时区
$request 用于记录请求的url以及请求方法
$status 响应状态码,例如:200成功、404页面找不到等。
$body_bytes_sent 给客户端发送的文件主体内容字节数
$http_user_agent 用户所使用的代理(一般为浏览器)
$http_x_forwarded_for 可以记录客户端IP,通过代理服务器来记录客户端的ip地址
$http_referer 可以记录用户是从哪个链接访问过来的

1、编写自动分割Nginx日志脚本

  1. #!/bin/bash
  2. #设置日志文件存放目录
  3. LOGS_PATH=/usr/local/nginx/logs
  4. #备分文件名称
  5. YESTERDAY=$(date
  6. -d "yesterday" +%Y%m%d%H%M)
  7. #重命名日志文件
  8. mv
  9. ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
  10. mv
  11. ${LOGS_PATH}/error.log ${LOGS_PATH}/error_${YESTERDAY}.log
  12. ##
  13. Nginx 主进程发送
  14. USR1 信号。USR1
  15. 信号是重新打开日志文件
  16. kill
  17. -USR1 $(cat /usr/local/nginx/logs/nginx.pid)

2、设置Linux定时任务 cron
0 0 *

    • root /usr/local/nginx/logs/nginxLogRotate.sh

6.location规则

语法规则:
location [=|~|~|^~] /uri/ {… }
最常用:
location = /
location ^~ /static/
location ~
.(gif|png|css|js)$
image.png

7.rewrite的使用

rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,
结合正则表达式和标志位实现url重写以及重定向。
rewrite只能放在server{},location{},if{}中,
并且只能对域名后边的除去传递的参数外的字符串起作用,
例如http://seanlook.com/a/we/index.jsp?id=1&u=str 只对/a/we/index.php重写。
语法rewrite regex replacement [flag];

8.动静分离

9.反向代理实战

10.跨域配置

11.缓存配置及Gzip配置

12.https配置

13.keepalived高可用配置

14.横向拓展带来的问题