[http请求返回bad request 400] [一个arpg or webgame的小东西] [vhost配置]问题

92 views
Skip to first unread message

Xiaohui Sun

unread,
May 18, 2013, 6:58:53 AM5/18/13
to open...@googlegroups.com
大家好:

http请求会在一段时间后在access日志返回一个400的bad request,请问这是为什么?

以下是http请求:

192.168.0.21 - - [18/May/2013:18:21:36 +0800] "GET /route/?act=User.load&id=1 HTTP/1.1" 200 55 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31"
192.168.0.21 - - [18/May/2013:18:21:56 +0800] "-" 400 0 "-" "-"


以下是curl请求:
192.168.0.10 - - [18/May/2013:18:45:45 +0800] "GET /route/?act=User.load HTTP/1.1" 200 84 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.13.1.0 zlib/1.2.3 libidn/1.18 libssh2/1.2.2"

curl的是正常的,没有400.

代码调用(lib/core/Request:35行):

ngx.status = ngx.HTTP_OK
ngx.header.charset = utf_8
ngx.header.content_type = "application/json"
ngx.say(data)
ngx.exit(ngx.HTTP_OK)

以上所说代码可在  https://github.com/sunblessyou/lua-framework/   取到

配置文件如下(其他配置都是默认配置):
lua_package_path '/data/lua/?.lua;lib/?.lua;lua/class/?.lua;lua/db/?.lua;;';
lua_package_cpath '/data/vendor/?.so;lib/?.so;;';

server
{
    listen 80;
    index index.html index.htm;
    root /data/lua/webroot;

    location /route {
        lua_code_cache off;
        content_by_lua_file /data/lua/route.lua;
    }
}


我是做webgame的,以前的开发模式是c++和php
最近感觉这种模式已经达不到公司的要求了
撑死才能做到3K同时在线

所以公司打算开始用lua去代替PHP
所以我就写了一套兼容nginx和c++的一套东西。。

本身我lua属于初学者水平- - OOP实现借用了云风的思路

另外我还想问的一个问题是:
像如果我同一台物理服务器需要运行多个vhost

这时我应该怎么办?
openresty好多配置是只能写在http层的。
这时我只能多起几个nginx work来转发么?因为他们的package可能不一样。

再说我那个不入流的小东西吧。
我的想法是每一个请求就是一个Request所以他每次都要new..业务逻辑每次也要new.其他的东西都是module....

总之,也请大家帮忙分析下这么做的可能性吧?

1lo...@gmail.com

unread,
May 18, 2013, 7:13:55 AM5/18/13
to open...@googlegroups.com
在补一句,版本为 ngx_openresty-1.2.7.6


agentzh

unread,
May 18, 2013, 1:48:33 PM5/18/13
to openresty
Hello!

2013/5/18 Xiaohui Sun:
> http请求会在一段时间后在access日志返回一个400的bad request,请问这是为什么?
>
> 以下是http请求:
>
> 192.168.0.21 - - [18/May/2013:18:21:36 +0800] "GET
> /route/?act=User.load&id=1 HTTP/1.1" 200 55 "-" "Mozilla/5.0 (Windows NT
> 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64
> Safari/537.31"
> 192.168.0.21 - - [18/May/2013:18:21:56 +0800] "-" 400 0 "-" "-"
>

这是正常现象,可以忽略。因为 chrome 等现代浏览器喜欢同时打开多个 TCP
连接进行尝试,但它最终只会使用其中一个连接,而其他连接未发送请求就直接关闭掉了,此时 nginx 便会记录 400. 更新版本的 nginx
会针对此种情形不进行日志记录。

> 另外我还想问的一个问题是:
> 像如果我同一台物理服务器需要运行多个vhost
>
> 这时我应该怎么办?
> openresty好多配置是只能写在http层的。
> 这时我只能多起几个nginx work来转发么?因为他们的package可能不一样。
>

你的多个 vhost 需要同时使用不同版本的同一个 Lua package?如果是的话,这在目前的 ngx_lua
模块实现中是做不到的,因为 Lua VM 是整个 server 级别共享的。你只能起多个不同的 nginx 实例了。

> 再说我那个不入流的小东西吧。
> 我的想法是每一个请求就是一个Request所以他每次都要new..业务逻辑每次也要new.其他的东西都是module....
>

不好意思,我没看明白你这一句话的意思。

Best regards,
-agentzh

1lo...@gmail.com

unread,
May 18, 2013, 9:17:47 PM5/18/13
to open...@googlegroups.com
感谢agentzh在周末还能回复我的问题。

第一个问题:
   我已经明白问题所在了。
第二个问题:
   我也差不多了解了,其实我的业务需求是一台服务上,cpath可能相同,但业务逻辑的path不一样。现在来看只能起多个不同的 nginx 实例了。
第三个问题:
   就是我写的那个兼容nginx和c++的框架了,他将运行在我们下一个游戏中,但是我现在不太确定他是否能胜任这个事情。
   所以想让大家帮忙看看有没有问题,代码在 : https://github.com/sunblessyou/lua-framework/
   目前dao层还未写。
   流程大概是route -> pcall -> dispatcher -> ctrl -> service -> dao -> entity -> view
   

在 2013年5月19日星期日UTC+8上午1时48分33秒,agentzh写道:
Reply all
Reply to author
Forward
0 new messages