как я заставляю nginx передавать HTTP, который переписывают запросы POST через?

Если AT&T действительно использует uceprotect.net, затем идут путем, на который намекает Scott Lundberg.

В противном случае затем свяжитесь с поддержкой AT&T и посмотрите, какова определенная причина. У них должен быть процесс, до которого можно пойти, удалили хост из блока или по крайней мере процесса для применения, чтобы удалить его.

19
задан 19 October 2016 в 17:12
2 ответа

Вместо этого попробуйте использовать поддержку обратного прокси . Пример раздела location :

location / {
  proxy_pass      http://localhost:8080;
  proxy_redirect  http://localhost:8080/ /;
  proxy_read_timeout 60s;

  # May not need or want to set Host. Should default to the above hostname.
  proxy_set_header          Host            $host;
  proxy_set_header          X-Real-IP       $remote_addr;
  proxy_set_header          X-Forwarded-For $proxy_add_x_forwarded_for;
}

В этом примере все запросы к этому блоку server будут передаваться второму серверу, работающему на localhost: 8080 . Это сохраняет POST и также должно сохранять другие типы запросов, если это когда-либо станет проблемой.

Проблема в том, что внешние перенаправления никогда не будут повторно отправлять POST ] данные. Это записано в спецификацию HTTP (см. Раздел 3xx). Любой клиент, который делает это, нарушает спецификацию.

Если код состояния 301/302 получен в ответ на запрос, отличный от GET или HEAD, пользовательский агент НЕ ДОЛЖЕН автоматически перенаправлять запрос, если он не может быть подтвержден пользователь поскольку это может изменить условия, при которых был выдан запрос.

Я почти уверен, что большинство браузеров реализуют это, просто заставляя перенаправленный запрос быть запросом GET . Теоретически спецификация допускает наличие браузера, который будет спрашивать пользователя, перенаправлять ли данные POST , но я не знаю, что в настоящее время делает.

31
ответ дан 2 December 2019 в 20:17

Вы также можете добиться этого в Nginx, но используя плагин mirror , не перезаписывайте :

location "/post/uri/to/redirect/" {                                        
    mirror "/mirror";                                                       
    mirror_request_body on;                                                 
    return 200;                                                             
}                                                                           

location = "/mirror" {                                                      
    internal;                                                               
    proxy_pass "https://target_domain$request_uri";                   
    proxy_set_header Host "target_domain";                            
    proxy_set_header X-Original-URI $request_uri;                           
    proxy_set_header X-SERVER-PORT $server_port;                            
    proxy_set_header X-SERVER-ADDR $server_addr;                            
    proxy_set_header X-REAL-IP $remote_addr;                                
}                                                                           
0
ответ дан 17 April 2020 в 17:35

Теги

Похожие вопросы