反向代理配置

再nginx上,把gulimall.com这个域名,配置给我们的地址.

这里使用SwitchHosts这个软件(要使用管理员身份打开),新建配置规则,
比如,我的es在云服务器上,把云服务器的ip地址配置域名为gulimall.com
image.png
这时,通过gulimall.com:9200,就可以访问到我云服务器的es。
当然这只是配置类本机的域名访问,不会经过网卡解析、dns解析等

这里直接访问域名 gulimall.com,也可以访问到原本nginx的默认页面。

然后让nginx帮我们进行反向代理:
所有来自于gulimall.com的请求,都转到商品服务。
image.png
在 nginx的nginx.conf配置文件中,会引用conf.d文件夹下的所有配置文件。
我们复制一份conf.d下的默认default.conf出来,写我们gulimall配置:gulimall.conf
cp default.conf gulimall.conf
配置内容如下:
image.png
(nginx的配置,每一行都要以 ; 结尾,大括号除外)
主要改动的地方是server_name,改为我们的域名,然后location下,指定proxy_pass为访问商品服务的地址(这里配置到地址为本机,因为在本机开发测试)。
这样的意思为:gulimall.com下的所有请求,都代理给192.168.15.1:10000.

然后重启nginx : docker restart nginx
此处我是阿里云的云服务器,不让这么搞 —
image.png

因阿里云存在这个限制,未备案导致无法访问,所以在开发机上下载nginx,配置这些。

负载均衡到网关

在nginx的总配置文件nginx.conf中:
在http块中配置upstream上游服务器相关内容:
image.png
主要就是添加一个upstream块,给它起了个名字叫gulimall。
里面配置了网关的ip和端口号,如果部署了多个网关,可以写多个,保存退出即可。
这里我网关在本地,写的是本地的网关和端口号。
然后进入conf.d文件夹下的刚刚创建的gulimall.conf下,编辑这个文件:
把原本直接代理到商品服务的内容,改成代理到网关:
image.png
然后重启nginx : docker restart nginx

这时,访问会404,是因为网关里没有配置路由规则。

  1. spring:
  2. cloud:
  3. gateway:
  4. routes:
  5. - id: product_route
  6. uri: lb://gulimall-product
  7. predicates:
  8. - Path=/api/product/**
  9. filters:
  10. - RewritePath=/api/(?<segment>.*),/$\{segment}
  11. - id: third_party_route
  12. uri: lb://gulimall-third-party
  13. predicates:
  14. - Path=/api/thirdparty/**
  15. filters:
  16. - RewritePath=/api/thirdparty/(?<segment>.*),/$\{segment}
  17. - id: member_route
  18. uri: lb://gulimall-member
  19. predicates:
  20. - Path=/api/member/**
  21. filters:
  22. - RewritePath=/api/(?<segment>.*),/$\{segment}
  23. - id: ware_route
  24. uri: lb://gulimall-ware
  25. predicates:
  26. - Path=/api/ware/**
  27. filters:
  28. - RewritePath=/api/(?<segment>.*),/$\{segment}
  29. - id: admin_route
  30. uri: lb://renren-fast
  31. predicates:
  32. - Path=/api/**
  33. filters:
  34. - RewritePath=/api/(?<segment>.*),/renren-fast/$\{segment}
  35. - id: gulimall_host_route
  36. uri: lb://gulimall-product
  37. predicates:
  38. - Host=gulimall.com,item.gulimall.com
  39. - id: gulimall_search_route
  40. uri: lb://gulimall-search
  41. predicates:
  42. - Host=search.gulimall.com
  43. - id: gulimall_auth_route
  44. uri: lb://gulimall-auth-server
  45. predicates:
  46. - Host=auth.gulimall.com
  47. - id: gulimall_cart_route
  48. uri: lb://gulimall-cart
  49. predicates:
  50. - Host=cart.gulimall.com
  51. - id: gulimall_order_route
  52. uri: lb://gulimall-order
  53. predicates:
  54. - Host=order.gulimall.com
  55. - id: gulimall_member_route
  56. uri: lb://gulimall-member
  57. predicates:
  58. - Host=member.gulimall.com
  59. - id: gulimall_seckill_route
  60. uri: lb://gulimall-seckill
  61. predicates:
  62. - Host=seckill.gulimall.com

nginx代理网关的时候,会丢失请求都host信息,要配置上去:
image.png

这里由于使用的阿里云云服务器,域名未备案导致无法访问,所以在本机开发环境下载了nginx来实现。
本机windows环境,实测中,需要在server下加一行配置才行:
在location / 中
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
即:
server {
listen 80;
server_name gulimall.com;

location / {
proxy_set_header Host $host;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
proxy_pass http://gulimall;
}


error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}