深入了解nginx轉發

一、nginx轉發http請求

nginx可以作為http伺服器,也可以將請求轉發到其他的http伺服器。使用nginx轉發http請求的好處在於可以平衡負載,提升伺服器性能。下面是一個簡單的示例:

http{
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;
        server_name example.com;
        location / {
            proxy_pass http://backend;
        }
    }
}

在上面的配置中,nginx會將所有的http請求轉發到名為backend的upstream中。upstream實際上是多台伺服器的集合,nginx會自動負載均衡請求到這些伺服器中。proxy_pass指令將請求轉發給upstream,由upstream來處理請求。

二、nginx轉發websocket協議

nginx不僅可以轉發http請求,也可以轉發websocket協議的請求。下面是一個簡單的配置示例:

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;
        server_name example.com;
        location /websocket {
            proxy_pass http://backend;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    }
}

在上面的示例中,nginx會將所有的websocket請求轉發到upstream中。同樣,proxy_pass指令指定了upstream作為請求的目標。而proxy_http_version 1.1、proxy_set_header Upgrade $http_upgrade和proxy_set_header Connection “upgrade”則是用來設置websocket協議的特殊頭。

三、nginx轉發ftp請求

除了http和websocket之外,nginx也可以轉發ftp協議。以下是一個簡單的配置示例:

http {
    upstream ftp_backend {
        server backend1.example.com:21;
        server backend2.example.com:21;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            root /var/www/example.com;
            index index.html;
        }

        location /ftp/ {
            proxy_pass ftp://ftp_backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

在上面的示例中,nginx會將所有的ftp請求轉發到ftp_backend中。proxy_pass指令中的ftp://協議說明了這個upstream是用來代理ftp請求的。其他的指令則是用來設置一些特殊的ftp頭信息,例如Host、X-Real-IP和X-Forwarded-For。

四、nginx轉發sftp請求

sftp是一個加密的ftp協議,通常用於安全的文件傳輸。nginx也可以轉發sftp請求,以下是一個簡單的配置示例:

http {
    upstream sftp_backend {
        server sftp-backend1.example.com:22;
        server sftp-backend2.example.com:22;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            root /var/www/example.com;
            index index.html;
        }

        location /sftp/ {
            proxy_pass sftp://sftp_backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

在上面的示例中,nginx會將所有的sftp請求轉發到sftp_backend中。proxy_pass指令中的sftp://協議說明了這個upstream是用來代理sftp請求的,其他的指令則是用來設置一些特殊的sftp頭信息。

五、nginx轉發服務

nginx不僅可以轉發http、websocket、ftp和sftp請求,還可以轉發其他的服務。例如,以下是一個轉發SMTP請求的示例:

mail {
    server {
        listen 25;

        proxy_pass smtp_backend;
    }
}

upstream smtp_backend {
    server smtp-server1.example.com:25;
    server smtp-server2.example.com:25;
}

在上面的示例中,nginx會將所有的SMTP請求轉發到upstream中。mail指令用於配置郵件伺服器,而proxy_pass指令則是用於轉發SMTP請求。

六、nginx轉發導致400

在使用nginx轉發時,有時候會遇到400錯誤。這通常是由於nginx無法解析請求的原因造成的。以下是一個解決400錯誤的示例:

location / {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_pass http://backend/$uri$is_args$args;

    proxy_intercept_errors on;
    proxy_http_version 1.1;

    error_page 400 = @error400;

    location @error400 {
        return 200 '{"error":"Bad request"}';
    }
}

在上面的示例中,proxy_intercept_errors on用於攔截錯誤。error_page 400 = @error400則是用於將400錯誤返回到另一個location中。@error400中的指令則是用於返回自定義的400錯誤頁面。

七、nginx轉發去掉前綴

在轉發http請求時,有時候希望去掉請求中的前綴。以下是一個示例:

location /backend/ {
    rewrite ^/backend/(.*)$ /$1 break;

    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_pass http://backend/$uri$is_args$args;
}

在上面的示例中,使用了rewrite指令將請求中的/backend/前綴去掉。然後使用proxy_pass指令將請求轉發到upstream中。

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

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

相關推薦

  • Java如何從Nginx下載文件

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

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

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

    編程 2025-04-25
  • 深入解析Vue3 defineExpose

    Vue 3在開發過程中引入了新的API `defineExpose`。在以前的版本中,我們經常使用 `$attrs` 和` $listeners` 實現父組件與子組件之間的通信,但…

    編程 2025-04-25
  • 深入理解byte轉int

    一、位元組與比特 在討論byte轉int之前,我們需要了解位元組和比特的概念。位元組是計算機存儲單位的一種,通常表示8個比特(bit),即1位元組=8比特。比特是計算機中最小的數據單位,是…

    編程 2025-04-25
  • 深入理解Flutter StreamBuilder

    一、什麼是Flutter StreamBuilder? Flutter StreamBuilder是Flutter框架中的一個內置小部件,它可以監測數據流(Stream)中數據的變…

    編程 2025-04-25
  • 深入探討OpenCV版本

    OpenCV是一個用於計算機視覺應用程序的開源庫。它是由英特爾公司創建的,現已由Willow Garage管理。OpenCV旨在提供一個易於使用的計算機視覺和機器學習基礎架構,以實…

    編程 2025-04-25
  • 深入了解scala-maven-plugin

    一、簡介 Scala-maven-plugin 是一個創造和管理 Scala 項目的maven插件,它可以自動生成基本項目結構、依賴配置、Scala文件等。使用它可以使我們專註於代…

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

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

    編程 2025-04-25
  • 深入了解LaTeX的腳註(latexfootnote)

    一、基本介紹 LaTeX作為一種排版軟體,具有各種各樣的功能,其中腳註(footnote)是一個十分重要的功能之一。在LaTeX中,腳註是用命令latexfootnote來實現的。…

    編程 2025-04-25
  • 深入了解Python包

    一、包的概念 Python中一個程序就是一個模塊,而一個模塊可以引入另一個模塊,這樣就形成了包。包就是有多個模塊組成的一個大模塊,也可以看做是一個文件夾。包可以有效地組織代碼和數據…

    編程 2025-04-25

發表回復

登錄後才能評論