前端工程师不可不知的 Nginx 知识:https://mp.weixin.qq.com/s/zlq-KhyuAbp8bRpPtRp0IQ
Nginx 安装的配置文件和目录:rpm -ql nginx
正向代理 Forward proxy:正向代理的对象是客户端,服务器端看不到真正的客户端
反向代理 Reverse proxy:反向代理的对象是服务端,客户端看不到真正的服务端
跨域:使用 CORS 、使用 Nginx 反向代理来解决跨域(proxy_pass)
Gzip:节省带宽,http1.1+,
请求限制:limit_conn_module 连接频率限制、limit_req_module 请求频率限制
访问控制:http_access_module 基于 IP 的访问控制、http_auth_basic_module 基于用户的信任登陆
ab命令:ab命令全称为:Apache bench,是 Apache 自带的压力测试工具,也可以测试 Nginx、IIS 等其他 Web 服务器。
-n 总共的请求数、-c 并发的请求数:ab -n 1000 -c 5000 http://127.0.0.1/
防盗链:防盗链的原理就是根据请求头中 referer 得到网页来源,从而实现访问控制。这样可以防止网站资源被非法盗用,从而保证信息安全,减少带宽损耗,减轻服务器压力。
负载均衡 Load Balance
后端服务器状态
分配方式:轮询(默认)、weight(加权轮询),轮询的加强版、ip_hash、url_hash、自定义hash、fair
nginx nginx -s stop // 停止 nginx -s reload // 重启 nginx -t // 检查修改的nginx.conf配置是否正确,ok和successful proxy_pass url // 反向代理
Upstream模块实现负载均衡
ip_hash指令
server指令
upstream指令及相关变量worker_processes:工作进程数,和CPU核数相同
worker_connections:每个进程允许的最大连接数
upstream模块:负载均衡就靠它。语法格式:upstream name {} 里面写的两个server分别对应着不同的服务器
server模块:实现反向代理
listen监督端口号:location / {}访问根路径 proxy_pass http://firstdemo,代理到firstdemo里两个服务器上
ip_hash:作用是如果第一次访问该服务器后就记录,之后再访问都是该服务器了
server_name:用指定的域名去访问
nginx在应用程序中的作用
- 解决跨域
- 请求过滤
- 配置gzip
- 负载均衡
- 静态资源服务器
main:nginx的全局配置,对全局生效。
events:配置影响nginx服务器或与用户的网络连接。
http:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。
server:配置虚拟主机的相关参数,一个http中可以有多个server。
location:配置请求的路由,以及各种页面的处理情况。
upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分。内置变量
- $host 请求信息中的 Host,如果请求中没有 Host行,则等于设置的服务器名
- $request_method 客户端请求类型,如 GET、 POST
- $remote_addr 客户端的 IP地址
- $args 请求中的参数
- $content_length 请求头中的 Content-length字段
- $http_user_agent 客户端agent信息
- $http_cookie 客户端cookie信息
- $remote_addr 客户端的IP地址
- $remote_port 客户端的端口
- $server_protocol 请求使用的协议,如 HTTP/1.0、·HTTP/1.1`
- $server_addr 服务器地址
- $server_name 服务器名称
- $server_port 服务器的端口号
同源的定义:如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源。
nginx解决跨域的原理:只需要启动一个nginx服务器,将 server_name设置为 fe.server.com,然后设置相应的location以拦截前端需要跨域的请求,最后将请求代理回 dev.server.com请求过滤:
1、根据状态码过滤
2、根据URL名称过滤,精准匹配URL,不匹配的URL全部重定向到主页。
3、根据请求类型过滤。配置gzip
如何知道客户端是否支持 gzip呢,请求头中的 Accept-Encoding来标识对压缩的支持
开启gzip,默认http/1.1(HTTP/1.1默认支持 TCP持久连接)
边压缩边响应,这样可以显著提高 TTFB( TimeToFirstByte,首字节时间,WEB 性能优化重要指标)负载均衡
1、轮询策略:默认
2、最小连接数策略:least_conn
3、最快响应时间策略:fair
4、客户端ip绑定:ip_hash(来自同一个ip的请求永远只分配一台服务器,有效解决了动态网页存在的session共享问题。)
解决跨域问题
同源:URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口相同,则表示他们同源。
浏览器的同源策略:浏览器的同源策略,限制了来自不同源的"document"或脚本,对当前"document"读取或设置某些属性。从一个域上加载的脚本不允许访问另外一个域的文档属性。配置文件解析
配置文件主要由四部分组成:
main(全区设置)
server(主机配置)
http(控制着nginx http处理的所有核心特性)
location(URL匹配特定位置设置)。
upstream(负载均衡服务器设置)
Nginx搭配Tomcat实现负载均衡:https://mp.weixin.qq.com/s/-BX7FbaGYrhxksbztqmgpA