Nginx跨域/防盗链/缓存/压缩/Https
跨域解决
流程:
- 当chrome发现ajax请求的网址,与当前主域名不一致(跨域)时,会在请求header中追加值页面主域名值,即:origin = http://static.enjoy.com
- nginx在接收到ajax请求时,会查看origin值,即请求我的网址是谁?此处使用正则来校验,即:只要是enjoy.com下的网址,都允许访问我,返回信息时,nginx追加header值:access-control-allow-origin = static.enjoy.com(回答浏览器,static域名网址可以访问我)
- chrome收到ajax返回值后,查看返回的header中access-control-allow-origin的值,发现其中的值是static.enjoy.com,正是当前的页面主域名。这是允许访问,于是执行ajax返回值内容。(ps:若此处access-control-allow-origin不存在,或者值不是static域名,chrome就拒绝执行返回值)
1 | server{ |
防盗链
目的:
- 让资源只能在我的页面内显示
- 不能单独来取或者下载
流程:
- chrome以url1首次请求web服务器,得到html页面。
- chrome再次发起url2资源请求,携带referers = url1。(注意,是url1,不是本次的url2)
- nginx校验referers值,决定是否允许访问。
- valid_referers:匹配域名白名单,如果不匹配,把内置变量$invalid_referers置为1,进入if块,返回404
1 | location ^~ /mall { |
缓存
1 | location ^~ /qq.png { |
压缩
带宽资源很贵 /html/js/css压缩,/images不压缩
过程:nginx压缩 —-》网络传输 —》chrome解压(压缩和解压消耗cpu)
- 浏览器携带支持的解压方式
- 浏览器与nginx的交互
1 | location ~ /(.*)\.(html|js|css|jpg|jpeg|png|gif)$ {#覆盖/re/a.htm路径 |
Https
nginx配置https的时候,需要两个东西:(此两样需购买)
一个key,私钥。放在nginx服务器里面,仅此一份
一个证书,公钥,供浏览器去下载。
nginx -V 需要有–with-http_ssl_module,表示安装了https模块。否则需要重新安装。
配置如下:
1 | ssl_certificate /etc/nginx/conf.d/server.crt; |