前端使用 Nginx 反向代理徹底解決跨域問題
阿新 • • 發佈:2019-01-10
一、前言
由於身處於小團隊,作為後臺的,不得已參與到前端開發中。首先迎來的就是跨域的問題。
個人覺得使用 nginx 是一種較為簡單直接徹底的辦法
二、流程
1、請求後端資料失敗
程式碼如下
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.1.0.min.js" ></script>
<script type="text/javascript">
function upd() {
$.ajax({
type: "get",
url: "http://120.79.197.130:8530/spring/user/get",
success: function(result) {
console.log(result);
}
});
}
</script>
<body>
<!--獲取-->
<button id="btn2" onclick="upd()">Get request 獲取</button>
</body>
</html>
2、加入 nginx
1、在 conf/nginx.conf 中,很多都是預設配置,筆者把註釋去掉,添加了自己少量的配置
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65 ;
server {
listen 8888; # 任意
server_name localhost;
location / {
root html;
index index.html index.htm;
}
# 新加的
location /spring {
proxy_pass http://120.79.197.130:8530; # 後端介面 IP:port
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
2、點選 開啟服務
3、修改程式碼上述 html 程式碼的 url
$.ajax({
type: "get",
url: "/spring/user/get", // 注意連結
success: function(result) {
console.log(result);
}
});
4、將程式碼檔案放入 nginx 的 html 資料夾中(可以把裡邊的其他 html 刪掉)
如下
5、基於 nginx 伺服器,訪問該 html 檔案,可以看到,跨域請求,成功訪問資料
三、配置 HBuilder 內建伺服器為 nginx
問題來了,跨域請求雖然是成功了,但是每次編寫完 html,都要放到 nginx/html 下才能正常跨域請求,是不是覺得有點麻煩
像 Sublime 直接以 nginx/html 為工作環境即可
像 webstorm、HBuilder 都有內建伺服器,要怎麼破?
筆者主要使用 HBuilder,支援國產 ~,下面以 HBuilder 為例
1、點選 設定web 伺服器
2、新建外接 web 伺服器
內容可以如下示例:
3、使用自己配置的伺服器取代預設的伺服器
4、再以 nginx/html 為工作環境即可
最簡單方法:
① 匯入工程
選擇 再點選
以 nginx/html 下的目錄
點選完成即可
四、小結
至此, 沒有所謂的跨域問題,且前端的開發環境依舊 ~
其他的編譯器類似,不再多述