Nginx配置允許跨域

一、nginx跨域是什麼

同源策略是瀏覽器最常用的安全策略,它的基本思想是:限制一個文檔或者腳本只能獲取屬於它自己的資源,防止惡意的網站竊取數據。在這個限制下,跨域就成了一個不可避免的問題。

簡單來說,當一個網頁從一個域名去請求另一個域名下的資源時,就會觸發跨域問題。例如,從http://www.example.com/index.html中的JS代碼請求http://www.baidu.com的資源就構成了跨域。

二、nginx跨域怎麼配置

下面給出配置詳細步驟:

1.修改nginx配置文件nginx.conf,添加如下內容:

    server{
        listen       80;
        server_name  example.com;
        location / {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,Websocket-Upgrade,Upgrade-Insecure-Requests,User-Agent,Referer,Cache-Control,Origin, X-Requested-With, Content-Type, Authorization, Accept-Language';
            add_header 'Access-Control-Allow-Credentials' true;
            if ($request_method = 'OPTIONS') {
                return 204;
            }
        }
    }

2.重啟nginx。

    sudo systemctl restart nginx

3. 驗證是否配置成功。在chrome瀏覽器上打開console窗口,輸入如下代碼:

    fetch('http://example.com').then(response => response.text()).then(data => console.log(data))

如果出現返回數據說明配置成功。如果仍然報錯,請核對配置是否正確。

三、nginx允許跨域

如何允許跨域?

下面是一些常用的允許跨域的方式:

1.使用反向代理

有時候我們的API服務器由於各種原因,不能直接訪問,這個時候我們可以使用反向代理。如下:

    server {
        listen       80;
        server_name  example.com;
        location / {
            proxy_pass http://api.example.com;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS';
            add_header 'Access-Control-Allow-Headers' '*';
        }
    }

2.使用jsonp

jsonp是一種前端跨域解決方案,它採用script標籤跨域獲取數據。如下:

    
        function jsonpCallback(data) {
            console.log(data)
        }
        var script = document.createElement('script')
        script.src = 'http://example.com/data.php?callback=jsonpCallback'
        document.body.appendChild(script)
    

3.使用cors

CORS是一種新的跨域解決方案,它是通過在http頭中添加“Access-Control-Allow-Origin”來授權跨域的。如下:

    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
    header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");

四、nginx解決跨域配置詳細教程

詳細的nginx解決跨域配置教程如下:

1.在nginx.conf中添加以下內容:

    server {
        listen              80;
        server_name         example.com;

        location / {
            if ($request_method = 'OPTIONS') {
                add_header 'Access-Control-Allow-Origin' '*';
                add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
                add_header 'Access-Control-Allow-Headers' 'DNT,Websocket-Upgrade,Upgrade-Insecure-Requests,User-Agent,Referer,Cache-Control,Origin, X-Requested-With, Content-Type, Authorization, Accept-Language';
                add_header 'Access-Control-Allow-Credentials' true;
                add_header 'Access-Control-Max-Age' 1728000;
                add_header 'Content-Type' 'text/plain; charset=utf-8';
                add_header 'Content-Length' 0;
                return 204;
            }
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,Websocket-Upgrade,Upgrade-Insecure-Requests,User-Agent,Referer,Cache-Control,Origin, X-Requested-With, Content-Type, Authorization, Accept-Language';
            add_header 'Access-Control-Allow-Credentials' true;
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Type' 'application/json; charset=utf-8';
        }
    }

2.重啟nginx。

    sudo systemctl restart nginx

3.測試nginx跨域是否成功配置。

    fetch('http://example.com').then(response => response.text()).then(data => console.log(data))

五、nginx安裝配置

若您還沒有為您的服務器安裝nginx,請按照以下步驟進行:

1.安裝nginx:

    sudo apt-get update
    sudo apt-get install nginx

2.啟動nginx:

    sudo systemctl start nginx

3.檢查nginx是否啟動:

    systemctl status nginx

六、正確的nginx跨域配置

正確的nginx跨域配置應該包含以下幾個方面:

1.允許多個域名跨域

在“Access-Control-Allow-Origin”中添加多個域名。如下:

    add_header 'Access-Control-Allow-Origin' 'http://a.com, http://b.com, http://c.com';

2.允許特定域名跨域

在“Access-Control-Allow-Origin”中添加特定的域名。如下:

    add_header 'Access-Control-Allow-Origin' 'http://a.com';

3.允許所有域名跨域

在“Access-Control-Allow-Origin”中添加通配符“*”。如下:

    add_header 'Access-Control-Allow-Origin' '*';

4.允許請求頭

在“Access-Control-Allow-Headers”中添加允許請求頭。如下:

    add_header 'Access-Control-Allow-Headers' 'DNT,Websocket-Upgrade,Upgrade-Insecure-Requests,User-Agent,Referer,Cache-Control,Origin, X-Requested-With, Content-Type, Authorization, Accept-Language';

5.允許請求方法

在“Access-Control-Allow-Methods”中添加允許請求方法。如下:

    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

6.允許攜帶cookie

在“Access-Control-Allow-Credentials”中允許攜帶cookie。如下:

    add_header 'Access-Control-Allow-Credentials' true;

註:如果不需要攜帶cookie,該項可以省略。

7.緩存預檢請求

可以在“Access-Control-Max-Age”中設置預檢請求的過期時間。如下:

    add_header 'Access-Control-Max-Age' 1728000;

在實際使用中,應根據需求選取相關參數進行配置,保證安全和穩定而不浪費資源。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/183173.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-24 16:27
下一篇 2024-11-24 16:27

相關推薦

  • Java如何從Nginx下載文件

    本文將從以下幾個方面詳細介紹如何使用Java從Nginx下載文件。 一、準備工作 在Java中下載文件需要使用到Apache HttpClient庫,這個庫是一個基於Java的HT…

    編程 2025-04-27
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • NGINX權限被拒絕問題

    NGINX是一款常見的Web服務器軟件,但是在使用中常會遇到“permission denied”權限被拒絕的問題。下文將從多個方面介紹本問題和解決方法。 一、系統權限問題 1、檢…

    編程 2025-04-25
  • 關閉nginx命令詳解

    一、linux系統中關閉nginx命令 1、使用ps命令找到nginx的進程ID $ ps -ef | grep nginx 2、發送信號給nginx進程結束 $ kill -QU…

    編程 2025-04-25
  • 深入淺出:理解nginx unknown directive

    一、概述 nginx是目前使用非常廣泛的Web服務器之一,它可以運行在Linux、Windows等不同的操作系統平台上,支持高並發、高擴展性等特性。然而,在使用nginx時,有時候…

    編程 2025-04-24
  • nginx指定配置文件詳解

    一、配置文件介紹 nginx的配置文件主要由指令和塊組成,以“;”分號作為結束符號,以“{}”大括號作為塊的開始和結束標誌。 nginx的默認配置文件在安裝目錄下的conf文件夾中…

    編程 2025-04-24
  • 重啟nginx服務的命令詳解

    nginx是一個高性能的Web服務器,可通過重新啟動nginx服務來更新配置文件和釋放資源。本文將從多個方面詳細闡述如何重啟nginx服務,包括命令的使用、參數的說明等。 一、ng…

    編程 2025-04-24
  • Nginx$Host詳解

    一、什麼是Nginx$Host Nginx是一款輕量級的Web服務器,可以作為反向代理服務器、負載均衡服務器等。而Nginx$Host是Nginx中的一個特殊變量,它用於表示當前請…

    編程 2025-04-23
  • Mac Nginx詳細介紹

    一、安裝Nginx 安裝nginx最簡便的方法是使用Homebrew。執行以下命令來安裝Homebrew: /usr/bin/ruby -e “$(curl -fsSL https…

    編程 2025-04-23
  • 如何解決Windows下Nginx啟動一閃而過的問題

    一、Nginx 安裝及配置過程 Nginx是一款輕量級的Web服務器,可以用於反向代理、負載均衡、緩存等方面的應用,常用於Web應用的高並發場景。在Windows系統上,安裝ngi…

    編程 2025-04-23

發表回復

登錄後才能評論