web.py+nginx+fastcgi做了个小站,放线上环境测试时发现静态文件无法缓存,表单无法提交,求助。

2012-08-21 08:06:23 +08:00
 paloalto
不要脸一回,放出地址: http://2wen.it 还没开发完,界面也没设计,程序是自己从零开始边学边写的。

本地开发测试一直正常,昨晚放线上之后问题一大堆,现在连注册都不能。

nginx中的server配置如下:

http://gist.github.com/3409397

目前发现的主要有两个问题:
1.第一个server(是一个静态网站)中的图片、css、js都可以缓存的,为什么同样的配置到了第二个sever(开发中的项目)上就不行了呢?是不是因为fastcgi的原因?

2. http://2wen.it 中的表单提交时(注册、登录等)都会跳转到错误的url导致提交不成功,不知道是不是需要在nginx中加rewrite?
4023 次点击
所在节点    NGINX
15 条回复
Livid
2012-08-21 08:29:11 +08:00
注册和登陆之后跳转到错误地址的问题,看起来更像是程序导致的,和 nginx 应该没什么关系。
ray1980
2012-08-21 08:37:48 +08:00
@paloalto 有学习笔记之类的么?LNMP怎么添加能运行WEE.PY的环境?
aggron
2012-08-21 08:51:48 +08:00
include fastcgi_params; 这一行看起来是多余的,后面已经写了参数了
paloalto
2012-08-21 08:59:55 +08:00
@Livid 但是本地环境是没问题的,我在本地一直用的是web.py自带的那个开发服务器来开发:
$ python application.py
http://0.0.0.0:8080

这是account.py中login部分的代码:
http://gist.github.com/3409951


@ray1980 我只记了刚开始时的一点 http://blog.han.im/category/%E7%BC%96%E7%A8%8B/ ,后来遇到的问题太多,都记不过来了。 像是什么从数据库中批量增删改查、多表查询等,乱七八糟的,现在只求能把东西做完了,然后回过头来重新做一遍。

我记得我的vps就是用LNMP装的, http://webpy.org/install.zh-cn 这上面有教程,我基本上是跟着这个来的。记得在本地的mac os上装mysqldb时着实费了些劲。

还有前段时间刚放到线上时,也遇到一些问题,比如“提示spawn-fcgi运行成功,但是 ps aux|grep application.py 和ps -ef都看不到进程”,“ImportError: No module named Image”等,都记在这里了 http://www.douban.com/note/229243774/ 。比较乱。
aisk
2012-08-21 09:00:34 +08:00
楼上的样式略恐怖
paloalto
2012-08-21 09:03:27 +08:00
@aisk 哎呀,不能再编辑了。
我贴了新的在这里

http://gist.github.com/2aabae25d9136840e166
paloalto
2012-08-21 09:09:26 +08:00
@aggron 注释掉之后,刷新页面发现请求还是200。似乎不是这里的原因。。。

paloalto
2012-08-21 09:13:34 +08:00
@paloalto 哇塞!!!!那个跳转的问题竟然好了!!!

我说怎么突然有了新用户注册,还纳闷他们怎么注册的呢,结果发现能登录注册了!哈哈哈哈哈!好像是刚才注释掉那一行的原因。
paloalto
2012-08-21 09:19:11 +08:00
@aggron 上面那条@错了。补@。

另外请各位慎重测试啊~~我那小vps只有256m内存,开了PHP/php-cgi和Python之后,只剩6m了啊~~

我先把php关掉,自己的blog先不开了。
aggron
2012-08-21 10:13:49 +08:00
@paloalto 缓存配置是有效的,你按F5「刷新」页面看看是不是变成304了。直接在地址栏按回车和按F5来「刷新」页面效果是不同的
这是 在地址栏按回车的header截图,
可以看到有from cache的字样,我觉得是这样:缓存未过期的情况下,浏览器自己读了本地缓存,根本没有访问服务器,或许看看nginx静态文件的accesslog验证下
当然我用的是chrome,其他浏览器下可能有所不同
davidx
2012-08-21 11:00:43 +08:00
既然所有的资源文件都在static下, 那就配置static里的东西都expires 30d就好了, 不用再判断文件名了
paloalto
2012-08-21 11:22:53 +08:00
@aggron 哈哈。原来如此!你猜刚才怎么回事,原来是我把firebug - net 里的"disable browser cache"打上对号了。


@davidx 是这么写吗?把下面的那两个图片和css/js的location删掉,把expires 30d;写到/static/里?

location /static/ {
if (-f $request_filename) {
rewrite ^/static/(.*)$ /static/$1 break;
expires 30d;
}
}
davidx
2012-08-21 12:59:49 +08:00
@paloalto 可以试试, 因为你有了rewrite, 我不敢保证一定行...
重启nginx, 然后看access_log
paloalto
2012-08-21 15:50:33 +08:00
@davidx 竟然可以!哈哈哈!
davidx
2012-08-21 16:31:16 +08:00
@paloalto great!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/45657

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX