web-dev-qa-db-ja.com

最初のロード時にWebサイト接続がリセットされました

私はphp-cgiでnginxを使用しています。最近、私のサイトを3〜4分などしばらく表示せずに再度開くと、最初に送信したリクエストがブラウザのピアによってリセットされた接続を返すという問題が発生しました。更新すると、後続のすべての要求に対して正常に動作します。これは毎回発生し、孤立したインシデントだけでなく、私のサイトを使用しているすべての人に発生します。 nginxとphp-cgiを再起動しようとしましたが、役に立ちませんでした。誰かが問題が何であるか知っていますか?必要な情報は何でも提供できます。

クライアントが接続を早期に閉じたというメッセージ以外に、エラーログには何も記録されていないことに注意してください。

nginx.conf

user  nobody;
worker_processes  4;
error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;


events {
    worker_connections  2048;
}


http {
    include       /etc/nginx/mime.types;
    error_page 404 /404.html;
    error_page 403 /403.html;
        error_page 444 /444.html;
error_page 502 /502.html;

    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  /var/log/nginx/access.log  main;
        large_client_header_buffers 8 8k;
    sendfile        on;
    tcp_nopush     on;
        tcp_nodelay on;
    keepalive_timeout  30;
        server_tokens off;

    gzip  on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 64 8k;
gzip_min_length 1024; gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    include /etc/nginx/conf.d/*.conf;
}

default.conf

server {
    listen  80;
    server_name  domain.com;
    error_log /var/log/nginx/error.log debug;   
    access_log  /var/log/nginx/access.log;


    location / {
    if ($request_method !~ ^(GET|HEAD|POST)$ ) {
        return 444;
    }

    if ($http_user_agent ~* Havij|hvj|acunetix|wget|HTtrack) {
       return 403;
    }

    root   /home/admin06/public_html;
    autoindex off;        
    index  index.php;


# Images and static content is treated different
    location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
      access_log        off;
      expires           30d;
      root /home/admin06/public_html;
    }

location /nginx_status {
    stub_status on;
access_log off;]
deny all;
}

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
#try_files $uri =404;
    fastcgi_pass backend;


        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /home/site/public_html$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param  QUERY_STRING     $query_string;
        fastcgi_param  REQUEST_METHOD   $request_method;

       fastcgi_param  CONTENT_TYPE     $content_type;
        fastcgi_param  CONTENT_LENGTH   $content_length;
        fastcgi_intercept_errors        on;
        fastcgi_ignore_client_abort     off;
        fastcgi_connect_timeout 60;
        fastcgi_send_timeout 60;
        fastcgi_read_timeout 60;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }

## Disable viewing .htaccess & .htpassword
    location ~ /\.ht {
        deny  all;
    }
location ~ error_log {
    deny all;
}

    location ~ access_log {
    deny all;
}
location ~ \.cgi {
deny all;
}

location ~ \.db {
deny all;
}
}
1
Tar

新しいnginxアップデート(1.2.5)が出て、新しいバージョンにアップデートすると問題が修正されました。

0
Tar

最初に、この障害が発生しているレイヤー、つまりサーバーレベル(Linuxマシン構成)、PHP(php.ini、php-cgi)レベル、またはアプリケーション)を特定する必要があります。レベル。HTTPエラーは、これらのレイヤーのいずれかでの誤った構成によって引き起こされる可能性があるため、最初にサーバー障害(パンが意図されている)が発生している場所を正確に特定して特定する必要があります。

私の提案は、HTTPリクエストをトレースすることです。

  1. Linux構成を介して、サーバーに到着した瞬間から。
  2. 次に、Nginx構成(nginx.conf、default.conf)を使用します。
  3. 次に、PHPおよびPHP-CGIを使用します。
  4. 最後に、アプリケーションに到達したら分析し、アプリケーションがhttp応答を送信するためにそれをどのように処理するかを確認します。

このようにして、サーバー障害の善良な人々が問題を正しく解決するのを助けることができる前に、問題がどこにあるかを正確に特定することができます!

また、nginx.conf、default.conf、php-fpm.confを投稿してください。アプリケーションに関する詳細もいいでしょう。

1
Apurva Sukant