關於nginx,咱們先了解nginx在開發過程中的主要作用
- nginx解決跨域
- nginx負載均衡
一、nginx解決跨域
如果要理解什麼是跨域
廣義上的跨域是指一個域下的文檔或腳本試圖去請求另一個域下的資源。即瀏覽器的同源策略/SOP限制引起的跨域也屬於在內;
- 那麼什麼是同源策略呢?
同源策略/SOP(Same origin policy)是一種約定,由Netscape公司1995年引入瀏覽器,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,瀏覽器很容易受到XSS、CSFR等攻擊。同源策略即: 協議+域名+端口"三者相同
- 常見的跨域場景如下:
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中間件代理解決跨域
重點來了 nginx代理解決跨域;
server {
listen 80;
server_name localhost; //前端域名 具體原理解釋在下方
location / { // location / 代理所有請求 而如果是 location /api 則匹配到有/api 前綴的請求才會代理
proxy_pass www.baidu.com; // 服務端域名
}
}
- 前端server域名是localhost
- 服務器server域名是www.baidu.com
根據瀏覽器的SOP/同源策略 localhost對www.baidu.com發起請求一定會出現跨域問題;但現在只要我們啓動nginx服務器把server_name設置成前端的域名,
此時前端發起的請求相當於是localhost對localhost發起,這樣是不會引起跨域的;但真實情況是,nginx對localhost的請求代理回 www.baidu.com
這裏贅述一下什麼是代理;
代理是在服務器和客戶端之間假設的一層服務器(中間服務器),代理將接收客戶端的請求並將它轉發給服務器,然後將服務端的響應轉發給客戶端。
代理分爲正向代理和反向代理:具體區別自行百度...
二、nginx負載均衡
nginx是通過把請求分發到服務器列表來實現負載均衡的;具體實現如下:
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需要轉發的服務端列表,並沒有指定分配策略。
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綁定 ip_hash
每個請求會按照訪問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;
}
- backup 標記爲備份服務器。當主服務器不可用時,將傳遞與備份服務器的連接。
upstream balance.com{
server 192.168.2.100:42000 backup;
server 192.168.2.101:42000;
}
本文介紹的是基礎功能,如果想了解更多請轉nginx文檔
以上是博主目前瞭解和使用到的一些技巧和知識啦,至於關於nginx部署後404問題請看@安靜Eno| vue框架下部署上線後刷新報404問題解決方案
尊重原著 文章轉自@安靜Enonginx部署/代理/跨域