nginx – 基于url将流量重定向到不同的ip地址维护端口和url信息

参见英文答案 > nginx: no permission to bind port 8090 but it binds to 80 and 8080                                    1个
我们有一个QA版本,一个UAT版本和一个DEV版本的webapp.用户需要通过http://uat.company.com:41002/webapp,http://qa.company.com:41002/webapp和http://dev.company.com:41002/webapp访问这些内容.端口41001上还有一个不同的webapp,也需要访问端口8080.

这些网址必须在公司外部提供,我们只能访问一个公共IP地址.因为这样的DNS记录需要所有3个地址指向一个IP.在该单个IP地址上,服务器驻留在运行Nginx.在后台我需要每个网址指向不同的服务器

http://uat.company.com --> 123.123.123.1
http://qa.company.com  --> 123.123.123.2
http://dev.company.com --> 123.123.123.3

我担心我不知道正确的术语,但是URI和端口的其余部分也必须转移到ip地址.即如果有人访问

http://uat.company.com:41002/webapp/somepage`

它看起来好像是他们访问过的页面,但实际上他们会看到

http://123.123.123.1:41002/webapp/somepage

或者如果他们访问过

http://qa.company.com:8080/static/home.html

他们真的会看

http://123.123.123.2:8080/static/home.html

但他们的浏览器仍然会说http://qa.company.com:8080/static/home.html

我试过了

server {

    server_name uat.company.com;

    listen 41001;
    listen 41002;
    listen 8080;

    location / {
            proxy_pass http://123.123.123.1:$server_port$uri;
            proxy_set_header Host $host;
    }

}

然而,这给了我一个糟糕的网关502页面与日志:2015/01/28 16:04:49 [暴击] 30571#0:* 1连接()到123.123.123.1:41002失败(13:权限被拒绝)连接到上游,客户端:172.23.128.245,服务器:uat.company.com,请求:“GET / webapp / HTTP / 1.1”,上游:“http://123.123.123.1:41002/webapp/”,主持人:“uat. company.com:41002\”

我希望这更清楚.

更新
从Xaviers建议SELinux可能会受到阻碍,我已经禁用了它,我确实进一步发展.现在使用上面的Nginx配置似乎连接到第二台服务器:但是端口仍未通过.我在打电话

uat.company.com:41002/webapp/

如果直接调用服务,则会重定向

uat.company.com:41002/webapp/spring/config/main

然而,通过代理发生的事情是它正在返回或结束

uat.company.com/webapp/spring/config/main

因此无法加载页面

最佳答案
我已经确定了我的设置存在的问题.

1)SELinux阻止我连接上游.我现在已禁用此功能,并会考虑稍后进行正确设置

2)proxy_pass正在按预期工作,但我需要的args是http://123.123.123.1:$server_port/$uri$is_args$args;

3)proxy_set_header Host $host正确地将主机名设置回我想要的,但它吃了端口号.我需要的正确格式是proxy_set_header Host $host:$server_port

可能有更简洁的解决方案,我还没有完整的工作解决方案,因为我已经切断它以使其工作,但我的配置的工作部分是:

server {
    listen 41002;
    server_name uat.comapny.com;

    location /webapp {
        proxy_pass http://123.123.123.1:41002/$uri$is_args$args;
        proxy_set_header Host $host:$server_port;
    }
}

一旦我充实了它,我会发布一个更通用的版本.非常感谢所有帮助过的人.

相关文章

一、Linux下Nginx的安装 1.去官网 http://nginx.org/download/下载对应的Nginx安装包,推荐使...
一、空格:默认匹配、普通匹配 location / { root /home; } 二、= :精确匹配(表示匹配到 /home/resou...
``` nginx -c 配置文件路径 ``` ``` /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.con...
前言 nginx可所谓是如今最好用的软件级别的负载均衡了。通过nginx的高性能,并发能力强,占用内存下的特...
1.ngnix概念 Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄...
博客园从今天上午就开始报502错误 , 他的原因还不知道 , 暂时先说下我们遇到502的排查情况 最大的可能性...