前言

我们单位的架构是在api和js之间架构一个中间层(python编写),以实现后端渲染,登录状态判定,跨域转发api等功能。但是这样一个中间会使前端工程师的工作量乘上两倍,原本js可以直接ajax请求api,但是我们不得不ajax请求中间层,中间层再请求api。
如图:
为了少敲代码,提高工作效率,我们当然希望将python中间层砍掉,但是如何解决以下三个问题,成为关键:
关于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小时内与您取得联系。