如果位置不是 pypiserver 的“/”,则 Nginx 反向代理失败

Nginx reverse proxy fails if location is not `/` with pypiserver

我正在尝试使用 pypiserver.

获取自定义 PyPI 服务器 运行

我试图修改 README 中的示例 nginx.conf 文件以使用 /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 的组合基本上是 "Connecting to mypi.com/mylocation is the same as mypi.com:8080/" 的一种表达方式。我弄错了吗?还是问题与 pypiserver 本身有关?

如果有帮助,我正在 Raspberry Pi 使用以下程序版本:

具有 proxy_pass 的位置块只是通过路径不变,除非你 rewrite 它。

对于您的情况,在 proxy_pass 语句后添加以下重写规则。

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