Nginx
如何在 Nginx 中使用 HTTP 標頭來提供不同的內容?
我注意到 Deno 服務
html
或javascript
依賴於 HTTPaccept
標頭。例如,如果您只是在瀏覽器中打開這個包,您將返回 HTML(因為
accept
標頭設置為accept: text/html
https://deno.land/std@0.81.0/http/server.ts
但是,如果您使用 javascript 導入它甚至 curl,那麼您將取回一個
javascript/typescript
文件。import { serve } from "https://deno.land/std@0.81.0/http/server.ts";
或者
curl https://deno.land/std@0.81.0/http/server.ts
這真的很酷,但我想知道如何使用 Nginx 做到這一點?不使用 Node.js 或 PHP。我知道我可以指定 server_name 和 location 但是標題呢?
例如,如果 HTTP 標頭
accept: text/html
然後代理到伺服器 1,否則代理傳遞到不同的伺服器。我正在尋找這樣的東西
server { listen 80; server_name www.test.io; location / { IF HTTP HEADER accept == "text/html" { proxy_pass http://your_server_ip:443; } else { proxy_pass http://your_server_ip:8080; } } }
這種映射是使用 nginx
map
指令完成的。將以下地圖添加到您的
http
關卡:map $http_accept $upstream { default 192.168.100.1:8000; text/html 192.168.100.1:443; }
然後,在您的
server
塊中使用:location / { proxy_pass http://$upstream; }
然而,
Accept
頭部通常包含不止一種 MIME 類型,因此實際中的匹配部分map
需要更加複雜。例如,可能需要檢查標頭是否
text/html
在任何時候包含:map $http_accept $upstream { ~.*text/html.* 192.168.100.1:443; }