set port range for nginx

Constantine A. Murenin mureninc at gmail.com
Fri Feb 8 17:39:13 UTC 2013


On 8 February 2013 02:05, Maxim Dounin <mdounin at mdounin.ru> wrote:
> Hello!
>
> On Fri, Feb 08, 2013 at 11:20:35AM +0800, Fufeng Yao wrote:
>
>> Hi, all
>> I've got an nginx server in an internal network, and the server will
>> forward request to outer net using proxy_pass,
>> it seems like:
>> proxy_pass http://[public ip]:[port]
>> Unfortunately, the firewall block most of the port, so the proxy_pass
>> failed.
>> I have two questions:
>> How the proxy_pass use port to forward the request? pick a random port?
>
> Outoing port (as well as IP address, unless proxy_bind is used) is
> selected by your OS.  Use your system configuration options to
> tune port range used.
>
> E.g. on FreeBSD it can be done with net.inet.ip.portrange.first
> and net.inet.ip.portrange.last sysctl's.  On Linux it's tuned with
> net.ipv4.ip_local_port_range sysctl or
> /proc/sys/net/ipv4/ip_local_port_range.
>
>> Would that be possible to set a port range (10000~20000 e.g) for proxy_pass
>> to use?
>
> In theory, nginx can use bind() syscall to select some particular
> port, but only one of them, and this doesn't make sense with
> proxy_pass - as this will not allow more than one connection to
> the same destination address.  That is, tuning the OS as suggested
> above is the only way to go.

Or, alternatively, a local firewall with port translation can be used
to ensure that all outgoing ports that are used would be the ones that
would pass the upstream firewall.

See http://www.openbsd.org/faq/pf/rdr.html for some details, which has
a couple of examples of port redirection/translation within the
firewall.

C.



More information about the nginx mailing list