接手了一台古老的服务器的还使用的是mod_wsgi,所以需要配置一下。其实这里有点怀念,记得当年自己折腾第一个app的时候,还是个什么都不懂的菜鸡。当时用django搜方案的时候,还不知道有uwsgi或者tornado之类的东西。就知道apache2可以有可以handle wsgi的服务器。就用了一下mod_wsgi。这次这个项目坑,但是接手了多半还是有点情怀想还自己多年以前的技术债吧。
废话不多说还是上配置吧:
WSGIPythonHome /home/piperck/kn WSGIPythonPath /home/piperck/project/xxx/x <VirtualHost 127.0.0.1:8085> DocumentRoot /home/piperck/project/xxx/x WSGIScriptAlias / /home/piperck/project/xxx/x/apache/sogoke_dev.wsgi WSGIDaemonProcess xxx_piperck user=ubuntu group=ubuntu processes=4 WSGIApplicationGroup xxx_piperck WSGIProcessGroup xxx_piperck Errorlog /var/log/apache2/player_piperck_error.log Customlog "|/usr/bin/rotatelogs /var/log/apache2/piperck_access_%Y_%m_%d.log 86400 480" combined </VirtualHost>
一行一行的解释
1. 是设置project的工作路径。
2. 设置virtualenv或者miniconda的python包管理路径。
然后下面就是apache 的 vhost配置
1. 设置project的工作路径。
2. 应用wsgi的文件路径。这个路径下面要确保wsgi服务器能获取到wsgi application。
3. 告诉mod_wsgi你要使用daemon模式运行,并且设置processes 和 threds数量。 另外这里的xxx_piperck是一个wsgi后台,可以填写一个 自己的,user和 group 这里设置是linux的user和group 要确保这个用户有足够的权限可以操作你下面的设置的配置文件。比如下面设置了日志存放的地方,要确保你的用户有权限读写日志,否则运行会出错。
4. ApplicationGroup 和 ProcessGroup 似乎都没有特别的意思,我设置为跟后台一个名字的参数。
5. 剩下两行是设置日志的。错误日志存放地方,和一个访问日志特别说下那个CustomLog,他调用了一个rotatelogs这个linux工具,来做日志切分。
格式是:rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ]
logfile: /var/log/apache2/piperck_access_%Y_%m_%d.log
rotationtime:86400 ----24hours切一次
offset:480 ----utf+8
这样只要能让apache2正确找到wsgi文件的application,就能跑起来了。实际上我在配置的时候还遇到一点别的坑,我在配置nginx转发到这台机器的过程中,还是遇到一点坑。由于我是新配服务器,我试了各种办法都没有办法正确将流量转发过来,这个时候我应该排除是apache2服务器问题,因为如果nginx流量转发过来了,apache的日志是会看到的,只是会报500或者别的错误。不会完全边日志没有反应。后来我查了一大波nginx服务器配置也没有发现为啥不能转发我新设置在 nginx的800端口。 后来我突然想到,我操不会是设置了防火墙只允许之前那几个接口吧。
sudo iptables -L
一看果然,没有开放的端口全部都被拦截了。
其实遇到这种问题第一个应该想到的是云服务器那边是不是做了安全策略,二是看防火墙设置,最后再次检查nginx配置是否有误。按照这个思路还是能比较快查出问题的所在的。