Nginx反向代理
nginx通常用于帮我们解决跨域问题,我们只需要会一些简单配置即可
首先来讲一下跨域是什么
比如你的前端项目和后端项目都部署在了一个服务器上了
但是这两个项目端口号是不一样的比如前端是9001 后端是10010
前端如果给后端发请求的时候就会产生跨域问题
因为你的前端资源是ip:9001 你请求的后端资源是ip:10010
你的请求是从9001发到10010端口的
你跨了端口,这就相当于跨域了
这个时候我们就需要nginx去帮我们解决这个跨域的问题
因为它会帮我们把前端请求转发到对应的后端端口
下面是配置方式
server {
listen 9001;
server_name 125.5.3.6;
location / {
root /usr/local/nginx/html/shop/shop-admin;
index index.html index.htm;
}
location /api/ {
proxy_pass http://125.5.3.6:10010;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
这时候nginx就会去监听9001端口是否有请求存在
当前端发请求为 125.5.3.6:9001/api/..... 的时候
就会将该请求原封不动的发送到125.5.3.6:10010/api/... 后端服务
这样就没有跨域问题,能从后端服务拿到数据了
一般我们的10010端口为gateway网关服务
我们可以在配置中,去让gateway去转发到下游微服务的时候,去吧请求中的/api/给自动的去掉
配置如下
server:
port: 10010
spring:
application:
name: Gateway
cloud:
gateway:
routes:
- id: user # 路由规则id,自定义,唯一
uri: lb://user-service # 路由的目标服务,lb代表负载均衡,会从注册中心拉取服务列表
predicates: # 路由断言,判断当前请求是否符合当前规则,符合则路由到目标服务
- Path=/api/user/** # 这里是以请求路径作为判断规则
filters:
- StripPrefix=1 #在请求转发到下游微服务的时候,自动去掉最前面的那一节,即去掉/api/
- id: order
uri: lb://order-service
predicates:
- Path=/api//order/**
filters:
- StripPrefix=1
- id: item
uri: lb://item-service
predicates:
- Path=/api/item/**
filters:
- StripPrefix=1
globalcors:
add-to-simple-url-handler-mapping: true
corsConfigurations:
'[/**]':
allowedOrigins: # 允许哪些网站的跨域请求
- "http://localhost:9001"
- "http://localhost:9002"
allowedMethods: # 允许的跨域ajax的请求方式
- "GET"
- "POST"
- "DELETE"
- "PUT"
- "OPTIONS"
allowedHeaders: "*" # 允许在请求中携带的头信息
allowCredentials: true # 是否允许携带cookie
maxAge: 360000 # 这次跨域检测的有效期
nacos:
server-addr: 125.5.3.6:8848 #服务器nacos地址(该ip地址是瞎写的,写自己的即可)
------------------------------------------- 分割线 -------------------------------------------------------
下面是正向代理,主要是第一次部署去测试访问前端资源用的,并没有正确解决跨域问题,前后端跨域问题看上面的就行,这个需要在http{ }代码块中写一个server