如何在nginx中动态分配端口?

时间:2014-04-29 22:18:02

标签: nginx

我希望http://example.com/test/4000(或其他一些号码)将proxy_pass传递给http://localhost:4000/test

这可能,我该怎么做?

1 个答案:

答案 0 :(得分:0)

以下是示例:

server {
    listen 80;
    server_name example.com;

    # default port for proxy
    set $port 80;

    # redirect /4000 --> /4000/ just to be sure
    # that next rewrite works properly
    rewrite ^(/\d+)$ $1/ redirect;

    # rewrite /4000/path/to/file to /path/to/file
    # and store port number to variable
    rewrite ^/(?<port>\d+)(.+)$ $2;

    location / {
        # proxy request to localhost:$port
        proxy_pass http://localhost:$port;
    }
}

它代理/PORT_NUMBER/path/to/filelocalhost:PORT_NUMBER/path/to/file的请求。如果网址未以端口号开头,则会回退到80,因此/path/to/file的请求将代理到localhost:80/path/to/file

没有检查端口号是否有效,因此不建议将其用于生产。但无论如何,在生产中使用可变端口号确实是个坏主意。