反向代理:nginx接受来自客户端(浏览器)的请求,并将其转发给后端服务器进行处理
修改host文件(C:\windows\system32\drivers\etc ),添加虚拟机地址,如下
192.168.56.10 mall.com
这样,访问mall.com[:80]就等同于访问192.168.56.10[:80]
虚拟机中的80端口是Nginx,所以上面两个url会访问到虚拟机的Nginx
同理,访问mall.com:9200(9200是ElasticSearch)会访问到虚拟机的ES
浏览器发送gulimall.com请求来到虚拟机的Nginx,Nginx再负载均衡给网关,网关再负载均衡给服务
不经过网关,由Nginx直接转到指定服务:
步骤:
-
使用SwitchHosts修改host文件,使得访问域名(如gulimall.com)时访问到虚拟机的Nginx
-
Nginx作为反向代理,即 将来自gulimall.com的请求转给某个服务
修改Nginx配置文件的server块,改完重启Nginx
下列是由Nginx直接转到windows(192.1668.56.1)的端口为10000的微服务的nginx的配置
server {
listen 80;
server_name gulimall.com;
.
.
.
location / {
proxy_pass http://192.168.56.1:10000;
}
}
解释:
在windows里指定了mall.com映射的是虚拟机ip,所以访问mall.com会来到虚拟机,虚拟机的Nginx监听了80端口,Nginx又将请求(mall.com)代理到windows(192.168.56.1)的10000端口,绕一圈又回到windows
缺点:
假设10000端口为商品服务,如果有多个商品微服务,且各个微服务的ip各不相同,xxxxxxxxx
由Nginx负载均衡到网关,再由网关转发到服务:
配置可以参考Using nginx as HTTP load balancer
- 修改http块、server块,重启Nginx
/mydata/nginx/conf/nginx.conf
http {
upstream gulimall {
server 192.168.56.1:88
}
}
/mydata/nginx/conf/conf.d/mall.conf
server {
location / {
proxy_set_header Host $host;
proxy_pass http://gulimall;
}
}
//Nginx代理给网关的时候会丢失请求的host信息
- 网关处配置路由规则,重启网关
- id: gulimall_host_route
uri: lb://gulimall-product
predicates:
- Host=**.gulimall.com,gulimall.com
我对ngixn流程的理解:
- nginx处没新建任何配置文件的情况下,默认是conf.d/default.conf文件,这个配置文件里写的是nginx监听来自127.0.0.1的80端口的请求,如果本机(Linux)访问80端口那肯定被nginx监听了,如果windows配置了host文件,比如
192.168.56.10 mall.conf
,那么也是会被nginx监听到,默认是访问html下的index.html - 如果nginx处新建了配置文件,假设配置了监听哪个域名,实际上是对