Решал на днях задачу перенаправления запросов с одного домена на другой. В целом понятно, что это не сложно сделать с помощью nginx и его возможности proxy_pass. У меня есть подробная статья на эту тему. Но лично мне на практике никогда не приходилось именно с домена на домен перенаправления делать.
Простым и очевидным способом, описанным в статье, ничего не получилось. Перенаправленные ресурсы отдавали ошибку 404. Сходу не понял, почему так. Всё перепроверил - пути, права и т.д. Но ничего не помогло. Откуда, думаю, тут 404 берётся? Посидел, немного подумал и понял, в чём проблема.
После перенаправления запрос с первого домена уходит на второй с заголовками в запросе от первого домена. А второй про него ничего не знает, так как он настроен на другой домен. При переадресации запроса надо поменять в заголовке старый домен на новый. В итоге рабочий (упрощённый) вариант конфига получился такой:
server { listen 80; server_name server1.ru; access_log /var/log/nginx/server1.ru-access.log; error_log /var/log/nginx/server1.ru-error.log;location /dir_redir { proxy_pass http://10.20.50.3/dir_redir; proxy_set_header Host server2.ru; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; }
То есть в директиве:
proxy_set_header Host server2.ru;
Ставим в заголовок второй домен server2.ru. В данном случае запросы уходят на другой сервер 10.20.50.3, который домен server1.ru вообще не знает.
#nginx