czy można zrobić coś takiego z nginx?
if ( $http_user_agent = "wget" ){
server {
listen 11.11.11.11:1111;
root /website1/;
server_name example.com www.example.com;
else
server {
listen 22.22.22.22:22222;
root /website2/;
server_name example2.com www.example2.com;
}
linux
nginx
configuration
użytkownik421936
źródło
źródło
Odpowiedzi:
Moduł przepisywania Nginx ma
if
dyrektywę (patrz przykłady w dokumentacji), ale nie maelse
. Odpowiednikiemelse
byłoby wszystko, co nie jest modyfikowane za pomocąif
.Możesz używać
if
wewnątrz,server { }
ale nie na odwrót. Nie miałbyś nawet warunku porównanego w twoim przypadku, gdyby przed żądaniem, które już potrzebuje serwera. Tam możesz podawać zawartość tylko wtedy, gdy agent użytkownika jest (lub nie jest)wget
.Zauważ też, że nie powinieneś używać
if
wewnątrz,location
ponieważ może nie działać zgodnie z oczekiwaniami (zobacz Jeśli jest zły ).źródło
W podanej formie nie będzie działać: testowanie agenta użytkownika HTTP oznacza, że żądanie zostało już odebrane. Jest to możliwe tylko wtedy, gdy jakiś
server
blok został już zdefiniowany. Czy naprawdę chcesz uruchomić nowe serwery w zależności od ciągu User-Agent żądania otrzymanego w innym miejscu?Jeśli chcesz po prostu udostępniać różne treści, przekierowywać do różnych ścieżek itp. W zależności od części żądania, takich jak User-Agent, jest to możliwe, np. Z http://nginx.org/en/docs/http/ngx_http_rewrite_module. HTML
źródło