使用 nginx 可以做这样的事情吗?
if ( $http_user_agent = "wget" ){
server {
listen 192.0.2.11:1111;
root /website1/;
server_name website1.example www.website1.example;
else
server {
listen 192.0.2.22:22222;
root /website2/;
server_name example2.example www.website2.example;
}
答案1
答案2
以下是我认为您正在寻找的方法。我知道这已经是几年前的事情了,但我一直在寻找类似的东西,希望这对将来的某人有所帮助。
map $http_user_agent $user_agent {
default all;
wget wget;
}
server {
listen 123;
location / {
proxy_pass http://$user_agent;
}
}
upstream wget {
server 127.0.0.1:1111;
}
upstream all {
server 127.0.0.1:22222;
}
server {
listen 127.0.0.1:1111;
root /website1/;
server_name example.com www.example.com;
}
server {
listen 127.0.0.1:22222;
root /website2/;
server_name example2.com www.example2.com;
}
答案3
在给定的形式下,它将不起作用:测试 HTTP User-Agent 意味着请求已被接收。这只有在server
已定义某些块的情况下才有可能。您真的想根据在其他地方收到的请求的 User-Agent 字符串来启动新服务器吗?
如果你只是想根据请求的各个部分(例如 User-Agent)提供不同的内容、重定向到不同的路径等,这是可能的,例如http://nginx.org/en/docs/http/ngx_http_rewrite_module.html