angular6+springboot 先后分离 nginx 配置

工做场景:苦逼码农一个,公司技术上但愿跟上潮流,但人员不但愿跟上,因此先后一块儿开发,对于只开发前端代码的人来讲能够 mock 数据,可是本人既然连后台代码一块儿开发,但愿经过 nginx代理直接访问接口返回数据,so...前端

先上nginx配置nginx

server {
         listen 8085;
         server_name localhost;

         location / {
             proxy_pass http://localhost:4200;
             proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection "upgrade";
         }

         location ~ /server/.+ {
             rewrite /server/(.+) /$1 break;
             proxy_pass http://localhost:8082;
             proxy_cookie_path ~*^/.+/([^/]*) /$1;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header X-Real-IP $remote_addr;
         }

    }

自动略过server 的前两行web

  1. 第一个 location 代理的是前端开发服务,服务启动在4200端口; 这个location 的后3行配置是为了让nginx 能够代理websocket ,生产中若是工程中没有websocket 能够不用; 开发中websocket 主要是为了方便快速的在代码从新发布以后能够自动刷新页面
  2. 第二个location 代理的是后台服务器,~ /server/.+ 表明这个location 会处理全部符合这个正则的请求,不会与 第一个location的/冲突,由于 ~ 比 默认的匹配模式高
  3. 第二个location中第一行 rewrite 是重写请求url,好比 请求的是 /server/service-name/user/currentUser,实际想要请求的是/service-name/user/currentUser,因此须要nginx重写这个请求的地址
  4. proxy_cookie_path 针对的是 服务器响应头中的Set-cookie的Path属性,由于后台服务器返回给前台的cookie是带有自身的contextpath的,好比:springboot中配置了server.servlet.content-path=mall或者tomcat中的工程名字是 mall ,那么响应给前台的Set-cookie的path就是 /mall,可是浏览器在登录之后的请求时带的cookies就没有 path属性,这会致使登录状态失效;因此 proxy_cookie_path是将 服务器返回 的cookies 的path进行转换的,上面的配置是将服务器返回的cookies路径的前缀去掉第一段

《完》spring

相关文章
相关标签/搜索