前言
最近接手了团队之前的日志项目,说白了,刚开始的时候心里还是挺没底的,教程还没学明白呢就直接上项目,多少还是有点忐忑的,但是后来发现也还行吧,要写的东西都是教程里的,正好借此机会实践一下,巩固一下。
CORS
之前教程学的前后台数据交互直接通过浏览器,但是由于浏览器的同源策略,还要对CORS(跨域资源共享 Cross-Origin Resource Sharing)进行配置
跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。比如,站点 http://domain-a.com 的某 HTML 页面通过 <img> 的 src 请求 http://domain-b.com/image.jpg。网络上的许多页面都会加载来自不同域的CSS样式表,图像和脚本等资源。
出于安全原因,浏览器限制从脚本内发起的跨源HTTP请求。 例如,XMLHttpRequest和Fetch API遵循同源策略。 这意味着使用这些API的Web应用程序只能从加载应用程序的同一个域请求HTTP资源,除非响应报文包含了正确CORS响应头。
(译者注:这段描述不准确,并不一定是浏览器限制了发起跨站请求,也可能是跨站请求可以正常发起,但是返回结果被浏览器拦截了。)
当然了,它肯定是有一些弊端的:
我们知道,所谓预检请求,都是通过OPTIONS请求方法发出的。需要注意的是,预检请求不会携带任何的请求参数,所以你不需要担心数据库会被修改两次。服务器需要做的就是,在全局拦截器中,设置Access-Control-Allow系列跨域头。问题就出在这个跨域头这里。需要设置的跨域头主要有三个:
Access-Control-Allow-Origin: 允许访问的域名
Access-Control-Allow-Methods: 允许使用的请求方法
Access-Control-Allow-Headers: 允许使用的请求头第一个,没问题,很合理。因为我确实要限制非法网站过来的请求
第二个,也没毛病。因为确实存在,某些controller只支持特定的HTTP方法。Restful接口中这种限制体现得尤为明显。问题出在第三个
第三个,就非常皮了。这个是用来告诉前端,我允许你接下来的请求附带哪些请求头。或许换个说法更容易暴露它的不合理,就是,我服务器支持哪些请求头。需要注意的是,这里必须把所有支持的请求头都填上。天呐,要知道,所有的HTTP请求头,基本的,常见的,不常见的,加起来有几十个呢。如果服务器要全部支持,就要把所有的请求头都填进去。这将是非常枯燥,而且不必要的工作。
这是教程学习过程中关于跨域请求的一些配置,感觉确实挺费劲的,而且有时候报一些关于跨域的错误,小白表示根本就看不懂啊。
nginx
后来了解到,一般生产项目都会用到nginx去解决前后台数据交互的问题,难怪之前访问某些网站会出现nginx的字样。
什么是nginx呢?
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
安装
自从使用上ubuntu之后,发现Windows真的太难用了,虽说用鼠标点击比命令行快捷,但是一行命令行就能解决的问题,鼠标不知道要点多久。
nginx在Ubuntu上的安装和大多数软件一样,一行命令解决问题:
sudo apt-get install nginx
安装好后还要检验一下,一般是通过版本号进行检验:
nginx -v
如果有版本号就说明安装好了。
配置
nginx的配置也是很简单的,前提是你要知道nginx安装的目录以及项目的目录,一般nginx都是安装在根目录下的/etc文件夹里(可以使用 nginx -T查看具体安装目录):
然后进入nginx文件夹,打开nginx.conf文件,可以选择用vim打开,毕竟比较方便:
sudo vim nginx.conf
找到下面这两行代码所在的地方,然后可以在中间添加项目中nginx.conf所在的路径。
像上面这样的就可以这样写:
include /etc/nginx/mime.types;
include /home/jincheng/log/nginx.conf;
default_type application/octet-stream;
(只是添加了中间一行)
修改完成之后保存,然后执行:
sudo nginx -t
查看配置文件是否生效
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
当出现ok和successful字样时,说明生效了,然后执行:
sudo nginx -s reload
重新启动nginx
应用nginx
如何确定nginx是否生效了呢,首先打开前台,启动项目,
前台可以由4200端口访问到,
然后把端口号改成8014再访问一下(不一定都是8014,由项目配置文件决定)
然后打开后台,访问一个接口
修改路由为8014/api/client再次访问:
可以确定nginx生效,在以后的使用中,只需使用
sudo /etc/init.d/nginx start
即可启动nginx。
Ubuntu安装之后的文件结构大致为:1)所有的配置文件都在/etc/nginx下,并且每个虚拟主机已经安排在了/etc/nginx/sites-available下
2)程序文件在/usr/sbin/nginx
3)日志放在了/var/log/nginx中
4)并已经在/etc/init.d/下创建了启动脚本nginx
5)默认的虚拟主机的目录设置在了/var/www/nginx-default (有的版本默认的虚拟主机的目录设置在了/var/www, 请参考/etc/nginx/sites-available里的配置)
详解
查看项目的nginx.conf文件,有几个重要的信息,listen 8014,监听8014端口,当路由含有/api时,向8114端口发送请求或数据,否则向4200端口发送,这样一来便实现了前后台数据的转发,而此时数据转发都是通过8014端口进行,浏览器认为是同源的,所以不存在跨域问题。
总结
不得不说,nginx真的挺神奇的,况且那么多知名互联网公司都在用,肯定是很成功的,希望在以后的应用中能对它了解更多吧。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。