Обратный прокси Nginx к Apache с директивой DirectorySlash - PullRequest
0 голосов
/ 24 января 2019

Мне нужно перевернуть прокси на Apache сервере, работающем на локальном хосте.Проблема в том, что Apache перенаправляет запросы в каталоги без конечной косой черты, в каталог с конечной косой чертой, как часть своей директивы DirectoryRewrite.Приведенная ниже настройка nginx работает нормально, когда вы переходите на https://myhost/sw/myapp/, но если вы забудете завершающий слеш, вы в конечном итоге будете перенаправлены на http://myhost:8080/sw/myapp. Если не отключить директиву Apache DirectoryRewrite, что я могу сделать, чтобы сделатьуверены, что / всегда добавляется в конец любого запроса, чтобы Apache не перенаправлял?

server {
    client_max_body_size 10240M;
    listen      443 ssl;
    server_name  "";

    ssl_certificate      ../ssl/server.crt;
    ssl_certificate_key  ../ssl/server.key;

    ssl_session_timeout  5m;

    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

    location /sw {
        proxy_pass  http://127.0.0.1:8080/sw;
        proxy_redirect ~^http://127.0.0.1:8080/sw/([^.]*[^/])$ https://$host/sw/$1/;
        proxy_redirect http://127.0.0.1:8080/ https://$host/;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_buffering off;
        proxy_set_header        HOST            $host;
        proxy_set_header        Referer         $http_referer;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        error_page 301 302 303 = @handle_redirect;
    }

1 Ответ

0 голосов
/ 24 января 2019

Если вышестоящий сервер перенаправляет на http://example.com:8080/ (вместо http://127.0.0.1:8080/), вам нужно изменить или добавить другой оператор proxy_redirect.Подробнее см. в этом документе .

Например:

proxy_redirect http://example.com:8080/ https://example.com/;

Или, как вы указали в комментариях:

proxy_redirect http://$host:8080/ https://$host/;

proxy_redirectзначения должны точно соответствовать началу заголовка Location: в ответе 3xx.Вы можете использовать curl -I для точного определения содержимого заголовка ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...