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...