squirrelmail/我需要从用户看到的路径中删除部分。

我的.conf

location / {
    rewrite /squirrelmail/(.*) /$1 last;
    proxy_pass https://internal.domain.tld:8081/squirrelmail/;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host:$server_port;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Real-IP $remote_addr;
}

我希望我的应用程序可供根路径下的用户使用/,而不是不断添加squirrelmail/到最终用户路径。

因此,当用户正确访问https://mail.domain.tld它时,代理会传递实际位于的应用程序,https://internal.domain.tld:8081/squirrelmail/而无需添加squirrelmail/到用户路径(例如https://mail.domain.tld/squirrelmail/

更新:

如果不重写,用户进入后,应用程序会将部分内容https://mail.domain.tld添加squirrelmail/到以下请求中(例如导航到另一个选项卡、打开邮件等),因此对于用户来说现在看起来像,https://mail.domain.tld/squirrelmail/?some=params但对于应用程序来说现在却https://internal.domain.tld:8081/squirrelmail/squirrelmail/?some=params导致这种情况HTTP 404

6

  • 您需要检查 Squirrelmail 设置来设置应用程序的根路径。


    – 

  • @TeroKilkanen 实际上不是 Squirrelmail,而是 Roundcube,应用程序本身不负责添加squirrelmail/路径,它托管在处理此应用程序的另一个 nginx 上internal.domain.tld:8081/squirrelmail,它还包含其他程序(例如 phpmyadmin 等),因此每个程序都位于其自己的路径中(例如/squirrelmail/phpmyadmin等)。所以我不能只将此应用程序分配给根路径。我需要正确地将 roundcube 应用程序从 proxy_passinternal.domain.tld:8081/squirrelmailmail.domain.tld


    – 

  • 1
    您可以internal.example.com:8001/squirrelmail在内部将其作为路径。但在 Roundcube 设置中,您需要将根 URL 设置为mail.example.com。然后 Roundcube 将为用户生成适当的 URL。


    – 

  • @TeroKilkanen 正如我上面提到的,roundcube 与添加路径无关squirrelmail/,它甚至没有设置基本路径的设置。


    – 

  • 它甚至没有设置基本路径– 这是什么您可以尝试将其添加proxy_set_header X-Forwarded-Path '/';到您的 nginx 配置中吗?


    – 

0