Nginx反向代理多个域名

文章目录

  1. 1. 简介
  2. 2. Nginx配置
  3. 3. 测试生效

简介

由于公司内网有多台服务器的http服务要映射到公司外网静态IP,如果用路由的端口映射来做,就只能一台内网服务器的80端口映射到外网80端口,其他服务器的80端口只能映射到外网的非80端口。非80端口的映射在访问的时候要域名加上端口,比较麻烦。所以我们可以在内网搭建个nginx反向代理服务器,将nginx反向代理服务器的80映射到外网IP的80,这样指向到公司外网IP的域名的HTTP请求就会发送到nginx反向代理服务器,利用nginx反向代理将不同域名的请求转发给内网不同机器的端口,就起到了“根据域名自动转发到相应服务器的特定端口”的效果,而路由器的端口映射做到的只是“根据不同端口自动转发到相应服务器的特定端口”,真是喜大普奔啊。

Nginx配置

vim /usr/local/nginx/conf/reverse-proxy.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
server {
listen 80;
server_name tomcat1.vip.com;
location /{
proxy_redirect off;
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_pass http://127.0.0.1:8081;
#proxy_pass http://tomcat;
}
access_log logs/tomcat1_access.log;
}

server {
listen 80;
server_name tomcat2.vip.com;
location /{
proxy_redirect off;
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_pass http://127.0.0.1:8082;
#proxy_pass http://tomcat;
}
access_log logs/tomcat2_access.log;
}

在nginx.conf的http节点中include配置文件reverse-proxy.conf

1
2
3
4
5
6
7
8
9
10
11
12
http {
include reverse-proxy.conf;

#按server段顺序匹配,如果没有匹配到则可通过泛域名匹配返回错误码或错误页
server {
listen 80;
server_name *.vip.com;
location /{
return 404;
}
}
}

测试生效

热部署nginx配置

1
2
3
[root@localhost ~]# /usr/local/nginx/sbin/nginx -t; /usr/local/nginx/sbin/nginx -s reload;
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

在客户机的hosts中配置tomcat1.vip.com和tomcat2.vip.com (如果是已申请好的域名,则可跳过此步骤)

1
2
10.28.10.218 tomcat1.vip.com
10.28.10.218 tomcat2.vip.com

从以上访问结果来看,浏览器的请求会分别引导到了tomcat1和tomcat2上。


观点仅代表自己,期待你的留言。