Обратный прокси-сервер Nginx не работает должным образом

У меня есть два домена на разных серверах nginx(1.15.0) (server1 example.com и server2 example.net >). Я попытался настроить server2 в качестве обратного прокси-сервера с помощью ngx_http_substitutions_filter_module, но он не работает должным образом. Из-за моей конфигурации директива subs_filter должна заменить example.com на example.net, но когда я набираю example.net в браузере меня перенаправляет на example.com.

nginx.conf

http {
 //other settings

 .....

 include /etc/nginx/sites-enabled/*;

 upstream example.com {
   server example.com;
 }

}

example.net.conf

server {
 listen 80;
 server_name example.net www.example.net;
 rewrite ^/(.*)$ https://example.net/$1 permanent;
}

server {
  listen 443 ssl; 
  server_name example.net;

  ssl_certificate /etc/letsencrypt/live/example.net/fullchain.pem; 
  ssl_certificate_key /etc/letsencrypt/live/example.net/privkey.pem; 
  include /etc/letsencrypt/options-ssl-nginx.conf;
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

  location / {
    root html;
    try_files $uri @example.com;
  }

  location @example.com {
    include replace.conf;
    proxy_pass http://example.com;

    proxy_cookie_domain example.com example.net;

    proxy_set_header Accept-Encoding "";
    proxy_set_header Host example.com;
    proxy_redirect http://example.com http://example.net;

  }
}

replace.conf

# replace direct links
subs_filter "www.example.com" "example.net" gi;
subs_filter "example.com" "example.net" gi;

Похоже, nginx игнорирует директиву subs_filter. Может ли кто-нибудь объяснить мне, как правильно заменить uri, используя ngx_http_substitutions_filter_module? Спасибо за совет!


person local    schedule 22.06.2018    source источник
comment
Какой тип пантомимы возвращается в ответ?   -  person Shawn C.    schedule 22.06.2018
comment
заголовки ответов возвращают text/html   -  person local    schedule 22.06.2018


Ответы (1)


Задача решена. Прежде всего, я удалил апстрим из nginx.conf:

upstream example.com {
  server example.com;
}

Затем я изменил следующие строки в example.net.conf:

  location / {
   ...
   try_files $uri @static;
  }

  location @static {
   ...
   proxy_pass https://example.com;

   ...

   ...
   ...
   proxy_redirect https://example.com https://example.net;
 }

Все работает нормально, кроме формы входа. Firefox работает правильно, но Chrome возвращает ошибку 422. Я полагаю, это потому, что форма входа работает на javascript. В любом случае спасибо всем!

person local    schedule 22.06.2018