Назад | Перейти на главную страницу

nginx proxy_pass перезапись местоположения заголовка ответа

Цель этого экземпляра nginx - заставить GitLab и OpenWRT Luci перенаправить через обратный прокси. Он уже работает для нескольких других веб-сайтов, каждый из которых имеет базовый URL-адрес, который, похоже, решает эту проблему.

Соответствующая конфигурация nginx для примера местоположения:

location /gitlab/ {
    proxy_pass http://127.0.0.1:9000/;
    proxy_redirect default;
}

К этому расположению применяются некоторые параметры конфигурации прокси-сервера заголовка.

# Timeout if the real server is dead
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;

# Basic Proxy Config
proxy_set_header    Host $host:$server_port;
proxy_set_header    Origin $scheme://$host:$server_port;    
proxy_set_header    Connection $http_connection;
proxy_set_header    Cookie $http_cookie;
proxy_set_header    Upgrade $http_upgrade;
proxy_set_header    X-Forwarded-Protocol $scheme;
proxy_set_header    X-Scheme $scheme;
proxy_set_header    X-Real-IP $remote_addr;
proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header    X-Forwarded-Ssl on;
proxy_set_header    X-Frame-Options SAMEORIGIN;

# Advanced Proxy Config
send_timeout            5m;
proxy_read_timeout      300;
proxy_send_timeout      300;
proxy_connect_timeout   300;

proxy_buffers 32 4k;
proxy_buffer_size           4k;
proxy_busy_buffers_size     64k;
proxy_temp_file_write_size  64k;

proxy_http_version 1.1;
proxy_cache_bypass $cookie_session;
proxy_no_cache $cookie_session;]

При просмотре https://website.com:8080/gitlab/;

GET /gitlab/ HTTP/1.1
Host: website.com:8080

Ответ неверно возвращается к /users/sign_in вместо того /gitlab/users/sign_in

HTTP/1.1 302 Found
Cache-Control: no-cache
Connection: keep-alive
Content-Type: text/html; charset=utf-8
Location: https://website.com:8080/users/sign_in

Просмотр вручную в https: // сайт: 8080 / gitlab / users / sign_in загружает страницу, но не загружает ресурсы, поскольку они падают до той же проблемы, что и выше.

Чтение документы nginx, это предполагает, что поведение прокси по умолчанию должно обрабатывать этот сценарий, хотя, похоже, он не работает.

Журналы, кажется, мало что показывают.

Какие дополнительные шаги следует предпринять, чтобы помочь диагностировать, почему это может происходить?

Добавьте косую черту в конце вашего proxy_pass цель.

Обновить : OP не уточнил, что vhost принимал https. Поскольку схема пересылается на внутренний сервер с дополнительными заголовками, возникает проблема, поскольку proxy_redirect default; приказывает nginx ожидать схема http по умолчанию при переписывании Location заголовки в ответах восходящего потока вместо https.

Итак, это пришлось явно изменить на более общую форму (завершающая косая черта все еще необходима):

location /gitlab/ {
    proxy_pass http://127.0.0.1:9000/;
    proxy_redirect $scheme://$host:$server_port/ /gitlab/;
}

То, что говорит @XavierLucas, правильно, поддерживаемые должны обрабатывать ссылки. В документации gitlab есть руководство под заголовком Установите GitLab по относительному URL. Недавно я столкнулся с этой проблемой при настройке сервера Arch Linux с установленными gitlab и nginx, и это решило мою проблему, перекомпилировав все активы, чтобы иметь правильный относительный путь.