我正在尝试为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:port
replacehttp://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
重写。