Nginx常用配置及其他跨域处理(前端)

Nginx主要功能:


     1. 负载均衡
     2. 反向代理
     3. 动静分离
     4. 配置https

负载均衡


负载均衡是一门计算机网络技术,主要用来优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。
如果一个网站只有一台服务器的话,如果这台服务器宕机了,那么整个网站将无法正常访问。当访问网站人数过多,并发量达到一定规模,超过服务器性能的极限,整个网站也将无法访问。而负载均衡就是用来解决这一类的问题。



负载均衡是通过后端引入一个负载均衡器和至少一个额外的web服务器来缓解这类问题(增加的web服务器和原本的web服务器提供相同的内容)。用户访问的时候,先访问到负载均衡器,再通过负载均衡器将请求转发给后台服务器。



通过这种方法,当有一台服务器宕机时,负载均衡器就分配其他的服务器给用户,极大的增加的网站的稳定性。

负载均衡器主要可以转发http、https、tcp、udp四种请求规则
负载均衡器如何给用户分配服务器? 负载均衡器有多种负载均衡算法,基本就是给每台服务器一个不同的权重,通过权重来给用户分配服务器。
负载均衡不需要前端进行配置,主要是服务端进行配置,前端稍作了解即可。

正 / 反向代理


  • 正向代理:代理端代理的客户端,服务端认代理端不认客户端。
  • 反向代理:代理端代理的服务端,客户端认代理端不认服务端。

处理跨域:

反向代理是前端经常会用到的一项功能,主要是为了解决浏览器跨域访问的问题。当协议、域名、端口号有一项或多项不同时,便违反了同源策略,需要跨域。前端跨域用的技术比较多,如下:

  • jsonp跨域:
    使用html的<script>标签可以引入第三方的js文件,所以我们可以通过:
<script src="http://后台接口页面?key=value"></script>

来绕过跨域的限制。但是需要注意的是,jsonp只支持get请求。
jQuery格式:

$.ajax({
       async : true,
       url : "https://api.douban.com/v2/book/search",
       type : "GET",
       dataType : "jsonp",   // 返回的数据类型,设置为JSONP方式
       jsonp : 'callback',   //指定一个查询参数名称来覆盖默认的 jsonp 回调参数名 callback
       jsonpCallback: 'handleResponse',   //设置回调函数名
       data : {}, 
       success: function(xhr){
           console.log(xhr);
       }
 });
  • webpack反向代理:
    前端开发中,基于webpack配置环境的spa页面已经是一种趋势,webpack内置的proxy可以帮助我们在开发环境调试接口时将我们的地址代理到后台服务地址,解决跨域问题。配置如下:
proxyTable: {
    '/api': {
      target: 'http://localhost:8080',  //目标接口域名
      changeOrigin: true,  //是否跨域
      pathRewrite: {
        '^/api': '/static/config'   //重写接口
      }
 }

这段代码的含义就是,当前端访问后台接口匹配到 '/api' 时,将代理到 http://localhost:8080 服务端地址,如果前台的接口名为:/api/home,代理的请求路径将是:http://localhost:8080/static/config/home

  • 使用Nginx进行反向代理:
    前端开发完成,对代码进行打包后,Webpack就无法使用了。这个时候我们手里只有html、css、js等静态文件,后台接口地址都会访问不到。这个时候Nginx就登场了,Nginx反向代理配置和Webpack大同小异,匹配到动态的地址时将请求转发到一个服务器地址实现跨域。具体流程如下:
  1. 访问Nginx官网,下载Nginx到本地
  2. 将打包完成的代码放置在nginx的html目录下
  3. 打开conf文件夹下的nginx.conf文件,配置如下:
server {
    listen       3000;    //监听的本地端口
    server_name  localhost;    
                
    location /api {         //匹配到/api开头的接口时,转发到下面的服务器地址
        root   html;  
        proxy_pass  http://192.168.xxx.xxx:8080;    //服务器地址      
    }  
                        
    location =/ {
        root html;
        index  index.htm  index.html;   //默认主页
    }
                        
    # 所有静态请求都由nginx处理,存放目录为html  
    location ~ \.(htm|html|js|css|jpg|png|gif|eot|svg|ttf|woff|woff2)$ {  
        root    html;      //配置静态资源地址
    }    
                
    error_page   500 502 503 504  /50x.html;
        location = /50x.html {
        root   html;
    }
}

动静分离


动静分离是为了减少不必要的请求已减少资源的浪费、请求的延时。

举个例子,假如我们所有的前台数据都从后台获取,我们访问百度首页时,如果首页有一张背景图,那么我们每个人每次进入首页时都要去请求接口获取这张背景图,而首页的访问量是巨大的,每次都为了一张背景图去请求同一个接口对于资源的消耗不可计数,为了减少资源的损耗、加快网页的加载速度,动静分离由此而生。

像这种静态资源,前端都会直接保存在本地文件之中,每次进入首页的时候从本地文件内读取静态图片资源,动态数据再通过反向代理去服务器端获取展示。具体配置如下:

 location ~ \.(htm|html|js|css|jpg|png|gif|eot|svg|ttf|woff|woff2)$ {  
     root    html;      //配置静态资源地址
 } 

当匹配到上述后缀名时,直接去html内获取静态资源,不向后台发起请求。

配置https服务


微信小程序现在越来越火,大批前端开发进军微信小程序,但是微信小程序只支持https请求,这是一个问题。但当你看完这篇文章,这将不再是阻挡你的一座大山。

要配置https服务,流程具体如下:

  1. 申请证书,便宜ssl可以申请三个月免费ssl证书,申请过程请按照官方提示步骤
  2. 申请完成后下载nginx版本的证书至本地,一个crt文件一个key文件,crt为证书,key为密钥
  3. 配置nginx,如下:
server {
    listen       443 ssl;    //监听443端口,因为443端口是https的默认端口。80为http的默认端口
    server_name  www.domain.com;    //配置域名
                
    ssl_certificate      证书的绝对路径;
    ssl_certificate_key  密钥的绝对路径;
                
    # location / {        //反向代理的服务器地址,视情况进行配置
    #    proxy_pass   http://112.35.xxx.xxx;
    # }          
}   

案例总结


最后,我们走一遍整个流程


1.用户输入http://域名,默认80端口
2.nginx监听到80端口被访问,匹配到域名为www.dream.com,将服务代理到http://192.168.3.10:8080
3.服务器返回页面资源
4.用户输入https://二级域名,默认端口为443
5.nginx监听443端口,匹配到相应域名,进行证书验证,将服务代理到指定服务器

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容