關(guān)于nginx,咱們先了解nginx在開發(fā)過程中的主要作用
- nginx解決跨域
- nginx負(fù)載均衡
一世舰、nginx解決跨域
如果要理解什么是跨域
廣義上的跨域是指一個(gè)域下的文檔或腳本試圖去請(qǐng)求另一個(gè)域下的資源。即瀏覽器的同源策略/SOP限制引起的跨域也屬于在內(nèi)槽卫;
- 那么什么是同源策略呢跟压?
同源策略/SOP(Same origin policy)是一種約定,由Netscape公司1995年引入瀏覽器歼培,它是瀏覽器最核心也最基本的安全功能震蒋,如果缺少了同源策略,瀏覽器很容易受到XSS躲庄、CSFR等攻擊查剖。同源策略即: 協(xié)議+域名+端口"三者相同
- 常見的跨域場(chǎng)景如下:
URL 說明 是否允許通信
http://www.baidu.com/hello.js
http://www.baidu.com/world.js 同一域名,不同文件或路徑 允許(無跨域)
http://www.baidu.com/hello/world.js
http://www.baidu.com:8000/hello.js
http://www.baidu.com/hello.js 同一域名噪窘,不同端口 不允許(有跨域)
http://www.baidu.com/hello.js
https://www.baidu.com/world.js 同一域名笋庄,不同協(xié)議 不允許(有跨域)
http://www.baidu.com/hello.js
http://192.168.22.128/world.js 域名和域名對(duì)應(yīng)ip 不允許(有跨域)
http://baidu.com/hello.js
http://x.baidu.com/hello.js 主域相同,子域不同 不允許(有跨域)
http://www.baidu.com/hello.js
http://www.baidu.com/hello.js
http://www.bai.com/world.js 不同域名 不允許(有跨域)
常見的跨域解決方案有如下:
1. jsonp解決跨域
2. document.domain + iframe解決跨域
3. nginx代理解決跨域
4. nodejs中間件代理解決跨域
重點(diǎn)來了 nginx代理解決跨域倔监;
server {
listen 80;
server_name localhost; //前端域名 具體原理解釋在下方
location / { // location / 代理所有請(qǐng)求 而如果是 location /api 則匹配到有/api 前綴的請(qǐng)求才會(huì)代理
proxy_pass www.baidu.com; // 服務(wù)端域名
}
}
- 前端server域名是localhost
- 服務(wù)器server域名是www.baidu.com
根據(jù)瀏覽器的SOP/同源策略 localhost對(duì)www.baidu.com發(fā)起請(qǐng)求一定會(huì)出現(xiàn)跨域問題直砂;但現(xiàn)在只要我們啟動(dòng)nginx服務(wù)器把server_name設(shè)置成前端的域名,
此時(shí)前端發(fā)起的請(qǐng)求相當(dāng)于是localhost對(duì)localhost發(fā)起丐枉,這樣是不會(huì)引起跨域的哆键;但真實(shí)情況是,nginx對(duì)localhost的請(qǐng)求代理回 www.baidu.com
這里贅述一下什么是代理瘦锹;
代理是在服務(wù)器和客戶端之間假設(shè)的一層服務(wù)器(中間服務(wù)器)籍嘹,代理將接收客戶端的請(qǐng)求并將它轉(zhuǎn)發(fā)給服務(wù)器闪盔,然后將服務(wù)端的響應(yīng)轉(zhuǎn)發(fā)給客戶端。
代理分為正向代理和反向代理:具體區(qū)別自行百度...
二辱士、nginx負(fù)載均衡
nginx是通過把請(qǐng)求分發(fā)到服務(wù)器列表來實(shí)現(xiàn)負(fù)載均衡的泪掀;具體實(shí)現(xiàn)如下:
upstream balance.com{
server 192.168.2.100:42000;
server 192.168.2.101:42000;
server 192.168.2.102:42000;
}
server {
server_name fe.server.com;
listen 80;
location /api {
proxy_pass http://balance.com;
}
}
上面的配置只是指定了nginx需要轉(zhuǎn)發(fā)的服務(wù)端列表,并沒有指定分配策略颂碘。
nginx負(fù)載均衡策略
- 輪詢策略
輪詢策略是默認(rèn)的策略异赫,把每個(gè)請(qǐng)求按順序逐一分配到不同的server,如果server掛掉头岔,能自動(dòng)剔除
upstream balance.com{
server 192.168.2.100:42000;
server 192.168.2.101:42000;
server 192.168.2.102:42000;
}
- 最少連接數(shù)策略
把請(qǐng)求優(yōu)先分配給連接數(shù)最少的server,可以平衡每個(gè)隊(duì)列的長(zhǎng)度;
upstream balance.com{
least_conn;
server 192.168.2.100:42000;
server 192.168.2.101:42000;
server 192.168.2.102:42000;
}
- 最快響應(yīng)時(shí)間策略
優(yōu)先分配給響應(yīng)時(shí)間最短的服務(wù)器塔拳。
upstream balance.com {
fair;
server 192.168.2.100:42000;
server 192.168.2.101:42000;
server 192.168.2.102:42000;
}
- 權(quán)重策略
使用weight來指定server訪問比率,weight默認(rèn)是1峡竣。訪問率比例等于權(quán)重比例靠抑;
upstream balance.com{
server 192.168.2.100:42000 weight=1;
server 192.168.2.101:42000 weight=2;
server 192.168.2.102:42000 weight=3;
}
- 客戶端ip綁定 ip_hash
每個(gè)請(qǐng)求會(huì)按照訪問ip的hash值分配,這樣同一客戶端連續(xù)的Web請(qǐng)求都會(huì)被分發(fā)到同一server進(jìn)行處理适掰,可以解決session的問題颂碧。如果server掛掉,能自動(dòng)剔除类浪。
upstream balance.com{
ip_hash;
server 192.168.2.100:42000 weight=1;
server 192.168.2.101:42000 weight=2;
server 192.168.2.102:42000 weight=3;
}
- backup 標(biāo)記為備份服務(wù)器载城。當(dāng)主服務(wù)器不可用時(shí),將傳遞與備份服務(wù)器的連接费就。
upstream balance.com{
server 192.168.2.100:42000 backup;
server 192.168.2.101:42000;
}
本文介紹的是基礎(chǔ)功能诉瓦,如果想了解更多請(qǐng)轉(zhuǎn)nginx文檔
以上是博主目前了解和使用到的一些技巧和知識(shí)啦,至于關(guān)于nginx部署后404問題請(qǐng)看@安靜Eno| vue框架下部署上線后刷新報(bào)404問題解決方案
尊重原著 文章轉(zhuǎn)自@安靜Enonginx部署/代理/跨域