1. 程式人生 > >前端使用 Nginx 反向代理徹底解決跨域問題

前端使用 Nginx 反向代理徹底解決跨域問題

一、前言

這裡寫圖片描述
由於身處於小團隊,作為後臺的,不得已參與到前端開發中。首先迎來的就是跨域的問題。
個人覺得使用 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 下的目錄
這裡寫圖片描述
點選完成即可

四、小結

至此, 沒有所謂的跨域問題,且前端的開發環境依舊 ~
其他的編譯器類似,不再多述