我注意到 Deno 提供服务html
或javascript
依赖于 HTTPaccept
标头。
例如,如果你只是在浏览器中打开此包,你将获得 HTML 返回(因为accept
标头设置为accept: text/html
https://deno.land/[电子邮件保护]/http/server.ts
但是如果您使用 javascript 来导入它或者甚至使用 curl 那么您将得到一个javascript/typescript
文件。
import { serve } from "https://deno.land/[email protected]/http/server.ts";
或者curl https://deno.land/[email protected]/http/server.ts
这真的很酷,但我想知道如何使用 Nginx 来实现这一点?无需使用 Node.js 或 PHP。我知道我可以指定 server_name 和 location,但 headers 呢?
例如,如果 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;
}
}
}
答案1
这种映射是通过 nginxmap
指令完成的。
将以下地图添加到您的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;
}