Invalid HTTP_HOST header Django

环境:Centos, Django 1.11.4,

在运行Django Demo时的错误,运行是以监听所有IP的方式

报的错是 Invalid HTTP_HOST header Django. You may need to add u’xxx.xxx.com’ to ALLOWED_HOSTS.

解决办法是在Setting.py中,将u’xxx.xxx.com’(你的域名)加入到ALLOWED_HOSTS中,也把本地的ip也加进去。查了下官方文档,说是为了防止HTTP Host header attacks。

 

Centos 6 Supervisor 开机启动

环境:阿里云Centos 6,Python ,Flask,Gunicorn,Supervisor,Nginx

参考资料:

链接1:centos下通过gunicorn+nginx+supervisor部署Flask项目

链接2:进程管理工具supervisor的使用注意事项

链接3:Setting Up Python and Supervisor on CentOS

链接4:supervisor+gunicorn部署python web项目

链接5:How to control your deamon with Supervisord (On CentOS)

1、supervisor是否要在虚拟环境中安装?

我想了想觉得应该是得在系统中安装。

2、supervisor的配置文件放在哪呢?

原本是放在每个项目的虚拟环境目录下,最佳实践(参考链接3,链接4)是在/etc/目录下建个默认的配置文件
echo_supervisord_conf > supervisord.conf
然后编辑这个配置文件,在最后让这个配置文件include指定目录下的配置文件
[include]
files = /etc/supervisord.d/*.conf

supervisord.d这个目录也是得自己新建,mkdir /etc/supervisord.d/
然后再在/etc/supervisord.d/目录里放置所有的supervisor的配置文件。

3、怎样让Centos开机时就让supervisor启动这些配置文件呢?

vi /etc/rc.d/rc.local

在rc.local里直接写 supervisord -c /etc/supervisord.conf 还不行,还得写全supervisord所在的路径。我这里也让nginx开机启动了。

Python Flask Gunicorn Nginx CentOS Deploy SSL Https 多个App 部署

Centos 6,Python 2.7,阿里云ECS,

参考文章:

链接1:centos下通过gunicorn+nginx+supervisor部署Flask项目

链接2:Flask+Gunicorn+Nginx配置多个app

链接3:Virtual Hosts on nginx (CSC309)

我的需求是想在阿里云(Centos)上部署Flask的App,当然我想部署多个App在上面,另外我还会部署https。

链接1的文章写得特别好,但我需要部署https,这个是需要要nginx里配置的。我之前的部署方案也可以支持https,但据说会不稳定,方法是 Python Flask 支持 https Let’s Encrypt 。

nginx的坑。刚开始用nginx时,会发现它有很多个配置文件,网上不同的教程打开的配置文件都不一样,不同操作系统的配置文件目录也可能不同。真是非常崩溃。但后面也很好理解,它其实有一个主的配置文件,主的配置文件里可以包含其它的配置文件,这样它就把配置不同功能的配置文件分开了,比如说有专门配置ssl的配置文件ssl.conf。这样可以减少因为配置错误导致整体功能不可用的情况,单个配置文件错误的话至少只有相应的功能不可用。

其实你启动nginx后,在浏览器中进入nginx的默认页面,它就告诉你了它的配置文件在哪,Centos中是在 /etc/nginx/nginx.conf ,打开这个配置文件,你会注意到它里面有 include 这个词,这个是用于去包含其它目录下的配置文件。

配置https的证书我是在 sslforfree.com 上搞的,用的是Let’s Encrypt 的免费证书。
vi /etc/nginx/conf.d/ssl.conf

上面是我的配置。

测试时用 https://xx.example.com/test ,主要是指定证书,其它的ssl配置我都默认。我加了个ssl on 。

在做多app配置时我遇到一个问题,“ location / ”时可以,但“location /test”时不行(报404错误),解决这个办法请参考链接3。原因是nginx把 /test 这个发给Flask App,但我的Flask App里没有处理这个路由,所以报错了。

terminal vi tab 4 spaces 空格

在命令行下,用vi来写代码时,按tab是8个空格,我不确定是否所有vi默认都是8个空格。我是在Mac terminal下发现有这个问题的。解决办法google “vi tab 4 spaces”一下就出来了。按ESC后输入 :set tabstop=4 后回车就可以了。

Python Flask 支持 https Let’s Encrypt

有个小的用Flask写的Python程序需要支持https,证书用免费的Let’s Encrypt,在sslforfree.com上输入域名,获得证书。验证域名我用的是在vps上简单搭个ngnix来上传文件验证。

web server用的是Flask的werkzeug内置的server,配置ssl参考下面的链接
https://stackoverflow.com/questions/28579142/attributeerror-context-object-has-no-attribute-wrap-socket/28590266#28590266
http://werkzeug.pocoo.org/docs/0.12/serving/
只需要多加两行代码即可

sslforfree中申请后下载得到的压缩包中包含certificate.crt,private.key,ca_bundle.crt。

怎么判断是否我们的Python程序的证书是否有效呢?
可以用chrome 60版本来判断。下面链接教怎么在cheome 60中查看证书。
https://www.ghacks.net/2017/07/27/configure-google-chrome-to-display-certificates-directly/
这样就可以在chrome中访问某个get接口,
然后就可以查看证书的信息了。

TIM 20170803181043

TIM 20170803181133

 

SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.

Environment:Mac OS 10.12.2, Python 2.7.10, SQLAlchemy 1.1.4

在试教程 http://www.jikexueyuan.com/course/1387_2.html?ss=1 时,用到python flask_sqlalchemy (version 1.1.4)时,报一个warning

解决办法是加一行配置,将SQLALCHEMY_TRACK_MODIFICATIONS设为true,如下

参考链接:http://www.jianshu.com/p/70c892fab7af

command ‘cc’ failed with exit status 69

Environment:Mac OS 10.12.2, Python 2.7.10
On terminal and use pip to install mysql-python (virtualenv is activate), but it get a error

command ‘cc’ failed with exit status 69

reference link: http://stackoverflow.com/questions/19769648/cant-install-discount-with-pip-error-command-cc-failed-with-exit-status-1
I need to use xcode-select to install Xcode Command Line Tools

python SNIMissingWarning InsecurePlatformWarning

环境:CentOS 6.8, Python 2.6.6

敲一些命令时,比如 pip list时,会提示:

解决办法是安装

 

error: command ‘gcc’ failed with exit status 1

环境:CentOS 6.8, python 2.6.6,  virtualenv 15.1.0

我是在virtualenv里,想要在里面安装mysql-python,但老报错

参考文章:http://blog.csdn.net/fenglifeng1987/article/details/38057193
退出virtualenv

然后输入以下命令

不过这三个东西分别是什么用途呢?

如何用开源的mini weibo来搭个自己的应用

做这个事情和写这篇博文纯粹是感兴趣。
我对微博以及Phthon都有点兴趣,就去试了下Python的微博SDK,这个SDK不是官方在维护,而是个大牛@廖雪峰 制作的,他还用这个SDK做了个Demo,可以跑在新浪的App Engineer上,开源的。于是我就参考在他公布出来的文档开始做了。
微博SDK以及oAuth2.0,我还是比较了解的,不过我当时还是遇到两个问题,特记录下来,给别人参考。
1. 在上传完代码到SAE之后,进入http://yourappname.sinaapp.com/ 登录你的应用,点击“用新浪微博登录”,却提示如下错误
redirect_url_mismatch

我当时太困了,没认真看那错误,还发邮件去问@廖雪峰 ,不过第二天早上在床上时我就想明白是什么原因了。@廖雪峰 在邮件里也只告诉我原因,并没有告诉我在哪里改回调页面。然后我花了很长时间,把python的代码看了个遍,终于在urls.py这文件的最后两行,找到了修改的地方,上传代码后可以用,泪流满面。

2. 虽然可以发微博了,但是微博显示的来源却还是mini weibo,这很奇怪,它拿了我的app key和app secrect,却显示的是别人的应用名称。然后我再去问@廖雪峰 ,他给我的回复我觉得不对,于是我就自己折腾。我发现SQL的user表格中,是没有记录的,这里理应记录着用了这个应用的人才对。另一点,我把微博中我的应用里,把mini weibo取消授权,但是我重新接入时,它居然又出现在我的应用里,而不是我自个申请的应用。真是太奇怪了。经过我不断尝试,找到问题的原因了,得把回调页面从http://sinaweibopy.sinaapp.com/callback 改变自个的回调页面 http://yourappname.sinaapp.com/callback

3. 还有一点是,把代码上传到SAE传不上去,原来得先在根目录新建一个文件夹,命名为1,然后把所有的源代码放在1这个文件夹下面,这样才行。因为一个SAE里可能会有多个版本的软件,所以他们用根目录的文件夹来区分当时使用的是哪个版本的软件,这个可以在SAE后台设置。