最近项目中由于不使用网关,服务发现,要实现部署时,通过Nginx 代理多个server(包括同一server不同的实例),
比如我现在有userserver和oderserver两个服务,现在实现,通过同一域名访问两个server的功能,摸索了半天,记录下实现过程。
PS:两个server的路由分组都是以server名作为开始
分别实现下面两个接口:
/userserver/user/login
/orderserver/order/create
172.16.6.71为我本地ip
userserver端口为:18001
oderserver端口为:18002
域名设置为:www.tutor.com
nginx.conf配置如下:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
#这里是新增的配置
upstream user_server{
server 172.16.6.71:18001;
}
upstream order_server{
server 172.16.6.71:18002;
}
server {
listen 80; #监听端口
server_name www.tutor.com;
location /userserver/{
proxy_pass http://user_server;
}
location /orderserver/{
proxy_pass http://order_server;
}
}
include /etc/nginx/conf.d/*.conf;
}
说明:
下面的内容是路由到各server的配置
upstream user_server{
server 172.16.6.71:18001;
}
upstream order_server{
server 172.16.6.71:18002;
}
如果你的同一个server在同一台机器要部署多个,可以修改为如下,也可以按需求进行加权或iphash配置,我这里使用ip轮询的方式;在不同机器部署的将ip修改一下就可以了
:
upstream user_server{
server 172.16.6.71:18001;
server 172.16.6.71:18003;
}
upstream order_server{
server 172.16.6.71:18002;
server 172.16.6.71:18004;
}
server_name www.tutor.com;
这个是统一的域名配置
下面的内容是使用根据server的url路由的配置,这里要求userserver的接口要以/userserver开头,否则无法匹配到,orderserver也同样如此。
location /userserver/{
proxy_pass http://user_server;
}
location /orderserver/{
proxy_pass http://order_server;
}
现在Nginx的配置就设置完了,设置电脑的hosts,增加172.16.6.71 www.tutor.com
。
打开postman通过如下接口请求即可,亲测通过。
http://www.tutor.com/userserver/user/login
http://www.tutor.com/orderserver/order/create