1、代理和跨域
1.1 正向代理
1)用戶希望代理服務器幫助其和要訪問服務器之間實現通信,需要:
a.用戶IP報文的目的IP=代理服務器IP;
b.用戶報文端口號=代理服務器監聽端口號;
c.HTTP消息里的URL要提供服務器的鏈接;
2)代理服務器可以根據HTTP消息里的URL提供服務器的鏈接與服務器進行連接通信;
3)服務器返回網頁;
4)代理服務器打包網頁返回給用戶;
1.2 反向代理
單個服務器的處理客戶端(用戶)請求能力是有限的,當用戶的請求達到一定數量時,會造成服務器忙,此時可以使用多個服務器共同分擔這些請求,這些服務器提供相同的服務,對於客戶端而言,這些沒有任何區別。
反向代理的實現:
1)一個分發用戶請求的負載均衡設備,將用戶請求分發到空閑的服務器上;
2)服務器返回自己的服務到負載均衡設備;
3)負載均衡將服務器的服務返回用戶;
注意:客戶端做服務器域名解析時,返回的IP是負載均衡的IP,而不是服務器的IP,當新增/移除服務器時,只需要修改負載均衡的服務器列表,而不會影響現有的服務。
1.3 兩種代理
代理就是客戶端請求交給服務器響應;反向代理就是代理服務器的響應返回給客戶端;即正向代理是代理客戶端,反向代理是代理服務器;
1.4 跨域
跨域,指的是瀏覽器不能執行其他網站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對javascript施加的安全限制。
所謂同源是指,域名,協議,端口都相同。瀏覽器執行javascript腳本時,會檢查這個腳本屬於哪個頁面,如果不是同源頁面,就不會被執行。
2、nginx
2.1 nginx介紹
Nginx在前后端分離框架設計中,既可以作為前端的HTTP訪問器,也可以通過簡單配置實現負載均衡,還可以通過反向代理配置解決前后端分離的JavaScript跨域問題。
解決方案:Nginx服務器中,監聽同一個域名和端口,不同路徑轉發到客戶端和服務器,把不同端口和域名的限制通過反向代理,來解決跨域問題。
2.2 nginx安裝和配置
2.2.1 編輯nginx.conf文件
進入/etc/nginx目錄,編輯nginx.conf文件;將http 域內的整個server{}內容清除,找到include /etc/nginx/conf.d/*.conf;這行,如果沒有,添加到http {} 的關閉括號前一行,刪除或注釋掉其他的 include *.conf行。
2.2.2 創建workload_server.conf
在nginx.conf中已經添加:include /etc/nginx/conf.d/*.conf;,所以先去/etc/nginx/conf.d目錄,清空所有的內容,然后在該目錄下創建workload_server.conf文件;
2.3 部署反向代理
upstream cas_server_http {
#ip_hash;
server ip1 weight=1;
#jvm_route $cookie_JSESSIONID|sessionid reverse;
}
upstream server_app1{
#ip_hash;
server ip2 weight=1;
}
upstream server_app2{
least_conn;
server ip3 weight=1;
}
server {
listen 8190 default_server;
listen [::]:8190 default_server;
server_name _;
location / {
root /var/www/html;
# root /usr/share/nginx/html;
index index.html index.htm index.nginx-debian.html;
try_files $uri $uri/ =404;
}
# apiApp
location /api1/ {
proxy_pass http://server_app1/api1/;
proxy_set_header Host $http_host;
}
# apiService
location /api2/ {
proxy_pass http://server_app2/api2/;
proxy_set_header Host $http_host;
}
# apiCas
location /cas/ {
proxy_pass http://cas_server_http/cas/;
proxy_set_header Host $host;
proxy_cookie_path /cas/ /;
proxy_pass_header Set-Cookie;
}
}
2.4 nginx操作
2.4.1 啟動nginx
nginx
2.4.2 停止nginx
nginx -s stop
2.4.3 查看nginx進程
ps -ef | grep nginx
2.4.4 修改nginx.conf后重啟nginx
nginx -s reload
3、問題
3.1 端口被占用
解決方案:
3.2 403 forbidden
分析:
當訪問該地址的時候,nginx 會按照 index.html,index.htm ,index.php 的先后順序在根目錄中查找文件。如果這三個文件都不存在,那么nginx就會返回。