全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

利用nginx解决跨域问题的方法(以flask为例)

前言

我们单位的架构是在api和js之间架构一个中间层(python编写),以实现后端渲染,登录状态判定,跨域转发api等功能。但是这样一个中间会使前端工程师的工作量乘上两倍,原本js可以直接ajax请求api,但是我们不得不ajax请求中间层,中间层再请求api。

如图:

 

为了少敲代码,提高工作效率,我们当然希望将python中间层砍掉,但是如何解决以下三个问题,成为关键:

  1. 后端渲染
  2. 登录状态判定
  3. 跨域转发api

关于1,2我会在另外两篇博客中详细叙述,这篇文章主要解决3,也就是跨域问题。解决跨域问题方法很多:反向代理,jsonp,Cross-Origin Resource Sharing等,我们今天通过nginx反向代理实现。

新建两个flask程序来实验

打开pycharm,新建项目选择flask,name分别设为client和server。

编写client和server的python文件,使其分别跑在5000端口和5001端口:

client.py

from flask import Flask
app = Flask(__name__)
@app.route('/') def hello_world(): return 'this is client'
if __name__ == '__main__':
 app.run(port=5000)

server.py

from flask import Flask
app = Flask(__name__)
@app.route('/') def hello_world(): return 'this is server' @app.route('/api/') def api(): return 'api'
if __name__ == '__main__':
 app.run(port=5001)

运行client.py

运行server.py

安装nginx(ubuntu)

打开新立得,搜索nginx,选中并安装。ubuntu就是这么简单,其他平台暂不叙述,可自行搜索。

配置nginx,使其将5000端口(客户端)的请求转发到5001端口(服务器端)

打开nginx默认的配置文件:

sudo gedit /etc/nginx/sites-available/default

在文件末尾添加如下命令:

## demo listen 5017 proxy 5000 and 5001 ##
server {
 listen 5017; 
 server_name a.xxx.com;
 access_log /var/log/nginx/a.access.log;
 error_log /var/log/nginx/a.error.log;
 root html;
 index index.html index.htm index.php;
 ## send request back to flask ##
 location / {
  proxy_pass http://127.0.0.1:5000/ ; 
 #Proxy Settings
  proxy_redirect off;
  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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
  proxy_max_temp_file_size 0;
  proxy_connect_timeout 90;
  proxy_send_timeout 90;
  proxy_read_timeout 90;
  proxy_buffer_size 4k;
  proxy_buffers 4 32k;
  proxy_busy_buffers_size 64k;
 }
 location /proxy {
  rewrite ^.+proxy/?(.*)$ /$1 break;
  proxy_pass http://127.0.0.1:5001/ ; 
 #Proxy Settings
  proxy_redirect off;
  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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
  proxy_max_temp_file_size 0;
  proxy_connect_timeout 90;
  proxy_send_timeout 90;
  proxy_read_timeout 90;
  proxy_buffer_size 4k;
  proxy_buffers 4 32k;
  proxy_busy_buffers_size 64k;
 }
}
## End a.xxx.com ##

运行nginx:

sudo /etc/init.d/nginx restart

这些命令使得localhost:5017代理了localhost:5000,如图:

使得localhost:5017/proxy代理了localhost:5001,如图:

使得localhost:5017/proxy/api/代理了localhost:5001/api/,如图:

如此以来,原本需要从5000端口请求5001端口的url,变成了从5017端口请求5017端口的/proxy。解决了同源策略带来的跨域问题。

这个配置文件也可以和uwsgi配合起来用,也可以不用uwsgi,直接运行python文件启动服务,本文便是后一种。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。


# nginx  # 解决跨域  # nginx代理  # nginx解决跨域问题  # 如何使用Nginx解决跨域问题详解  # nginx解决跨域问题的实例方法  # 如何用Nginx解决前端跨域问题  # Nginx跨域问题解析与解决  # Nginx轻松搞定跨域问题完整过程  # 中间层  # 如图  # 使其  # 这篇文章  # 配置文件  # 后端  # 是在  # 设为  # 会在  # 这样一个  # 可以直接  # 会使  # 等功能  # 这么简单  # 如何解决  # 两倍  # 暂不  # 并安装  # 来用  # 提高工作效率 


相关文章: 北京建设网站制作公司,北京古代建筑博物馆预约官网?  建站主机默认首页配置指南:核心功能与访问路径优化  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  IOS倒计时设置UIButton标题title的抖动问题  建站主机无法访问?如何排查域名与服务器问题  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  建站之星logo尺寸如何设置最合适?  如何选择CMS系统实现快速建站与SEO优化?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  如何在香港服务器上快速搭建免备案网站?  如何用虚拟主机快速搭建网站?详细步骤解析  金*站制作公司有哪些,金华教育集团官网?  如何通过主机屋免费建站教程十分钟搭建网站?  c# await 一个已经完成的Task会发生什么  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  长沙做网站要多少钱,长沙国安网络怎么样?  C#如何在一个XML文件中查找并替换文本内容  网站制作难吗安全吗,做一个网站需要多久时间?  定制建站如何定义?其核心优势是什么?  建站之星后台密码遗忘?如何快速找回?  头像制作网站在线制作软件,dw网页背景图像怎么设置?  香港网站服务器数量如何影响SEO优化效果?  长沙企业网站制作哪家好,长沙水业集团官方网站?  建站之星安装后界面空白如何解决?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  如何基于PHP生成高效IDC网络公司建站源码?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  建站主机是否等同于虚拟主机?  高端建站如何打造兼具美学与转化的品牌官网?  成都网站制作报价公司,成都工业用气开户费用?  制作农业网站的软件,比较好的农业网站推荐一下?  如何在IIS服务器上快速部署高效网站?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  清除minerd进程的简单方法  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  建站之星上传入口如何快速找到?  PHP 500报错的快速解决方法  如何零成本快速生成个人自助网站?  再谈Python中的字符串与字符编码(推荐)  建站主机服务器选购指南:轻量应用与VPS配置解析  ,制作一个手机app网站要多少钱?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  安云自助建站系统如何快速提升SEO排名?  如何零基础在云服务器搭建WordPress站点?  如何确认建站备案号应放置的具体位置?  制作网站的基本流程,设计网站的软件是什么?  如何选择美橙互联多站合一建站方案?  如何快速选择适合个人网站的云服务器配置? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。