mirror of
https://github.com/zulip/zulip.git
synced 2025-10-23 04:52:12 +00:00
docs: Move generic reverse proxy notes further down.
This commit is contained in:
@@ -111,37 +111,6 @@ instead of HTTPS.
|
||||
|
||||
### nginx configuration
|
||||
|
||||
There are few things you need to be careful about when configuring a
|
||||
reverse proxy:
|
||||
|
||||
1. Configure your reverse proxy (or proxies) to correctly maintain the
|
||||
`X-Forwarded-For` HTTP header, which is supposed to contain the series
|
||||
of IP addresses the request was forwarded through. This
|
||||
[nginx code snippet][nginx-proxy-config] will do the right thing, and
|
||||
you can verify your work by looking at `/var/log/zulip/server.log` and
|
||||
checking it has the actual IP addresses of clients, not the IP address
|
||||
of the proxy server.
|
||||
|
||||
2. Ensure your proxy doesn't interfere with Zulip's use of long-polling
|
||||
for real-time push from the server to your users' browsers. This
|
||||
[nginx code snippet][nginx-proxy-longpolling-config] will do the right thing.
|
||||
|
||||
The key configuration options are, for the `/json/events` and
|
||||
`/api/1/events` endpoints:
|
||||
|
||||
* `proxy_read_timeout 1200;`. It's critical that this be
|
||||
significantly above 60s, but the precise value isn't important.
|
||||
* `proxy_buffering off`. If you don't do this, your `nginx` proxy may
|
||||
return occasional 502 errors to clients using Zulip's events API.
|
||||
|
||||
3. The other tricky failure mode with `nginx` reverse proxies is that
|
||||
they can load-balance between the IPv4 and IPv6 addresses for a given
|
||||
hostname. This can result in mysterious errors that can be quite
|
||||
difficult to debug. Be sure to declare your `upstreams` in a way that
|
||||
won't do load-balancing unexpectedly (e.g. pointing to a DNS name that
|
||||
you haven't configured with multiple IPs for your Zulip machine;
|
||||
sometimes this happens with IPv6 configuration).
|
||||
|
||||
You can look at our
|
||||
[nginx reverse proxy configuration][nginx-loadbalancer] to see an
|
||||
example of how to do this properly (the various include files are
|
||||
@@ -199,3 +168,37 @@ backend zulip
|
||||
Since this configuration uses the `http` mode, you will also need to
|
||||
[configure Zulip to allow HTTP](#configuring-zulip-to-allow-http) as
|
||||
described above.
|
||||
|
||||
### Other proxies
|
||||
|
||||
If you're using another reverse proxy implementation, there are few
|
||||
things you need to be careful about when configuring it:
|
||||
|
||||
1. Configure your reverse proxy (or proxies) to correctly maintain the
|
||||
`X-Forwarded-For` HTTP header, which is supposed to contain the series
|
||||
of IP addresses the request was forwarded through. You can verify
|
||||
your work by looking at `/var/log/zulip/server.log` and checking it
|
||||
has the actual IP addresses of clients, not the IP address of the
|
||||
proxy server.
|
||||
|
||||
2. Ensure your proxy doesn't interfere with Zulip's use of
|
||||
long-polling for real-time push from the server to your users'
|
||||
browsers. This [nginx code snippet][nginx-proxy-longpolling-config]
|
||||
does this.
|
||||
|
||||
The key configuration options are, for the `/json/events` and
|
||||
`/api/1/events` endpoints:
|
||||
|
||||
* `proxy_read_timeout 1200;`. It's critical that this be
|
||||
significantly above 60s, but the precise value isn't important.
|
||||
* `proxy_buffering off`. If you don't do this, your `nginx` proxy may
|
||||
return occasional 502 errors to clients using Zulip's events API.
|
||||
|
||||
3. The other tricky failure mode we've seen with `nginx` reverse
|
||||
proxies is that they can load-balance between the IPv4 and IPv6
|
||||
addresses for a given hostname. This can result in mysterious errors
|
||||
that can be quite difficult to debug. Be sure to declare your
|
||||
`upstreams` equivalent in a way that won't do load-balancing
|
||||
unexpectedly (e.g. pointing to a DNS name that you haven't configured
|
||||
with multiple IPs for your Zulip machine; sometimes this happens with
|
||||
IPv6 configuration).
|
||||
|
Reference in New Issue
Block a user