Обратный прокси-сервер Nginx не работает, если местоположение не `/` с pypiserver

Я пытаюсь получить пользовательский сервер PyPI, работающий с использованием pypiserver.

Я пытался изменить пример nginx.conf файл в README для использования /mylocation вместо / и закончил со следующим:

server {
    server_name mypi.com;
    listen 443 ssl;
    ssl_certificate /cert/path;
    ssl_certificate_key /key/path;
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    location /mylocation {
        auth_basic            "Howdy!";
        auth_basic_user_file  /path/to/pwd;

        proxy_set_header    Host $host:$server_port;
        proxy_set_header    X-Forwarded-Proto $scheme;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_pass        127.0.0.1:8080/;
    }
}

Если я подключусь напрямую (через браузер) к http://mypi.com:8080страница приветствия по умолчанию pypiserver всплывает. Если я попытаюсь вместо этого подключиться к https://mypi.com/mylocation это перенаправляет меня на https://mypi.com/simple/ и бросает 404 ошибка. Я думал, что сочетание location + proxy_pass был в основном способ сказать "Подключение к mypi.com/mylocation такой же как mypi.com:8080/". Я понял это неправильно? Или проблема связана с pypiserver сам?

Если это поможет, я на Raspberry Pi со следующими версиями программ:

  • nginx: 1.12.2
  • pypiserver: 1.2.1
  • питон: 3.6.5

1 ответ

Решение

Блок местоположения с proxy_pass просто проходит по пути без изменений, если вы rewrite Это.

Для вашего случая добавьте следующее правило переписывания после proxy_pass заявление.

rewrite ^/mylocation/?(.*)$ /$1 break;

Другие вопросы по тегам