Назад | Перейти на главную страницу

Правило перезаписи Nginx для Zimbra

Я пытаюсь написать правило перезаписи для Zimbra, которое позволит мне использовать имя хоста для доступа к веб-интерфейсу Zimbra Desktop вместо IP-адреса и порта.

URL-адреса Zimbra по умолчанию выглядят следующим образом:

http://127.0.0.1:port/?at=long-encrypted-user-id
http://127.0.0.1:port/zimbra/?at=long-encrypted-user-id
http://127.0.0.1:port/desktop/login.jsp?at=long-encrypted-user-id

Вот что у меня есть до сих пор:

server {
    server_name hostname;
    location / {
            proxy_redirect                   off;
            proxy_set_header Host            $host;
            proxy_set_header X-Real-IP       $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass                       http://127.0.0.1:port/;
    }
}

Это только заменяет http://hostname по http://127.0.0.1:port на заднем фоне; Где я застрял, добавляю ?at=long-encrypted-user-id к URL-адресам. Кто-нибудь может помочь?

Итак, если кому-то это понадобится в будущем, мне просто нужно было добавить if и переписать:

if ($args !~* at=long\-encrypted\-user\-id) {
    rewrite ^/(.*)$ /$1?at=long-encrypted-user-id last;
}

и последний серверный блок становится

server {
    server_name hostname;
    location / {
        proxy_redirect                   off;
        proxy_set_header Host            $host;
        proxy_set_header X-Real-IP       $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass                       http://127.0.0.1:port/;
        if ($args !~* at=long\-encrypted\-user\-id) {
            rewrite ^/(.*)$ /$1?at=long-encrypted-user-id last;
        }
    }
}

Nginx предостерегает от использования if(IfIsEvil), но не если вы добавите last переписать.