Обложка канала

ServerAdmin.ru

12437 @srv_admin

Авторская информация о системном администрировании.

ServerAdmin.ru

4 года назад
Открыть в
​​Решал на днях задачу перенаправления запросов с одного домена на другой. В целом понятно, что это не сложно сделать с помощью 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