我正在尝试为 Zimbra 编写一条重写规则,这将允许我使用主机名而不是 IP 地址和端口来访问 Zimbra 桌面 Web UI。
默认的 Zimbra URL 如下:
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 中。有人能帮忙吗?
答案1
好的,如果将来有人需要这个,我只需要添加一个 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
(假如邪恶),但如果您添加last
重写则不行。