nginx解决vuejs与springboot跨域问题

为什么80%的码农都做不了架构师?>>>   hot3.png

问题

在实施前后端分离的时候,vuejs与springboot通常不在同一台服务器,这个时候,vuejs调用springboot的时候通常会出现跨域问题。

解决思路

这里的解决方案,主要是通过nginx搭建一个静态文件服务器,然后,再在此基础上面启用nginx的反向代理功能,反向代理springboot的rest接口服务即可。 nginx解决vuejs与springboot跨域问题_第1张图片

nginx.conf

# 启动多worker进程
worker_processes  auto;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
	# 假装配置springboot服务集群
	upstream myspringboot {
        server 127.0.0.1:8081;
		keepalive 32;
    }
    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"';
    sendfile        on;
    keepalive_timeout  65;
    # 启用gzip压缩
    gzip  on;
    server {
        # nginx服务器对外8080端口
        listen       8080;
        server_name  localhost;
        # 日志输出
        access_log  logs/myvuejs.access.log  main;
        # vuejs静态文件配置
        location / {
            root myvuejs;
            index  index.html index.htm;
        }
        # 反向代理springboot接口服务
        location /api/springboot/ {
			# 解决springboot中获取远程ip的问题
			proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://myspringboot/api/springboot/;
			proxy_http_version 1.1;
	        proxy_set_header Connection "";
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

其中:root myvuejs;表示myvuejs文件夹里面的全部都是vuejs的配置文件;反向代理的部分,主要就是将前端调用的/api/springboot/的rest接口请求,反向代理到http://xxxxxxxx:8081/api/springboot/的springboot接口上面去。 **注意:**在Spring boot获取ip地址需要使用HttpServletRequest request.getHeader("X_FORWARDED_FOR");方法

总结

跨域问题,无需在springboot或vuejs打开跨域支持,直接使用nginx的静态文件服务器和反向代理服务器功能就可以解决这个问题了。

参考

  • Module ngx_http_proxy_module

转载于:https://my.oschina.net/fxtxz2/blog/2992279

你可能感兴趣的:(nginx解决vuejs与springboot跨域问题)