V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
paloalto
V2EX  ›  NGINX

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

  •  
  •   paloalto · 2012-08-21 08:06:23 +08:00 · 4108 次点击
    这是一个创建于 4479 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不要脸一回,放出地址: http://2wen.it 还没开发完,界面也没设计,程序是自己从零开始边学边写的。

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

    nginx中的server配置如下:



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

    2. http://2wen.it 中的表单提交时(注册、登录等)都会跳转到错误的url导致提交不成功,不知道是不是需要在nginx中加rewrite?
    15 条回复    1970-01-01 08:00:00 +08:00
    Livid
        1
    Livid  
    MOD
       2012-08-21 08:29:11 +08:00
    注册和登陆之后跳转到错误地址的问题,看起来更像是程序导致的,和 nginx 应该没什么关系。
    ray1980
        2
    ray1980  
       2012-08-21 08:37:48 +08:00
    @paloalto 有学习笔记之类的么?LNMP怎么添加能运行WEE.PY的环境?
    aggron
        3
    aggron  
       2012-08-21 08:51:48 +08:00
    include fastcgi_params; 这一行看起来是多余的,后面已经写了参数了
    paloalto
        4
    paloalto  
    OP
       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
        5
    aisk  
       2012-08-21 09:00:34 +08:00
    楼上的样式略恐怖
    paloalto
        6
    paloalto  
    OP
       2012-08-21 09:03:27 +08:00
    @aisk 哎呀,不能再编辑了。
    我贴了新的在这里

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

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

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

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

    我先把php关掉,自己的blog先不开了。
    aggron
        10
    aggron  
       2012-08-21 10:13:49 +08:00
    @paloalto 缓存配置是有效的,你按F5「刷新」页面看看是不是变成304了。直接在地址栏按回车和按F5来「刷新」页面效果是不同的
    这是 在地址栏按回车的header截图,
    可以看到有from cache的字样,我觉得是这样:缓存未过期的情况下,浏览器自己读了本地缓存,根本没有访问服务器,或许看看nginx静态文件的accesslog验证下
    当然我用的是chrome,其他浏览器下可能有所不同
    davidx
        11
    davidx  
       2012-08-21 11:00:43 +08:00
    既然所有的资源文件都在static下, 那就配置static里的东西都expires 30d就好了, 不用再判断文件名了
    paloalto
        12
    paloalto  
    OP
       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
        13
    davidx  
       2012-08-21 12:59:49 +08:00
    @paloalto 可以试试, 因为你有了rewrite, 我不敢保证一定行...
    重启nginx, 然后看access_log
    paloalto
        14
    paloalto  
    OP
       2012-08-21 15:50:33 +08:00
    @davidx 竟然可以!哈哈哈!
    davidx
        15
    davidx  
       2012-08-21 16:31:16 +08:00
    @paloalto great!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5802 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 06:31 · PVG 14:31 · LAX 22:31 · JFK 01:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.