前天搭好了ghost博客系统,结果快乐了一天就挂了。当时只要启动docker的nginx,TCP连接数直接飙到300+,过了一会儿,上2000+了。yum装的初始100+。说真的,问题我也没搞懂,初步觉得是nginx配置问题。现在已经重装了系统,重新搭建了起来了。这篇文章写写nginx配置文件方面的东西。

问题定位

nginx配置问题

因为一启动nginx就就崩了,查看TCP连接数分分钟2000+。其中大部分是NOT-ESTABLISHED,极少数几个是ESTABLISHED。严重怀疑nginx配置的不对,瞎鸡儿转发。

TCP状态基本概念

以下资料摘抄自TCP端口状态说明,TCP深入的知识,会另开一篇博客详解。

LISTENING

FTP服务启动后首先处于监听状态。

ESTABLISHED

表示建立了连接,表示两台机器正在通信。

CLOSE_WAIT

对方主动连接中断,我方状态变为CLOSE_WAIT,需要调用close()方法关闭。

TIME_WAIT

我方主动调用close(),收到对方确认后状态变为TIME_WAIT。

SYN_SENT

表示请求链接,如果链接成功就会变成ESTABLISHED。

阿里云服务问题

shutdown所有项目后,ssh阿里云居然还卡,经常崩溃。。。毕竟300块钱买的3年。。。

解决方案及后续

重装系统

重装了centos除了7.n~7.6。只有7.6的能运行docker。。。其他的都报Cannot set property TasksAccounting。并且这错误网上没找到。

监控TCP连接数

阿里云内置了监控系统,自己Google吧。

优化nginx配置

user  nginx;
worker_processes  2;
worker_rlimit_nofile 65535;
error_log  logs/error.log;
pid        logs/nginx.pid;

events {
    use epoll;
    worker_connections 1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format custom   '$remote_addr - $remote_user [$time_local]  '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent" $request_time';
    
    sendfile       on;
    tcp_nopush     on;
    keepalive_timeout  0;
    
    gzip  on;
    gzip_min_length 1100;
    gzip_buffers  4 32k;
    gzip_comp_level 9;
    gzip_http_version 1.1;
    gzip_types text/plain application/x-javascript text/xml text/css;

    server {
        listen  80;
        server_name     zhangjianblog.cn www.zhangjianblog.cn;
        rewrite ^(.*)$  https://www.zhangjianblog.cn  permanent;
	 }

    server {
        listen      80;
	listen 443 ssl;
        server_name  www.zhangjianblog.cn;
	ssl_certificate   /etc/nginx/cert/1942547_zhangjianblog.cn.pem;
 	ssl_certificate_key  /etc/nginx/cert/1942547_zhangjianblog.cn.key;
    	ssl_session_timeout 5m;
    	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    	ssl_prefer_server_ciphers on;

        location / {
           proxy_pass http://172.17.0.1:2368/;
        }

        access_log logs/zhangjianblog.cn.log;
        error_log logs/error.zhangjianblog.cn.log;
    }
}

目前用的这套,还没出现问题。
nginx配置详解,单独写篇博客吧。