Nginx 学习(一)
1、Nginx 应用场景
- 动态资源服务,通过本地文件系统提供服务;
- 反向代理服务,延长出包含缓存、负载平衡等;
- API 服务,OpenResty
2、概念
2.1、简略申请和非简略申请
1、简略申请
同时满足上面两个条件
1)申请办法是 HEAD、GET、POST 三种之一;
2)HTTP 头信息不超过左边着几个字段:Accept、Accept-Language、Content-Language、Last-Event-ID
Content-Type 只限于三个值 application/x-www-form-urlencoded、multipart/form-data、text/plain;
2、非简略申请
不同时满足上述两个条件的
3、浏览器解决简略申请和非简略申请的形式
1)简略申请
对于简略申请,浏览器会在头信息中减少 Origin 字段后间接收回,Origin 字段用来阐明,本次申请来自的哪个源(协定 + 域名 + 端口)。
如果服务器发现 Origin 指定的源不在许可范畴内,服务器会返回一个失常的 HTTP 回应,浏览器取到回应之后发现回应的头信息中没有蕴含 Access-Control-Allow-Origin 字段,就抛出一个谬误给 XHR 的 error 事件;
如果服务器发现 Origin 指定的域名在许可范畴内,服务器返回的响应会多出几个 Access-Control- 结尾的头信息字段。
2)非简略申请
非简略申请是那种对服务器有特殊要求的申请,比方申请办法是 PUT 或 DELETE,或 Content-Type 值为 application/json。浏览器会在正式通信之前,发送一次 HTTP 预检 OPTIONS 申请,先询问服务器,以后网页所在的域名是否在服务器的许可名单之中,以及能够应用哪些 HTTP 申请办法和头信息字段。只有失去必定回答,浏览器才会收回正式的 XHR 申请,否则报错。
2.2 跨域
1、跨域概念
在浏览器上以后拜访的网站向另一个网站发送申请获取数据的过程
2、跨域作用
跨域 :浏览器的 同源策略 决定的,是一个重要的 浏览器安全策略 ,用于限度一个 origin 的文档或者它加载的脚本与另一个源的资源进行交互,它可能帮忙 阻隔歹意文档 , 缩小可能被攻打的媒介,能够应用 CORS 配置解除这个限度。
同源定义:
如果两个 URL 的 protocol、port (en-US) (如果有指定的话)和 host 都雷同的话,则这两个 URL 是同源。这个计划也被称为“协定 / 主机 / 端口元组”,或者间接是“元组”。(“元组”是指一组我的项目形成的整体,双重 / 三重 / 四重 / 五重 / 等的通用模式)。
例子:
2.3、正向代理和反向代理
个别给客户端做代理的都是正向代理,给服务器做代理的就是反向代理。
2.4、负载平衡
负载平衡,外围是「摊派压力」。Nginx 实现负载平衡,一般来说指的是将申请转发给服务器集群。
2.5、动静拆散
因为 Nginx 的高并发和动态资源缓存等个性,常常将动态资源部署在 Nginx 上。如果申请的是动态资源,间接到动态资源目录获取资源,如果是动静资源的申请,则利用反向代理的原理,把申请转发给对应后盾利用去解决,从而实现动静拆散。
应用前后端拆散后,能够很大水平晋升动态资源的访问速度,即便动静服务不可用,动态资源的拜访也不会受到影响。
3、nginx 配置
3.1 通用配置:nginx.conf
user nginx; # 运行用户,默认即是 nginx,能够不进行设置
worker_processes 1; # Nginx 过程数,个别设置为和 CPU 核数一样
error_log /var/log/nginx/error.log warn; # Nginx 的谬误日志寄存目录
pid /var/run/nginx.pid; # Nginx 服务启动时的 pid 寄存地位
events {use epoll; # 应用 epoll 的 I / O 模型(如果你不晓得 Nginx 该应用哪种轮询办法,会主动抉择一个最适宜你操作系统的)
worker_connections 1024; # 每个过程容许最大并发数
}
http { # 配置应用最频繁的局部,代理、缓存、日志定义等绝大多数性能和第三方模块的配置都在这里设置
# 设置日志模式
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 /var/log/nginx/access.log main; # Nginx 拜访日志寄存地位
sendfile on; # 开启高效传输模式
tcp_nopush on; # 缩小网络报文段的数量
tcp_nodelay on;
keepalive_timeout 65; # 放弃连贯的工夫,也叫超时工夫,单位秒
types_hash_max_size 2048;
include /etc/nginx/mime.types; # 文件扩展名与类型映射表
default_type application/octet-stream; # 默认文件类型
include /etc/nginx/conf.d/*.conf; # 加载子配置项
server {
listen 80; # 配置监听的端口
server_name localhost; # 配置的域名
location / {
root /usr/share/nginx/html; # 网站根目录
index index.html index.htm; # 默认首页文件
deny 172.168.22.11; # 禁止拜访的 ip 地址,能够为 all
allow 172.168.33.44;# 容许拜访的 ip 地址,能够为 all
}
error_page 500 502 503 504 /50x.html; # 默认 50x 对应的拜访页面
error_page 400 404 error.html; # 同上
}
}
server 块能够蕴含多个 location 块,location 指令用于匹配 uri,语法:
location [= | ~ | ~* | ^~] uri {...}
- = 准确匹配门路,用于不含正则表达式的 uri 前,如果匹配胜利,不再进行后续的查找;
- ^~ 用于不含正则表达式的 uri 前,示意如果该符号前面的字符是最佳匹配,采纳该规定,不再进行后续的查找;
- ~ 示意用该符号前面的正则去匹配门路,辨别大小写;
- ~* 示意用该符号前面的正则去匹配门路,不辨别大小写。跟 ~ 优先级都比拟低,如有多个 location 的正则能匹配的话,则应用正则表达式最长的那个;
如果 uri 蕴含正则表达式,则必须要有 ~ 或 ~* 标记。
3.2 配置反向代理
改完保留退出,nginx -s reload
从新加载
比方监听 9001 端口,而后把拜访不同门路的申请进行反向代理:
把拜访 http://127.0.0.1:9001/edu 的申请转发到 http://127.0.0.1:8080
把拜访 http://127.0.0.1:9001/vod 的申请转发到 http://127.0.0.1:8081
关上主配置文件,而后在 http 模块下减少一个 server 块:
server {
listen 9001;
server_name *.sherlocked93.club;
location ~ /edu/ {proxy_pass http://127.0.0.1:8080;}
location ~ /vod/ {proxy_pass http://127.0.0.1:8081;}
}
反向代理其余的指令:
proxy_set_header:在将客户端申请发送给后端服务器之前,更改来自客户端的申请头信息。
proxy_connect_timeout:配置 Nginx 与后端代理服务器尝试建设连贯的超时工夫。
proxy_read_timeout:配置 Nginx 向后端服务器组收回 read 申请后,期待相应的超时工夫。
proxy_send_timeout:配置 Nginx 向后端服务器组收回 write 申请后,期待相应的超时工夫。
proxy_redirect:用于批改后端服务器返回的响应头中的 Location 和 Refresh。
3.3、配置负载平衡
upstream demo_name{
server ip:port; # ip1
server ip:port; # ip2
server ip:port; #ip3
}
3.4、例子
学习参考:
1)https://juejin.cn/post/684490…
2)浏览器的同源策略:https://developer.mozilla.org…