Nginx学习总结
Posted 二狗和大喵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx学习总结相关的知识,希望对你有一定的参考价值。
nginx作用:
1、路由功能(与微服务对应):域名/路径,进行路由选择后台服务器
2、负载功能(与高并发高可用对应):对后台服务器集群进行负载
3、静态服务器(比tomcat性能高很多):在mvvm模式中,充当文件读取职责
正向代理:为了从原始服务器取得内容,客户端向代理服务器发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。比如:代购行为
反向代理:以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端
Nginx模型概念:
master主要管理worker进程,包含:
1.接收来自外界的信号,
2.向各worker进程发送信号,
3.监控worker进程的运行状态,
4.当worker进程退出后(异常情况下),会自动重新启动新的worker进程。
worker进程主要完成的任务包括:
1. 接收、传入并处理来自客户端的连接;
2. 提供反向代理及过滤功能;
3. nginx任何能完成的其它任务;
Nginx.conf配置文件结构:
main(全局设置)
events设定nginx的工作模式及连接数上限
http 服务器相关属性
server(虚拟主机设置)
upstream(上游服务器设置,主要为反向代理、负载均衡相关配置)
location(URL匹配特定位置后的设置)
Main模块解析:
#user nobody; #主模块命令, 指定Nginx的worker进程运行用户以及用户组,默认由nobody账号运行。
worker_processes 1;#指定Nginx要开启的进程数。
worker_rlimit_nofile 100000; #worker进程的最大打开文件数限制
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid; #用来指定进程id的存储文件位置。
events {
use epoll;
worker_connections 1024; #设置nginx每个进程最大的连接数,默认是1024,nginx最大的连接数max_client=worker_processes * worker_connections。进程最大连接数受到系统最大打开文件数的限制,需要设置ulimit。
}
/* error log:用来定义全局错设日志文件的路径和日志名称。日志输出级别有debug,info,notice,warn,error,crit 可供选择,其中debug输出日志最为详细,面crit(严重)输出日志最少。默认是error
event:设定nginx的工作模式及连接数上限,其中参数use用来指定nginx的工作模式(这里是epoll,epoll是多路复用IO(I/O Multiplexing)中的一种方式),nginx支持的工作模式有select ,poll,kqueue,epoll,rtsig,/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,对于linux系统,epoll是首选。*/
http服务器相关属性的设置:
http {
include mime.types; #主模块命令,对配置文件所包含文件的设定,相当于把部分设置放在别的地方,然后在包含进来,类似于JSP和C语言头文件说明
default_type application/octet-stream; 默认文件类型,当文件类型未定义时候就使用这类设置的。
# 指定nginx日志的格式
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
# 设置访问日志保存路径和使用什么日志名称
#access_log logs/access.log main;
sendfile on; #开启高效文件传输模式(zero copy 方式),避免内核缓冲区数据和用户缓冲区数据之间的拷贝。
#tcp_nopush on; #开启TCP_NOPUSH套接字(sendfile开启时有用)
keepalive_timeout 65; #客户端连接超时时间
#gzip on; 设置是否开启gzip模块
server虚拟主机的配置:
server {
listen 80; 虚拟主机的服务端口
server_name localhost; 用来指定ip或者域名,多个域名用逗号分开
root html; 虚拟主机的网页根目录
index index.html index.htm; 默认访问首页文件
}
#error_page 404 /404.html; //定义404页面
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html; //定义50x路径
}
}
Server配置详解:
Listen 这里一般监听端口,如果出现监听IP+端口,下面的server_name自动失效。
如:listen 192.168.231.153:80; 此时server_name无效
Server_name 这里可以填IP,也可以hostname(hostname必须在服务端hosts里配置相关信息,否则报错)。
如:server_name abc.com; 或 server_name 10.220.3.1;
Location语法规则:location [=|~|~*|^~] /uri/ {… }
精准匹配: = 优先级最高
普通location: 无前缀;“^~” 表示任何正则表达式将不会被读取。
普通匹配,即使是完全匹配,也不是精准匹配
正则location :“~” 表示区分大小写; “~*” 表示不区分大小写; ”!~” 为区分大小写不匹配; ”!~*” 为不区分大小写不匹配
Nginx执行过程:
URL= 域名+端口+path+param
匹配过程:(对照下面图文)
1、域名(ip)+端口 ——》定位Server
2、path与location部分匹配,path = 匹配path + 剩余path
如:URL=http://process.enjoy.com/nginx/enjoy/getInfo
则http://process.enjoy.com命中server /nginx/enjoy= 命中路径 /getInfo = 剩余路径
命中路径在location里通过proxy后形成的URL变成了
http://172.17.0.4:8081/nginx/enjoy/getInfo
如这条url:
http://process.enjoy.com/dynamic/nginx/enjoy/getInfo里面/dynamic,是被location匹配中的path1,因为proxy代理8081后面有/,nginx转发时必须中传path2,舍弃path1
注意注意:
proxy_pass=http://172.17.0.4:8081/
proxy_pass= ip:port/
ip:port/时,转发ip+端口+path2路径
ip:port 时,转发ip+端口+path1+path2路径 (没有/)
3、root和alias设置server工作的根目录,相当于string rootPath = "/usr/local/html"
这里的rootPath就是安装Nginx时会初始化一个目录,如果Server里不配置root或者alias,将会把初始值当根目录(目录建议使用绝对路径)
root:在目录里找path1+path2路径
alias:在目录里找path2路径
例如:url----http://process.enjoy.com/target /a.html如下图
location匹配后,path1=/target,path2=/a.html。
alias方式是在目标html/static/文件夹内,查找路径path2= /a.html的文件。
以上是关于Nginx学习总结的主要内容,如果未能解决你的问题,请参考以下文章