16
回答
[广州求职] C/C++服务端程序开发
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

本人目前已离职,在找C/C++服务端程序开发的工作,Windows/Linux平台下的都可以,还有不局限于任何行业。

在业余时间我主要了解目前流行的一些技术,学习/研究Nginx源代码和编写模块。

各位路过的如果有相关职位在招人的请联系我,全职/兼职都可以。

举报
无名码农
发帖于6年前 16回/2K+阅
共有16个评论 最后回答: 5年前

呵呵 考你一个Nginx的问题吧?

开启webdav服务的nginx服务器.

使用put方法向服务器发送5k左右的png格式的图片.

nginx直接崩溃.问题是:什么原因导致nginx崩溃的?

引用来自“开心303”的答案

呵呵 考你一个Nginx的问题吧?

开启webdav服务的nginx服务器.

使用put方法向服务器发送5k左右的png格式的图片.

nginx直接崩溃.问题是:什么原因导致nginx崩溃的?

请描述下你的测试环境、配置和测试代码。

引用来自“婷儿”的答案

引用来自“开心303”的答案

呵呵 考你一个Nginx的问题吧?

开启webdav服务的nginx服务器.

使用put方法向服务器发送5k左右的png格式的图片.

nginx直接崩溃.问题是:什么原因导致nginx崩溃的?

请描述下你的测试环境、配置和测试代码。

我想测试环境已经很明确了吧.

随便拉一台PC,装上linux系统.

下载nginx.然后编译安装.

./configure --with-http_dav_module --with-http_ssl_module

make install

然后使用put方法发送5k大小的文件.

环境你随便搭建这个问题是可以重现的.

没研究过代码,这个我想应该是nginx服务器在外部请求到来时,申请头部大小缓冲的配置小于5k导致溢出吧,具体没遇到过,还请指教

引用来自“开心303”的答案

引用来自“婷儿”的答案

引用来自“开心303”的答案

呵呵 考你一个Nginx的问题吧?

开启webdav服务的nginx服务器.

使用put方法向服务器发送5k左右的png格式的图片.

nginx直接崩溃.问题是:什么原因导致nginx崩溃的?

请描述下你的测试环境、配置和测试代码。

我想测试环境已经很明确了吧.

随便拉一台PC,装上linux系统.

下载nginx.然后编译安装.

./configure --with-http_dav_module --with-http_ssl_module

make install

然后使用put方法发送5k大小的文件.

环境你随便搭建这个问题是可以重现的.

刚在Windows下面测试了,没有出现你说的问题。
@开心303

编译参数:

./auto/configure --prefix= --sbin-path=nginx --with-debug --with-cc=cl --with-file-aio --http-client-body-temp-path=temp/client_body_temp --http-proxy-temp-path=temp/proxy_temp --http-fastcgi-temp-path=temp/fastcgi_temp --http-uwsgi-temp-path=temp/uwsgi_temp --http-scgi-temp-path=temp/scgi_temp --with-http_stub_status_module --with-http_dav_module --without-http_gzip_module --without-http_rewrite_module


测试配置:

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    use  select;
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    #sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen  80;
        server_name  localhost;

        location / {
            root   html;
            index  index.htm index.html;
        }

        location /status {
            stub_status  on;
        }

        location /test_put {
            dav_methods  PUT;
        }
    }
}


测试程序:(使用VC编译)

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winsock2.h>


#pragma comment(lib, "ws2_32.lib")


int
main(int argc, char* argv[])
{
    int                 rc, err;
    size_t              size;
    u_char              buf[8192], *header, *p;
    SOCKET              fd;
    WSAData             wsadata;
    struct sockaddr_in  sin;

    if (WSAStartup(MAKEWORD(2, 2), &wsadata) == -1) {
        return 1;
    }

    fd = socket(AF_INET, SOCK_STREAM, 0);
    if (fd == INVALID_SOCKET) {
        return 1;
    }

    sin.sin_family = AF_INET;
    sin.sin_addr.s_addr = inet_addr("127.0.0.1");
    sin.sin_port = htons(80);

    rc = connect(fd, (struct sockaddr *) &sin, sizeof(struct sockaddr_in));

    if (rc == -1) {
        err = WSAGetLastError();

        /* TODO: err */

        goto done;
    }

    header = (u_char *) "PUT /test_put HTTP/1.1\r\nHost: 127.0.0.1\r\nContent-Length: 5120\r\n\r\n";
    size = strlen((char *) header);

    p = (u_char *) memcpy(buf, header, size) + size;
    p += 5120;

    rc = send(fd, (char *) buf, p - buf, 0);

    if (rc == -1) {
        err = WSAGetLastError();

        /* TODO: err */

        goto done;
    }

    memset(buf, sizeof(buf), 0);

    rc = recv(fd, (char *) buf, sizeof(buf), 0);

    if (rc == -1) {
        err = WSAGetLastError();

        /* TODO: err */

        goto done;
    }

    printf("%s\n", buf);

done:

    closesocket(fd);

    WSACleanup();

    return 0;
}

引用来自“爱吻”的答案

没研究过代码,这个我想应该是nginx服务器在外部请求到来时,申请头部大小缓冲的配置小于5k导致溢出吧,具体没遇到过,还请指教
不会有这种问题的。
顶部