Я пытаюсь написать правило перезаписи для 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
переписать.