Nginx是什么?
“Nginx 是一款轻量级的 HTTP 服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的 IO 性能,时常用于服务端的反向代理和负载均衡。”
HTTP服务器:负责处理和响应用户要求
基本操作指令:
1、安装:
brew install nginx
2、启动:
启动 Nginx:
sudo nginx 或 sudo brew services start nginx
停止 Nginx:
sudo nginx -s stop 或 sudo brew services stop nginx
热重启 Nginx:
sudo nginx -s reload
强制停止 Nginx:
sudo pkill -9 nginx
Master-Worker模式
启动Nginx后,在80端口启动了Socket服务进行监听,涉及到了Master进程和Worker进程
Master进程:读取并验证配置文件Nginx.conf,管理worker进程
Worker进程:维护线程,处理连接和请求,worker进程的个数由配置文件决定
修改配置:
常用的几个文件路径:
-
/usr/local/etc/nginx/nginx.conf (nginx配置文件路径)
-
/usr/local/var/www (nginx服务器默认的根目录)
-
/usr/local/Cellar/nginx/1.17.9 (nginx的安装路径)
-
/usr/local/var/log/nginx/error.log (nginx默认的日志路径)
server{ } 其实是包含在 http{ } 内部的。每一个 server{ } 是一个虚拟主机(站点)。
4大应用:
- 动静分离,给应用服务器减轻压力,将后台API接口服务化,前后端代码分开并行开发部署
- 反向代理,保障应用服务器的安全(增加了一层代理)(代理的是服务器端,正向代理的是客户端)
- 负载均衡
- 跨域
动静分离:
Nginx将收到的请求分为动态请求和静态请求:
静态请求直接从nginx所设定的根目录路径去取对应的资源
动态请求转发给后台(应用服务器,如Tomcat)去处理
反向代理:
浏览器或其他终端向nginx请求,具体怎么拿到的内容浏览器并不知道。
如下:向nginx请求localhost:8080,请求将被转发到8000端口
负载均衡:
nginx可以将接收到的客户端请求“均匀”分配到集群中所有的服务器上,并会定期轮询向集群中的所有服务器发送健康检查请求,一旦某台服务器异常,
之后代理进来的客户端请求将不会被发送到该服务端上
跨域:
前端调用后台服务时,通常会遇到 No 'Access-Control-Allow-Origin' header is present on the requested resource的错误,这是因为浏览器的同源策略拒绝了我们的请求。
同源:域名,协议,端口相同
对于线上请求只需要更改对应的proxy_pass:http://目标地址
HTTP响应头字段:
Access-Control-Allow-Origin : 指定了该响应的资源与给定的origin共享
*:允许任何来源的代码
<origin>: 只能指定一个来源URI,允许从该来源的请求代码访问资源
Access-Control-Allow-Header : 用于指示在实际请求期间可以使用哪些HTTP标头
Access-Control-Allow-Methods : 指示在特定端点上允许哪些HTTP方法用于跨域请求
由于Access-Control-Allow-Origin配置一个域名,若想要配置多个域名白名单跨域的时候,可以设置一个变量cors_origin来存储需要跨域的白名单,在server中的配置为: