乐趣区

关于nginx:Nginx学习一

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…

退出移动版