十月概览。
10.1-10.4-四天北京行。
10.8 - 断断续续的几场面试下来。有过上班-面试之间不同状态的切换,心力交瘁,但也收获颇多。看看合适的机会,锻炼锻炼能力
10.16 面试官问了 vue底层响应式原理? 什么是虚拟DOM? key的作用? 原型链及最后到顶层会是一个什么值? 性能优化和后台双重认证
半个钟的时间,确实这几次收获最大的一次。他跟我说“ 框架永远不能停留在只会用上 ”。一语点醒
的确,从年初到现在是该反思。vue底层真的透了吗?别迷茫
记。一次较真
什么是同源策略?
同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
所谓同源是指:协议、域名、端口都相同
【 git-参考文档 】 | 【 git/0416 - nginx的参数配置 】
nginx
- nginx 是一个高性能的 HTTP 和 反向代理 服务器。其特点是占有内存少,并发能力强。
1、Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理;
-
nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能;
-
nginx可以根据不同的正则匹配,采取不同的转发策略;
-
反向代理,代理的是服务端;
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
// https://www.cnblogs.com/qdhxhz/p/8910174.html
// https://zhuanlan.zhihu.com/p/673485988
http {
server_tokens off;
#HTTP服务器
server {
#监听80端口,80端口是知名端口号,用于HTTP协议
listen 80;
#定义使用www.xx.com访问
server_name localhost;
location / {
root html/Pays;
index index.html index.htm;
try_files $uri $uri/ @router;
add_header X-Content-Type-Options nosniff;
proxy_set_header X-scheme $scheme;
#作用是我们可以获取到客户端的真实ip
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;
proxy_hide_header X-Powered-By;
proxy_hide_header Vary;
}
# 开始配置我们的反向代理
location /admin/ {
proxy_pass http://103.100.210.42:8883;
proxy_cookie_path / /admin;
proxy_redirect default;
proxy_set_header X-Real-IP $remote_addr;
rewrite ^/admin/(.*) /$1 break; #404
}
gzip on;
gzip_disable “MSIE [1-6].(?!.*SV1)”;
gzip_http_version 1.0;
gzip_vary on;
gzip_proxied any;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/xml application/xml+rss application/javascript;
}
}
2、负载均衡
nginx 提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略
两大步骤
,实战:
2.1、在 /usr/local 目录下安装 三个包:
先安装依赖包,并做好解压工作。依赖包安装顺序【依次】为: openssl、zlib、pcre
, 最后安装Nginx包。
-
2.1.1、ssl 功能需要 openssl 库: [
wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz
] -
2.1.2、gzip 模块需要 zlib 库:[
wget http://zlib.net/zlib-1.2.11.tar.gz
] -
2.1.3、rewrite 模块需要 pcre 库:[
wget http://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz
]
[ csdn - Linux 解压图解教程 ] ----|| ---- 参考安装1 ----|| ---- 参考安装2
2.2、最后 /usr/local 目录下安装 nginx:
-
1、下载:
wget http://nginx.org/download/nginx-1.2.6.tar.gz
-
2、解压:tar -zxvf nginx-1.2.6.tar.gz ,用命令 ls 查找是否下载下来。
-
3、进入 cd nginx-1.2.6 文件夹,操作:
有必要:
/** 此时可能暴露的问题:
* |
* 1、nginx 安装时候报错:make: *** No rule to make target `build', needed by `default'. Stop.
*/
yum install -y pcre pcre-devel openssl openssl-devel gcc gcc gcc-c++ ncurses-devel perl
/**
* 2、当 linux安装时出现./configure: error: C compiler cc is not found 时:
*/
yum -y install gcc gcc-c++ autoconf automake make
再执行:
-
./configure | make | make install
-
4、返回上一级,会出现 nginx。安装成功
-
运行-
./sbin/nginx -s reload
3、处理报错:
3.1、nginx.pid丢失问题:
-
在 logs 里创建 nginx.pid 文件
-
nginx同级,运行方法:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
成功这里会打印出ip所有的端口; 然后运行- ./sbin/nginx -s reload
Nginx常用命令
- 启动 Nginx: ./sbin/nginx
- 停止 Nginx: ./sbin/nginx -s quit
- Nginx 重载配置: ./sbin/nginx -s reload
- 查看 Nginx 版本: ./sbin/nginx -v
- 检查配置文件是否正确: ./sbin/nginx –t
1、配置负载均衡服务器
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server_tokens off;
keepalive_timeout 65;
#【 配置服务器名 】
upstream load_balance_server{
#ip_hash;//根据ip配分到固定的服务器,防止负载均衡时不能共享内存。浪费带宽
server 127.0.0.1:8000;
#配置被转发的服务器,其中的 ip 推荐使用内网 ip,可以提高访问速度
#weight 为权重,数字越大,权越高
#下面的配置代表请求中三分之一分发给第一台服务器,三分之二的请求分发给第二台服务器。
server 127.0.0.1:8001 weight=2;
}
server {
listen 80;
#域名,如果没有域名可以使用ip进行访问
server_name localhost;
location / {
#配置代理的地址,重点是这里,将代理转发给上方 upstream 中配置的两台服务器去处理
#这里的 http:// 后的值必须和 upstream 后面的值一致
proxy_pass http://load_balance_server; #请求转向load_balance_server 定义的服务器列表
root html;
index index.html index.htm;
add_header X-Content-Type-Options nosniff;
proxy_set_header X-scheme $scheme;
#作用是我们可以获取到客户端的真实ip
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;
proxy_hide_header X-Powered-By;
proxy_hide_header Vary;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
2、性能优化方面:
a、配置gzip,调优
- HTTP 传输主要以文本为主,其中大量是一些静态资源文件,包括 JS / CSS / HTML / IMAGE 等。
- gzip 压缩可以在传输的过程中对内容进行压缩,减少带宽压力的同时提高用户访问速度,是一个有效的 Web 页面性能优化手段。
- gzip 压缩功能,可为我们节约带宽,加快传输速度,有更好的体验,也为我们节约成本。
注意:
- 像 图片/mp3 这样的二进制文件,不必压缩,因为压缩率比较小, 比如 100->80 字节,
而且压缩也是耗费CPU资源的
。
b、expires 缓存调优
-
主要针对于图片,css,js等元素更改机会比较少的情况下使用,特别是图片,占用带宽大,我们完全可以设置图片在浏览器本地缓存。
-
缺点:被缓存的页面或数据更新了,用户看到的可能还是旧的内容,反而影响用户体验。
{% img /images/08_04/nginx_expires.png %}
HTTP头部设置保护网站应用安全
1、 XSS审计
跨站脚本Cross-site scripting (XSS)是最普遍的危险攻击,经常用来注射恶意代码到你的应用以获得登录用户的数据,或者利用优先权执行一些动作,设置X-XSS-Protection能保护你的网站免受跨站脚本的攻击。
add_header X-XSS-Protection "1; mode=block";
2、Content Type选项
一些浏览器非常聪明,会猜测默认的数据传输内容,比如即使服务器说这是一个普通文本文件,浏览器也会当成一个HTML文件渲染输出显示,这会被黑客用来导向不信任的Javacript代码,设置X-Content-Type-Options为nosniff ,就是强迫浏览器尊重服务器端指定的文件类型。
add_header X-Content-Type-Options nosniff;
3、Frame选项
设置X-Frame-Options头部可以保护你的网站内容被别人包含在一个iframe中,也就是Html的框架中,如果别人用iframe包含了你的网站页面,他们就可能强迫用户在你网站某个部分点击隐藏在iframe中恶意代码,比如clickjacking攻击。
将这个选项设置为DENY是完全堵塞在一个框架中显示你的网站,SAMEORIGIN设置则是框架中只能显示来自同一个服务器的内容,而ALLOW-FROM则是你规定的白名单。
add_header X-Frame-Options "SAMEORIGIN";
http {
server_tokens off; #nginx 版本信息泄露,服务器头部不显示
server {
listen 80;
#域名,如果没有域名可以使用ip进行访问
server_name localhost;
location / {
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
}
}
}
nginx xxs防御规则:http://blog.sina.com.cn/s/blog_3f12afd00101ox6j.html