Nginx重写Zimbra的规则

我正在尝试为Zimbra编写一个重写规则,这将允许我使用主机名来访问Zimbra桌面Web UI,而不是IP地址和端口。

默认的Zimbraurl如下所示:

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://127.0.0.1:portreplacehttp://hostname ; 我卡住的地方是将?at=long-encrypted-user-id到URL中。 有人可以帮忙吗?

好的,所以如果将来有人需要这个,我只需要添加一个if和rewrite:

 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重写。