Nginx代理跨域

一、Nginx代理跨域配置

在開發中,由於瀏覽器同源策略的限制,會存在跨域問題。Nginx是一個高性能的Web服務器,它有着強大的代理功能,可以通過Nginx代理跨域來解決這個問題。

下面是配置示例:

location /api/ {
  proxy_pass http://example.com/;
  proxy_set_header Host $host;
  proxy_set_header Origin $host;
  proxy_set_header Referer $host;
}

其中,proxy_pass指定代理的目標地址,而proxy_set_header則設置一些頭部信息。Origin和Referer是防止瀏覽器CSRF攻擊的必要頭部信息,需要加上。

二、Nginx配置代理解決跨域問題

可以通過修改Nginx配置文件來解決跨域問題。

下面是配置示例:

location / {
  add_header Access-Control-Allow-Origin *;
  add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";
  add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
  if ($request_method = 'OPTIONS') {
    return 204;
  }
}

其中,Access-Control-Allow-Origin指定允許跨域的域名,可以使用通配符*表示允許所有域名。Access-Control-Allow-Headers設置允許跨域的頭部信息。Access-Control-Allow-Methods指定允許的請求方法。當請求方法為OPTIONS時,直接返回204,表示允許請求。

三、Nginx代理跨域/api

Nginx代理跨域/api通常用於代理RESTful API。

下面是配置示例:

location /api/ {
  proxy_pass http://example.com/;
  proxy_set_header Host $host;
  proxy_set_header Origin $host;
  proxy_set_header Referer $host;
}

四、Nginx代理數據庫

在實際開發中,有時需要通過Nginx代理訪問數據庫。

下面是配置示例:

location / {
  proxy_pass http://localhost:3000/;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection 'upgrade';

  proxy_set_header Host $host;
  proxy_cache_bypass $http_upgrade;
}

其中,proxy_pass指定代理的目標地址(此處為本地的3000端口)。proxy_http_version指定HTTP協議版本(1.1)。proxy_set_header Upgrade和proxy_set_header Connection是為了支持WebSocket。其他設置與前面相似。

五、Nginx代理跨越

除了代理跨域,Nginx還可以用來代理跨越。

下面是配置示例:

location / {
  if ($request_method = 'OPTIONS') {
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    #
    # Custom headers and headers various browsers *should* be OK with but aren't
    #
    add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization';
  
    #
    # Tell client that this pre-flight info is valid for 20 days
    #
    add_header 'Access-Control-Max-Age' 1728000;
    add_header 'Content-Type' 'text/plain; charset=utf-8';
    add_header 'Content-Length' 0;
    return 204;
  }
  if ($request_method = 'POST') {
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization';
    add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
  }
  if ($request_method = 'GET') {
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization';
    add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
  }
}

此處採用了常用的RESTful風格,並添加了Access-Control-Allow頭部信息,允許跨域訪問。

六、Nginx代理模式有哪些

Nginx支持多種代理模式,包括反向代理、負載均衡和高可用等。

反向代理:指的是將客戶端請求轉發到多個服務器上。

負載均衡:指的是將客戶端請求平均地分配到多個服務器上,以提高系統吞吐量和性能。

高可用:指的是將多個服務器配置在一起,以保證在某個服務器故障時可以無縫地切換到其它可用的服務器上,以提供可靠的服務。

七、Nginx代理局域網yum

變相實現yum代理緩存。yum在局域網中的使用非常普遍。通過Nginx來代理yum,可以在本地鏡像服務器上建立一個yum代理緩存。當客戶端需要軟件包時,可以從這個本地代理緩存中快速地獲取。

下面是配置示例:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=yum_cache:10m inactive=60m;
server {
  listen 80;
  server_name yum.localdemo.com;
  root /usr/share/nginx/html;
  
  location / {
    index index.html;
  }

  location /repos {
    proxy_pass http://repo.localdemo.com/;
    proxy_set_header Host $host;
    proxy_cache yum_cache;
    proxy_cache_valid 200 15m;
    proxy_cache_valid 404 1m;
    add_header X-Cache-Status $upstream_cache_status;
  }
}

其中,proxy_cache_path用於設置Nginx的緩存路徑,方便快速地響應客戶端請求。server_name指定本地鏡像服務器的地址。location /repos指定緩存的yum軟件包所在目錄。

八、Nginx代理

Nginx作為高性能的Web服務器,在代理方面有着不可替代的優勢。除了上面介紹的代理模式外,還可以通過反向代理來實現訪問外部資源。

示例:

upstream backend {
  server 192.168.1.1 weight=10;
  server 192.168.1.2 weight=10;
}

server {
  listen 80;
  server_name frontend.localdemo.com;

  location / {
    root /usr/share/nginx/html/;
    try_files $uri /index.html;
  }

  location /api {
    proxy_pass http://backend;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
  }
}

其中,upstream backend定義了後端服務器的地址和權重。location /api指定了代理的目標地址,並設置了一些頭部信息。

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

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

相關推薦

  • 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

發表回復

登錄後才能評論