Nginx&Apache2: Ако / е забравен, apache пренасочва към своя локален порт

Имам настройка на уеб сървър на Apache зад обратен прокси Nginx, работещ с SSL и поддомейни.

Работи добре за почти всичко, с изключение на това, че ако забравя последното / в края на url адреса (напр. https://vps.com/url няма / в края), Apache ме пренасочва към своя локален порт (Apache слуша само 127.0 .0.1, порт 4000 и ако забравя /, той ме пренасочва към https://vps.com:4000/url/, което очевидно не работи).

Това е моята конфигурация на nginx:

server {

    listen 443 ssl;

    // SSL Certificate location & such

    access_log /var/log/nginx/apache-ssl-access.log;
    error_log  /var/log/nginx/apache-ssl-error.log;

    server_name <my remote url>;

    location ~ {
            proxy_set_header                X-Real-IP               $remote_addr;
            proxy_set_header                X-Forwarded-For $remote_addr;
            proxy_set_header                Host                    $host;
            proxy_pass              http://127.0.0.1:4000;
    }

    location ~ /\.ht {
            deny all;
    }
}

и това е конфигурационният файл на apache, който обработва услугата:

<VirtualHost 127.0.0.1:4000>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    LogLevel warn ssl:warn

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Сървърът ми е настроен на машина Debian8, работеща със следните версии:

  • Apache/2.4.10
  • nginx/1.10.2

Не знам какво е пренасочване или как мога да предотвратя това, някаква идея?


person Artemis    schedule 23.11.2016    source източник
comment
И въпросът е?   -  person Erwin Smout    schedule 23.11.2016
comment
Опитайте да замените proxy_pass http://127.0.0.1:4000; с proxy_pass http://vps.artemix.xyz:4000/;?   -  person Dusan Bajic    schedule 23.11.2016


Отговори (1)


Изглежда, че Apache издава отговор 3xx, за да добави наклонена черта в края към URI, завършващ с име на директория.

Непряко решение би било да се използва директивата proxy_redirect в nginx за преобразуване на пренасочването от вътрешен адрес към външен адрес.

Просто променяте своя location блок на префиксно местоположение (вижте този документ) и добавянето на / към вашия оператор proxy_pass може да работи, тъй като действието по подразбиране може да е достатъчно за отстраняване на проблема:

location / {
    ...
    proxy_pass              http://127.0.0.1:4000/;
}

Ако се изисква по-специфично решение, към блока location могат да се добавят множество proxy_redirect изрази.

За да намерите точното съпоставяне, от което се нуждаете, трябва да използвате curl (или подходящи инструменти на браузъра), за да анализирате заглавката Location в HTTP 3xx отговора, който задава URL на вътрешен адрес.

Вижте този документ за повече.

person Richard Smith    schedule 23.11.2016
comment
Промених моя location ~ на location / и добавих / в края на реда за прокси пропуск (преди ;). Когато се опитам да осъществя достъп, той прави същото и заглавката на местоположението е http://vps.artemix.xyz:4000/class/ при опит за достъп https://vps.artemix.xyz/class. - person Artemis; 23.11.2016
comment
Опитайте да добавите: proxy_redirect http://vps.artemix.xyz:4000/ https://vps.artemix.xyz/; към блока location. - person Richard Smith; 23.11.2016
comment
Добавен proxy_redirect http://vps.artemix.xyz:4000/ https://vps.artemix.xyz/; proxy_pass http://127.0.0.1:4000/; в местоположението на nginx /. Все още го прави. (в момента активен) - person Artemis; 23.11.2016
comment
И рестартирахте nginx? - person Richard Smith; 23.11.2016
comment
да, systemctl restart nginx всеки път - person Artemis; 23.11.2016
comment
Използвайте nginx -T, за да проверите конфигурационния си файл и да се уверите, че nginx чете правилния файл - в противен случай не мога да обясня защо вашата директива за пренасочване се игнорира. - person Richard Smith; 23.11.2016
comment
Той чете всички конфигурационни файлове по подразбиране (те не съдържат нищо, което е в конфликт) и конфигурационния файл, даден в темата за запитване. Изглежда наистина игнорира пренасочването. - person Artemis; 23.11.2016