nginx简介
1、Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 服务器
2、常见的应用服务器:
Apache/Microsoft IIS/Tomcat/Lighttpd/Nginx
介绍nginx在系统架构(网关入口)中的作用,总结如下:
1、路由功能(与微服务对应):域名/路径,进行路由选择后台服务器
2、负载功能(与高并发高可用对应):对后台服务器集群进行负载
3、静态服务器(比tomcat性能高很多):在mvvm模式中,充当文件读取职责
总结:实际使用中,这三项功用,会混合使用。比如先分离动静,再路由服务,再负载机器
**
1.正向代理和反向代理
代理:意思是一个位于客户端和原始服务器(origin
server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。
反向代理(Reverse
Proxy):方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
区别:正向代理偏向于多个客户端,反向代理偏向于多个服务器
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
4.核心配置结构
main(全局设置)
events设定nginx的工作模式及连接数上限
http 服务器相关属性
server(虚拟主机设置)
upstream(上游服务器设置,主要为反向代理、负载均衡相关配置)
location(URL匹配特定位置后的设置)
虚拟主机
1个虚拟主机相当于是一个网站
nginx中多个server标签
基本配置:
直接访问nginx即可
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日志脚本
#!/bin/bash
#设置日志文件存放目录
LOGS_PATH=/usr/local/nginx/logs
#备分文件名称
YESTERDAY=$(date
-d "yesterday" +%Y%m%d%H%M)
#重命名日志文件
mv
${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
mv
${LOGS_PATH}/error.log ${LOGS_PATH}/error_${YESTERDAY}.log
##
向 Nginx 主进程发送
USR1 信号。USR1
信号是重新打开日志文件
kill
-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)$
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];