前几天工作中和前端部门的同学配合时遇到一个问题:前端同学调用服务器端接口时,服务器端接口获取不到cookie。项目是前后端分离,服务器端使用spring mvc提供java接口,前端使用nginx做反向代理解决跨域问题,前端框架使用vue。
当时由于对ngix不太了解,只知道前端同学使用nginx做反向代理时,在测试环境配置的是ip+端口号的方式访问接口,于是就误以为是没有通过域名访问接口,所以服务器端接口才获取不到cookie。还理所当然的找前端同学“纠正错误”,经过一番排查,最终发现问题的罪魁祸首是vue,vue的工作原理是首页页面加载和刷新页面是会通过前端虚拟服务器和后端服务器接口交互,这时是服务器端之间的接口调用,前端同学没有在前端服务器向后端服务器接口正确的发送cookie,导致接口获取不到cookie。
现在想想真的很汗颜,真是无知者无畏,所以就决定要学一学Nginx。这篇文章就记录一下我的一个入门实验,实验目的:在本机配置一个nginx反向代理服务器,监听8089端口。达到访问http://localhost:8089,会通过nginx代理,访问http://localhost:8080的目的。
环境:32位windows、tomcat 、Spring MVC
前期准备:安装tomcat,并新建Spring MVC项目,访问http://localhost:8080/,能够打开Sping MVC项目对应的action,具体做法这里不多说,详情请见我的博文:http://www.cnblogs.com/cs-js/p/7295414.html
第一步:安装Nginx
下载链接:https://kevinworthington.com/nginx-for-windows/
我本机安装在了C: ginx目录下,安装完成后,可以在文件夹里面看到Strat-nginx和Stop-nginx两个文件,一个是启动nginx服务,一个是关闭nginx服务。另外,还可以看到conf这个文件夹,ngix的配置文件nginx.conf就是放在这个文件夹里面。配置反向代理服务器只需要在配置文件里增加几个配置就可以了。
第二步:配置nginx
打开nginx.conf配置文件,会看到在http节点,在http节点下有一个默认的server子节点,我们不用去管它,要做的就是在http节点下新增一个server节点,具体的配置如下:
#虚拟主机的配置 server { #监听端口 listen 8090; #域名可以有多个,用空格隔开,代理访问的真实服务器 server_name localhost:8080; error_page 404 /404.html; charset utf-8; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Server $host; #以下是一些反向代理的配置 #反向代理时候,设置nginx将域名携带到tomcat服务器 proxy_set_header Host $host; #允许客户端请求的最大单文件字节数 client_max_body_size 10m; #对 "/" 启用反向代理 location / { #配置代理访问的真实uri proxy_pass http://localhost:8080; } }
这样,就配置了一个简单的反向代理服务器。是不是很简单,这里需要重点解释一下server节点和它里面的各个配置项的含义:
server:配置一个虚拟主机,一个server接口可以监听一个端口,nginx可以配置监听多个端口,做多个反向代理,每个反向代理都需要配置一个server节点。
listen:监听的端口,就是访问的nginx服务器的端口。
server_name:真实服务器的名称,可以配成ip+端口或者域名+端口
location:把不同方式的请求定位到不同的处理方式上,这里我配置的是“/”,意思就是配置成nginx对"/"这种请求做转发
proxy_pass:转发到真实服务器的uri。这里就是拦截http:localhost:8089/,然后转发到http://localhost:8080
总结,nginx的使用很简单,只需要简单的配置就可以完成高性能的反向代理和负载均衡功能,有兴趣的同学可以在网上深入研究一下,然后把好的资源共享一下,我的邮箱5915305@qq.com。