@TOC前端
若是要理解什麼是跨域vue
廣義上的跨域是指一個域下的文檔或腳本試圖去請求另外一個域下的資源。即瀏覽器的同源策略/SOP限制引發的跨域也屬於在內;node
同源策略/SOP(Same origin policy)是一種約定,由Netscape公司1995年引入瀏覽器,它是瀏覽器最核心也最基本的安全功能,若是缺乏了同源策略,瀏覽器很容易受到XSS、CSFR等攻擊。同源策略即: 協議+域名+端口"三者相同nginx
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 同一域名,不一樣協議 不容許(有跨域)
http://www.baidu.com/hello.js
http://192.168.22.128/world.js 域名和域名對應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中間件代理解決跨域
複製代碼
server {
listen 80;
server_name localhost; //前端域名 具體原理解釋在下方
location / { // location / 代理全部請求 而若是是 location /api 則匹配到有/api 前綴的請求才會代理
proxy_pass www.baidu.com; // 服務端域名
}
}
複製代碼
根據瀏覽器的SOP/同源策略 localhost對www.baidu.com發起請求必定會出現跨域問題;但如今只要咱們啓動nginx服務器把server_name設置成前端的域名, 此時前端發起的請求至關因而localhost對localhost發起,這樣是不會引發跨域的;但真實狀況是,nginx對localhost的請求代理回 www.baidu.comgit
這裏贅述一下什麼是代理;github
代理是在服務器和客戶端之間假設的一層服務器(中間服務器),代理將接收客戶端的請求並將它轉發給服務器,而後將服務端的響應轉發給客戶端。json
代理分爲正向代理和反向代理:具體區別自行百度...
複製代碼
nginx是經過把請求分發到服務器列表來實現負載均衡的;具體實現以下:api
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須要轉發的服務端列表,並無指定分配策略。跨域
輪詢策略是默認的策略,把每一個請求按順序逐一分配到不一樣的server,若是server掛掉,能自動剔除瀏覽器
upstream balance.com{
server 192.168.2.100:42000;
server 192.168.2.101:42000;
server 192.168.2.102:42000;
}
複製代碼
把請求優先分配給鏈接數最少的server,能夠平衡每一個隊列的長度;
upstream balance.com{
least_conn;
server 192.168.2.100:42000;
server 192.168.2.101:42000;
server 192.168.2.102:42000;
}
複製代碼
優先分配給響應時間最短的服務器。
upstream balance.com {
fair;
server 192.168.2.100:42000;
server 192.168.2.101:42000;
server 192.168.2.102:42000;
}
複製代碼
使用weight來指定server訪問比率,weight默認是1。訪問率比例等於權重比例;
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的hash值分配,這樣同一客戶端連續的Web請求都會被分發到同一server進行處理,能夠解決session的問題。若是server掛掉,能自動剔除。
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;
}
複製代碼
以上是博主目前瞭解和使用到的一些技巧和知識啦,至於關於nginx部署後404問題請看@安靜Eno| vue框架下部署上線後刷新報404問題解決方案
尊重原著 文章轉自@安靜Enonginx部署/代理/跨域