Перенаправление на основе заголовка запроса «Accept-Language» приводит к ошибке в Google Cloud CDN - PullRequest
0 голосов
/ 11 июня 2018

В настоящее время я настраиваю сервер Nginx на «Google Compute Engine» за комбинированным балансировщиком нагрузки Google / CDN:

Website visitor <---> CDN <---> Load Balancer <---> Nginx on Google Compute Engine

Я хочу перенаправить посетителя с https://www.example.org/ наhttps://www.example.org/de/ или https://www.example.org/en/ в зависимости от значения HTTP-заголовка «Accept-Language» в запросе клиента.Для этой цели я использую следующий код в файле конфигурации nginx.conf:

set $language_suffix "en";
if ($http_accept_language ~* "^de") {
  set $language_suffix "de";
}

location = / {
  add_header Vary "Accept-Language";
  return 303 https://www.example.org/$language_suffix/;
}

Но приведенный выше конфиг приводит к ошибке 502:

~> curl -I https://www.example.org/
HTTP/2 502 
content-type: text/html; charset=UTF-8
referrer-policy: no-referrer
content-length: 332
date: Mon, 11 Jun 2018 09:57:55 GMT
alt-svc: clear

Как исправитьэто?

ОБНОВЛЕНИЕ:

XXX.XXX.XXX.XXX - "HEAD https://www.XXXXXXX.com/" 502 106 "curl/7.60.0" {
 httpRequest: {
  cacheLookup:  true   
  remoteIp:  "XXX.XXX.XXX.XXX"   
  requestMethod:  "HEAD"   
  requestSize:  "38"   
  requestUrl:  "https://www.XXXXXXX.com/"   
  responseSize:  "106"   
  status:  502   
  userAgent:  "curl/7.60.0"   
 }
 insertId:  "XXXXXXXXXXXXX"  
 jsonPayload: {
  @type:  "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"   
  statusDetails:  "failed_to_pick_backend"   
 }
 logName:  "projects/crack-triode-XXXXXXXX/logs/requests"  
 receiveTimestamp:  "2018-06-11T03:33:10.864056419Z"  
 resource: {
  labels: {
   backend_service_name:  ""    
   forwarding_rule_name:  "XXX-werbserver-ipv4-https"    
   project_id:  "crack-triode-XXXXXXXX"    
   target_proxy_name:  "XXX-werbserver-loadbalancer-target-proxy-2"    
   url_map_name:  "XXX-werbserver-loadbalancer"    
   zone:  "global"    
  }
  type:  "http_load_balancer"   
 }
 severity:  "WARNING"  
 spanId:  "XXXXXXXXXXXXXX"  
 timestamp:  "2018-06-11T03:33:10.088466141Z"  
 trace:  "projects/crack-triode-XXXXXXXX/traces/XXXXXXXXXXXXXXX"  
}

1 Ответ

0 голосов
/ 13 июня 2018

Вы должны изменить URI запроса с / на другой, который возвращает HTTP-статус 200. Сейчас я использую /robots.txt.Настройку можно изменить в:

https://console.cloud.google.com/compute/healthChecks

enter image description here

...