提示:nginx根据头信息转发到不同的服务
前言
如果服务器只能暴露一个端口,但是有两个或多个http网页需要代理怎么办呢?
通过在本地部署一台nginx设置头信息,然后代理到目标服务器的nginx,目标服务器根据头信息的不同,代理到不同的服务,就可以实现,暴露一个端口的情况下,代理到多个服务。
tcp协议的不支持这样设置。我之前研究了很久,没找到方法。
nginx参考文档https://nginx.org/en/docs/
一、调用流程
二、配置说明
1.本地nginx配置
在本地nginx中设置头信息。
server { server {
listen 1999;
server_name 127.0.0.1;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
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_set_header server_source_name 'server1';
proxy_pass http://198.168.31.45:1699;
}
}
server {
listen 2999;
server_name 127.0.0.1;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
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_set_header server_source_name 'server2';
proxy_pass http://198.168.31.45:1699;
}
}
2.测试或生产nginx配置
根据不同nginx头信息代理到不同的服务
#------根据代理头转发-------start--
server {
listen 1699;
#charset koi8-r;
#access_log logs/host.access.log main;
#需要这个配置说明
underscores_in_headers on;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
if ($http_server_source_name = "server1"){
proxy_pass http://server1:8000;
break;
}
if ($http_server_source_name = "server2"){
proxy_pass http://server2:8001;
break;
}
#头信息都不符合时调用的默认地址
proxy_pass http://server:8002;
}
}
#------根据代理头转发-------end--
总结
通过配置本地的nginx和测试或生产的nginx就可以将多个网页通过一个端口暴露出来,可以来应对公司中端口不好申请的情况。