MENU

本博客所使用nginx的编译配置

2018 年 11 月 17 日 • 杂乱文章

近日翻了一下nginx的官网,发现又有更新了,主线版本更新到了1.15.6,稳定版更新到了1.14.1,修复了存在于ngx_http_mp4_modulengx_http_v2_module模块的安全问题,mp4模块安全公告http2模块安全公告,解决办法就是将nginx升级到1.14.11.15.6,公司这里的话继续用现在的版本就可以了,虽有https但未启用http2,也没有启用mp4的模块,然后就是我自己的服务器了,我的博客很长时间以前就启用了http2,至于mp4模块我都不知道是干啥的,应该也没有启用,在准备编译升级博客nginx的时候顺便看了一下全部的模块,真的好多,但是仔细琢磨了一下,很多模块启用了我根本用不到,所以准备把不需要的模块全部禁掉,留下所需的模块就可以了。

深扒一下

基于nginx-1.15.6,使用以下命令可以看到能禁用的模块

具体每个模块都是干嘛的,简单的整理了一下,翻译By Chrome70,更详细的请看官方文档

模块作用
select_module 方法模块禁用构建允许服务器使用该select()方法的模块
poll_module 方法模块禁用构建允许服务器使用该poll()方法的模块
ngx_http_charset_module模块将指定的字符集添加到“Content-Type”响应头字段
ngx_http_gzip_module使用“gzip”方法压缩响应的过滤器
ngx_http_ssi_module是一个过滤器,用于处理通过它的响应中的SSI服务器端包含命令
ngx_http_userid_module设置适合客户端识别的cookie
ngx_http_access_module允许限制对某些客户端地址的访问
ngx_http_auth_basic_module提供HTTP基本身份验证
ngx_http_mirror_module创建背景镜子请求的原始请求的镜像
ngx_http_autoindex_module以斜杠字符(' /')结尾的请求,并生成目录列表
ngx_http_geo_module客户端IP地址创建具有值的变量
ngx_http_map_module创建的变量的值取决于其他变量的值
ngx_http_split_clients_module创建适合A / B测试的变量,也称为分割测试。
ngx_http_referer_module用于阻止对“Referer”头字段中具有无效值的请求访问站点
ngx_http_rewrite_module使用PCRE正则表达式更改请求URI,返回重定向,以及有条件地选择配置
ngx_http_proxy_module允许将请求传递给另一台服务器
ngx_http_fastcgi_module允许将请求传递给FastCGI服务器
ngx_http_uwsgi_module允许将请求传递给uwsgi服务器
ngx_http_scgi_module允许将请求传递给SCGI服务器
ngx_http_grpc_module模块允许将请求传递给gRPC服务器
ngx_http_memcached_module于从memcached服务器获取响应
ngx_http_limit_conn_module限制连接数
ngx_http_limit_req_module限制单个IP处理速率
ngx_http_empty_gif_module模块发出单像素透明GIF
ngx_http_browser_module模块创建的变量值取决于“User-Agent”请求标头字段的值
http_upstream_hash_module实现散列 负载平衡方法的模块
http_upstream_ip_hash_module实现ip_hash 负载平衡方法的模块
http_upstream_random_module暂未找到说明
http_upstream_keepalive_module提供 到上游服务器的连接缓存
ngx_http_core_module httphttp核心模块
http-cachehttp缓存
ngx_mail_pop3_module为POP3客户端设置允许的身份验证方法
ngx_mail_imap_module为IMAP客户端设置允许的身份验证方法
ngx_mail_smtp_module为SMTP客户端 设置允许的SASL身份验证方法
ngx_stream_limit_conn_module用于限制每个定义的键连接的数量
ngx_stream_access_module允许限制访问某些客户端地址
ngx_stream_geo_module创建了这取决于客户端的IP地址值的变量
ngx_stream_map_module创建变量,其值依赖于其它变量的值。
ngx_stream_split_clients_module创建一个适合于A/B测试,也称为分割测试变量。
ngx_stream_return_module允许发送一个指定的值给客户端,然后关闭连接。
stream_upstream_hash_module实现散列 负载平衡方法的模块
stream_upstream_least_conn_module实现least_conn 负载平衡方法的模块
stream_upstream_random_module暂未找到说明
stream_upstream_zone_module可以将上游组的运行时状态存储在共享内存 区域中
pcre使用PCRE库

再看一下当前我nginx的编译参数

[root@nginx /]# nginx -V
nginx version: rj-bai
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) 
built with OpenSSL 1.1.1  11 Sep 2018
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --without-http_memcached_module --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_v2_module --with-openssl=/usr/local/src/openssl-1.1.1 --with-zlib=/usr/local/src/zlib-1.2.11 --with-pcre=/usr/local/src/pcre-8.42

我手动所启用模块说明

模块作用
ngx_http_stub_status_module提供对基本状态信息的访问
ngx_http_ssl_module为HTTPS提供必要的支持
ngx_http_gzip_static_module启用gzip压缩功能
ngx_http_v2_module为HTTP/2提供支持
--with-openssl设置Openssl库 ngx_http_ssl_module模块需要该库
--with-zlib设置zilb库 ngx_http_gzip_module模块需要该库
--with-pcre设置PCRE库 ngx_http_rewrite_module模块需要该库

没错,我现在只是禁用了一个memcached模块,那些没有without的模块全部被启用了,装了这么多,真正意义用到的真的没几个,我的nginx需要支持FastCGI/HTTP2/HTTPS/rewrite/gzip/header就足够了。整理我需要用到的模块。

模块启用方式及作用
ngx_http_core_module默认启用,http核心模块
ngx_http_log_module默认启用,以指定的格式写入请求日志
ngx_http_fastcgi_module默认启用,支持FastCGI
ngx_http_headers_module默认启用,支持add_header/expires等指令
ngx_http_rewrite_module默认启用,支持if/return/rewrite等指令
ngx_http_gzip_module默认启用,支持gzip系列指令
ngx_http_ssl_module--with-http_ssl_module,支持https
ngx_http_v2_module--with-http_v2_module,支持http2
--with-openssl设置Openssl库 ngx_http_ssl_module模块需要该库
--with-zlib设置zilb库 ngx_http_gzip_module模块需要该库
--with-pcre设置PCRE库 ngx_http_rewrite_module模块需要该库

对我来说,启用这些就足够了,其他的全部禁用掉,我不需要开什么防盗链/身份认证/限制连接数/或是upstream之类的东西,开撸。

FROM FBI WARNING

下面的一切操作都是按我的标准来做的,不要照搬,否则后果自负。

编译安装阶段

下载所需的源码包。

2019年04月04日更新,使用nginx版本为1.15.10openssl版本为1.1.1b

[root@nginx /usr/local/src]# wget http://nginx.org/download/nginx-1.15.10.tar.gz
[root@nginx /usr/local/src]# wget https://www.openssl.org/source/openssl-1.1.1b.tar.gz
[root@nginx /usr/local/src]# wget http://www.zlib.net/zlib-1.2.11.tar.gz
[root@nginx /usr/local/src]# wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz
[root@nginx /usr/local/src]# git clone https://github.com/hakasenyang/openssl-patch.git

解压源码包

[root@nginx /usr/local/src]# for i in `ls *.tar.gz`
> do
>  tar zxf $i
> done
[root@nginx /usr/local/src]# cd openssl-1.1.1b/ && patch -p1 < ../openssl-patch/openssl-equal-1.1.1b_ciphers.patch && cd ../nginx-1.15.10

开始编译

个人习惯在编译安装之前会修改nginx名称,删掉版本号,具体操作如下。

[root@nginx /usr/local/src/nginx-1.15.10]# vim src/core/nginx.h 
#define NGINX_VERSION      "" ###删掉
#define NGINX_VER          "rj-bai" NGINX_VERSION ###改成你想要的
[root@nginx /usr/local/src/nginx-1.15.10]# vim src/http/ngx_http_header_filter_module.c 
static u_char ngx_http_server_string[] = "Server: rj-bai" CRLF; ###改成你想要的
[root@nginx /usr/local/src/nginx-1.15.10]# vim src/http/ngx_http_special_response.c 
"<hr><center>rj-bai</center>" CRLF  ###改成你想要的

我的编译参数如下。

[root@nginx /usr/local/src/nginx-1.15.10]# ./configure \
> --prefix=/usr/local/nginx \
> --user=www-data --group=www-data \
> --without-select_module \
> --without-poll_module \
> --without-http_memcached_module \
> --without-http_charset_module \
> --without-http_ssi_module \
> --without-http_userid_module \
> --without-http_proxy_module \
> --without-http_auth_basic_module \
> --without-http_mirror_module \
> --without-http_autoindex_module \
> --without-http_geo_module \
> --without-http_uwsgi_module \
> --without-http_scgi_module \
> --without-http_grpc_module \
> --without-http_limit_conn_module \
> --without-http_limit_req_module \
> --without-http_empty_gif_module \
> --without-http_upstream_hash_module \
> --without-http_upstream_ip_hash_module \
> --without-http_upstream_least_conn_module \
> --without-http_upstream_random_module \
> --without-http_upstream_keepalive_module \
> --without-http_upstream_zone_module \
> --without-stream_limit_conn_module \
> --without-stream_access_module \
> --without-stream_geo_module \
> --without-stream_map_module \
> --without-stream_split_clients_module \
> --without-stream_return_module \
> --without-stream_upstream_hash_module \
> --without-stream_upstream_least_conn_module \
> --without-stream_upstream_random_module \
> --without-stream_upstream_zone_module \
> --without-mail_pop3_module \
> --without-mail_imap_module \
> --without-mail_smtp_module \
> --without-http_map_module \
> --without-http_referer_module \
> --with-http_ssl_module \
> --with-http_gzip_static_module \
> --with-http_v2_module \
> --with-openssl=/usr/local/src/openssl-1.1.1b \
> --with-zlib=/usr/local/src/zlib-1.2.11 \
> --with-pcre=/usr/local/src/pcre-8.43
[root@nginx /usr/local/src/nginx-1.15.10]# make

如果你不知道自己会用到哪些模块,那么建议你用下面的编译参数。

[root@nginx /usr/local/src/nginx-1.15.10]# ./configure \
--prefix=/usr/local/nginx \
--user=www-data --group=www-data \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-http_v2_module \
--with-openssl=/usr/local/src/openssl-1.1.1b \
--with-zlib=/usr/local/src/zlib-1.2.11 \
--with-pcre=/usr/local/src/pcre-8.43

在执行make upgrade之前先测试一下配置文件,如果有错误就说明你用到的模块被禁用了,自查去吧,测试配置文件方法如下。

[root@nginx /usr/local/src/nginx-1.15.10]# ./objs/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

我的没问题,可以进行下一步了。

[root@nginx /usr/local/src/nginx-1.15.10]# make install && make upgrade
[root@nginx /usr/local/src/nginx-1.15.10]# nginx -V
nginx version: rj-bai
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
built with OpenSSL 1.1.1b  26 Feb 2019
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=www-data --group=www-data --without-select_module --without-poll_module --without-http_memcached_module --without-http_charset_module --without-http_ssi_module --without-http_userid_module --without-http_proxy_module --without-http_auth_basic_module --without-http_mirror_module --without-http_autoindex_module --without-http_geo_module --without-http_uwsgi_module --without-http_scgi_module --without-http_grpc_module --without-http_limit_conn_module --without-http_limit_req_module --without-http_empty_gif_module --without-http_upstream_hash_module --without-http_upstream_ip_hash_module --without-http_upstream_least_conn_module --without-http_upstream_random_module --without-http_upstream_keepalive_module --without-http_upstream_zone_module --without-stream_limit_conn_module --without-stream_access_module --without-stream_geo_module --without-stream_map_module --without-stream_split_clients_module --without-stream_return_module --without-stream_upstream_hash_module --without-stream_upstream_least_conn_module --without-stream_upstream_random_module --without-stream_upstream_zone_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --without-http_map_module --without-http_referer_module --with-http_ssl_module --with-http_gzip_static_module --with-http_v2_module --with-openssl=/usr/local/src/openssl-1.1.1b --with-zlib=/usr/local/src/zlib-1.2.11 --with-pcre=/usr/local/src/pcre-8.43

编译安装阶段完成,下面是我所用到的配置文件。

配置文件

贴一下本博客用到的配置文件,包括nginx.conf

nginx.conf

user www-data;
worker_processes  auto;

error_log logs/error.log info;

events {
    use   epoll;
    accept_mutex on;
    multi_accept on;
    worker_connections  4096;
}

http {

    log_format  main  '$remote_addr - [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" "$upstream_addr" "$upstream_status" "$upstream_response_time" "$request_time" "$request_body"';

    include       mime.types;
    default_type  text/html;

    sendfile   on;
    tcp_nopush on;
    tcp_nodelay on;
#   server_tokens off;
    keepalive_timeout  60s;

    server_names_hash_bucket_size  128;
    client_header_buffer_size      32k;
    large_client_header_buffers  4 32k;
    client_max_body_size           50m;

    open_file_cache max=65536  inactive=60s;
    open_file_cache_valid      80s;
    open_file_cache_min_uses   1;

    fastcgi_connect_timeout        600;
    fastcgi_send_timeout           600;
    fastcgi_read_timeout           600;
    fastcgi_buffer_size            64k;
    fastcgi_buffers              4 64k;
    fastcgi_busy_buffers_size     128k;
    fastcgi_temp_file_write_size  256k;
    fastcgi_intercept_errors        on;

    gzip                            on;
    gzip_min_length                 1k;
    gzip_buffers                 4 16k;
    gzip_http_version              1.1;
    gzip_comp_level                  2;
    gzip_types                    text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
    gzip_vary                       on;
    gzip_proxied                   expired no-cache no-store private auth;
    gzip_disable                   "MSIE [1-6]\.";

    include /usr/local/nginx/vhost/*.conf;
}

本域名配置文件

server {
        listen          80;
        server_name     blog.rj-bai.com;

        include /usr/local/nginx/vhost/extend/ban_ip.conf;
        include /usr/local/nginx/vhost/extend/extend.location.conf;

        rewrite ^/(.*)$ https://blog.rj-bai.com/$1 permanent;
    }

server {
        listen              443 ssl http2;
        ssl_certificate     /usr/local/nginx/certs/blog.rj-bai.com.crt;
        ssl_certificate_key /usr/local/nginx/certs/blog.rj-bai.com.key;

        include /usr/local/nginx/vhost/extend/ssl;
        include /usr/local/nginx/vhost/extend/*.conf;

        server_name     blog.rj-bai.com;
        root            /var/www/html/blog.rj-bai.com;
        index           index.php index.html index.htm ;

        location ~ .*\.php(\/.*)*$ {
        include fastcgi.conf;
        fastcgi_pass  phpfpm:9000;
        include /usr/local/nginx/vhost/extend/extend.location.conf;
        }

        error_page 403 =200 /Page/403.html;
        error_page 404 /Page/404.html;
        error_page 500 =200 /Page/500.html;
        error_page 502 =200 /Page/502.html;
        error_page 503 =200 /Page/503.html;
        error_page 504 =200 /Page/504.html;

        add_header Strict-Transport-Security "max-age=31536000";

        location ~ .*\.(html)$ {
        root  /var/www/html/blog.rj-bai.com;
        add_header Cache-Control no-store;
        }

        access_log logs/blog.rj-bai.com.log main;
    }

引入配置文件内容

ban_ip.conf

搬掉了几个IP直接返回444,全部域名配置文件引入

    if ($remote_addr ~* "103.250.195.171|202.182.99.184|1.203.65.129|124.204.64.154|60.29.123.202") {
           return     444;
      }

extend.location.conf

对请求方法进行了限制。设置静态文件的缓存时间,这个没啥子卵用了,我的静态文件99%都是放在云存储的,还有就是限制了对某些文件的请求,个别域名引入。

        if ( $request_method !~ ^(GET|POST)$ ) {
        return 405;
        }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css|js|woff|woff2|ico)$
        {
        expires       7d;
        access_log   off;
        }

        location ~ .*\.(zip|gz|rar|7z|tar|bz2|sql)
        {
        return   403;
        }

ssl

对所有https域名进行引入,启用了tlsv1.3,禁用了对tlsv1的支持。

        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_session_timeout 1d;
        ssl_session_tickets off;
        ssl_session_cache shared:SSL:10m;
    
        ssl_prefer_server_ciphers on;
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_ciphers [TLS13+AESGCM+AES128|TLS13+AESGCM+AES256|TLS13+CHACHA20]:[EECDH+ECDSA+AESGCM+AES128|EECDH+ECDSA+CHACHA20]:EECDH+ECDSA+AESGCM+AES256:EECDH+ECDSA+AES128+SHA:EECDH+ECDSA+AES256+SHA:[EECDH+aRSA+AESGCM+AES128|EECDH+aRSA+CHACHA20]:EECDH+aRSA+AESGCM+AES256:EECDH+aRSA+AES128+SHA:EECDH+aRSA+AES256+SHA:RSA+AES128+SHA:RSA+AES256+SHA:RSA+3DES;

配置文件这块暂时就是这么多。

验证

既然开启了对Tlsv1.3的支持,现在验证一下,使用Chrome-71Firefox-64.0

Chrome-71

Firefox-64.0

myssl

最后使用myssl看一下。

一切正常,我没有启用对TLSv1的支持,后果就是IE11以下浏览器全部残废,除非手动开启了IE的tls1.1&tls1.2的支持,考虑兼容性的同学可以在ssl_protocols加上TLSv1即可,别的就没什么了。

错误页面

这里分享一个错误页面模板,服务器难免出现故障,主要就是数据库和PHP,nginx一般情况下不会出问题,如果数据库或PHP出现问题,一般就是抛500系列错误,nginx错误页面相信大家都见过,不是很友好,所以我自定义了一下,页面由狗头提供,自适应的哦,如下。

<!DOCTYPE html>
<html lang="zh_CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <link href="https://cdn.bootcss.com/bootstrap/4.0.0-beta.3/css/bootstrap.min.css" rel="stylesheet">
    <title>rj-bai 's Blog</title>

    <style type="text/css">
        html {
            position: relative;
            min-height: 100%;
        }

        body {
            margin-bottom: 72px;
            font-family: 'Merriweather', 'Open Sans', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft Yahei',  'WenQuanYi Micro Hei', 'Segoe UI Emoji', 'Segoe UI Symbol', Helvetica, Arial, sans-serif;
        }

        .navbar {
            padding: 16px 16px;
        }

        @supports (-webkit-backdrop-filter: brightness(150%) blur(30px)) or (backdrop-filter: brightness(150%) blur(30px)){
            .navbar.navbar-light.bg-light {
                background-color: rgba(255, 255, 255, 0.3) !important;
                border-bottom: 1px solid #fafafa;
                -webkit-backdrop-filter: brightness(150%) blur(30px);
                backdrop-filter: brightness(150%) blur(30px);
            }
        }

        .footer {
            position: absolute;
            bottom: 0;
            width: 100%;
            height: 72px;
            line-height: 72px;
            background-color: #f5f5f5;
        }
        .footer p {
            font-size: .75rem;
            margin-bottom: 0;
            font-family: Consolas, Menlo, Monaco, "lucida console", "Liberation Mono", "Courier New", "andale mono", 'PingFang SC', 'Hiragino Sans GB', 'Microsoft Yahei', 'WenQuanYi Micro Hei', monospace, sans-serif;
        }

        body > .container {
            padding: 92px 15px 10px;
        }

        .footer > .container {
            padding-right: 15px;
            padding-left: 15px;
        }
        .form-control.is-invalid ~ .text-muted {
            display: none;
        }
        .form-sli {
            max-width: 600px;
            margin-top: 16px;
        }
        .btn-round {
            padding: .5rem 3rem;
            border-radius: 2rem;
        }

        /*region Content*/
        .content {
            font-weight: 400;
            font-size: 1rem;
        }
        @media screen and (min-device-pixel-ratio: 1.5), screen and (-webkit-min-device-pixel-ratio: 1.5), screen and (-o-min-device-pixel-ratio: 1.5/1.5) {
            .content {
                font-weight: 300;
                font-size: 1rem;
            }
        }
        .content h5 {
            margin-top: 1rem;
        }
        .content strong {
            font-weight: 700;
        }
        .content input.form-control {
            font-size: 14px;
            line-height: 1.71;
        }
        .content .pagination .page-item .page-link {
            padding: .5rem 1.15rem;
        }
        /*endregion*/

        /*region Deploying*/
        .update-icon {
            margin-top: 40px;
            text-align: center;
        }
        .update-icon .icon {
            font-size: 140px;
        }
        .update-msg {
            margin-top: 40px;
            text-align: center;
        }
        /*endregion*/
    </style>
</head>
<body>
<main role="main" class="container">
    <div class="content">
        <div class="update-icon">
            <svg t="1533564893403" class="icon" style="width: 1em; height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1038"><path d="M731.276507 131.991684h-17.031185v155.409563h29.804574V174.569647l63.866944 112.8316h34.06237V131.991684H810.045738v108.573805l-61.738046-108.573805h-17.031185zM995.259875 149.022869c-14.902287-14.902287-31.933472-21.288981-55.351351-21.288981s-40.449064 6.386694-55.351351 21.288981-19.160083 34.06237-19.160084 59.609148c0 25.546778 6.386694 44.706861 19.160084 59.609147 12.773389 14.902287 31.933472 21.288981 55.351351 21.288982s40.449064-6.386694 55.351351-21.288982c12.773389-14.902287 19.160083-34.06237 19.160083-59.609147 0-23.417879-6.386694-44.706861-19.160083-59.609148z m-23.417879 100.058212c-6.386694 8.515593-17.031185 14.902287-31.933472 14.902287-12.773389 0-23.417879-4.257796-31.933472-14.902287-6.386694-8.515593-10.644491-23.417879-10.644491-40.449064 0-17.031185 4.257796-29.804574 10.644491-40.449065 8.515593-10.644491 17.031185-14.902287 31.933472-14.902287 12.773389 0 23.417879 4.257796 31.933472 14.902287 8.515593 10.644491 10.644491 23.417879 10.64449 40.449065 0 17.031185-4.257796 31.933472-10.64449 40.449064zM337.430353 387.459459C275.692308 468.357588 107.509356 459.841996 105.380457 459.841996c-8.515593 0-14.902287 6.386694-17.031185 14.902287 0 8.515593 6.386694 14.902287 14.902287 17.031185h21.288982c51.093555 0 178.827443-8.515593 236.307692-85.155925 4.257796-6.386694 4.257796-17.031185-4.257796-21.288982-4.257796-6.386694-14.902287-6.386694-19.160084 2.128898zM622.702703 387.459459c-4.257796-6.386694-14.902287-8.515593-21.288982-4.257796-6.386694 4.257796-8.515593 14.902287-4.257796 21.288981 57.480249 76.640333 183.085239 85.155925 236.307692 85.155926h21.288982c8.515593 0 14.902287-8.515593 14.902287-17.031185s-8.515593-14.902287-17.031185-14.902287c-2.128898 2.128898-170.31185 12.773389-229.920998-70.253639zM375.75052 344.881497c-2.128898-8.515593-10.644491-14.902287-17.031185-12.773389-19.160083 4.257796-40.449064 0-51.093555-6.386694-6.386694-4.257796-17.031185-2.128898-21.288982 4.257796-4.257796 6.386694-2.128898 17.031185 4.257797 21.288981 12.773389 6.386694 31.933472 10.644491 48.964657 10.644491 6.386694 0 14.902287 0 21.288981-2.128898 10.644491 2.128898 14.902287-6.386694 14.902287-14.902287zM663.151767 355.525988c8.515593-4.257796 10.644491-12.773389 6.386695-21.288982s-12.773389-10.644491-21.288982-6.386694c-17.031185 8.515593-38.320166 12.773389-48.964657 10.64449-8.515593-2.128898-17.031185 4.257796-19.160083 10.644491-2.128898 8.515593 2.128898 17.031185 10.644491 19.160083 4.257796 2.128898 10.644491 2.128898 14.902287 2.128898 19.160083 0 40.449064-4.257796 57.480249-14.902286zM688.698545 610.993763c-4.257796-6.386694-14.902287-8.515593-21.288982-2.128898 0 0-83.027027 63.866944-191.600831 63.866944-106.444906 0-166.054054-61.738046-166.054054-61.738046-6.386694-6.386694-14.902287-6.386694-21.288982 0-6.386694 6.386694-6.386694 14.902287 0 21.288981 2.128898 2.128898 68.12474 72.382536 189.471934 72.382537 119.218295 0 206.503119-68.12474 210.760915-70.253639 4.257796-8.515593 4.257796-17.031185 0-23.417879z" p-id="1039"></path><path d="M937.779626 317.205821c-2.128898-8.515593-10.644491-12.773389-19.160083-8.515592-8.515593 2.128898-12.773389 12.773389-8.515593 19.160083 17.031185 48.964657 25.546778 97.929314 25.546778 151.151767 0 123.476091-51.093555 242.694387-142.636175 327.850312-38.320166 4.257796-80.898129 17.031185-125.60499 48.964657-136.24948 95.800416-114.960499 149.022869-110.702702 159.667359 2.128898 6.386694 8.515593 8.515593 14.902287 8.515593 2.128898 0 4.257796 0 6.386694-2.128898 8.515593-4.257796 10.644491-12.773389 6.386694-21.288981 0 0-12.773389-40.449064 100.058212-121.347194 87.284823-61.738046 168.182952-48.964657 189.471934-23.417879 2.128898 2.128898 10.644491 12.773389-2.128898 27.675675-68.12474 19.160083-108.573805 44.706861-119.218295 76.640333-8.515593 23.417879 2.128898 46.835759 8.515592 55.351351 6.386694 6.386694 14.902287 8.515593 21.288981 2.128899 6.386694-4.257796 8.515593-14.902287 2.128898-21.288982 0 0-8.515593-10.644491-4.257796-25.546777 4.257796-12.773389 23.417879-38.320166 102.18711-57.48025 2.128898 0 4.257796-2.128898 6.386695-4.257796 21.288981-23.417879 25.546778-51.093555 6.386694-72.382536-12.773389-14.902287-34.06237-25.546778-61.738046-29.804574 83.027027-89.413721 129.862786-206.503119 129.862786-327.850312 2.128898-55.351351-6.386694-110.702703-25.546777-161.796258zM333.172557 853.68815c-53.222453-38.320166-108.573805-51.093555-151.151767-48.964657-89.413721-85.155925-140.507277-202.245322-140.507276-325.721414 0-246.952183 200.116424-447.068607 447.068607-447.068607 91.54262 0 178.827443 27.675676 253.338877 78.769231 6.386694 4.257796 17.031185 2.128898 21.288981-4.257797 4.257796-6.386694 2.128898-17.031185-4.257796-21.288981-80.898129-55.351351-174.569647-85.155925-272.498961-85.155925C224.598753 0 9.580042 215.018711 9.580042 479.002079c0 123.476091 48.964657 242.694387 134.120582 332.108108-19.160083 6.386694-31.933472 14.902287-42.577963 25.546778-19.160083 21.288981-17.031185 48.964657 6.386695 72.382536 2.128898 2.128898 4.257796 4.257796 6.386694 4.257796 76.640333 19.160083 95.800416 44.706861 102.18711 57.48025 4.257796 14.902287-4.257796 25.546778-4.257796 25.546777-4.257796 6.386694-4.257796 17.031185 2.128898 21.288982 6.386694 6.386694 17.031185 4.257796 21.288981-2.128899 6.386694-8.515593 17.031185-29.804574 8.515593-55.351351-8.515593-31.933472-48.964657-59.609148-114.960499-76.640333-12.773389-14.902287-4.257796-25.546778-2.128898-27.675675 21.288981-23.417879 102.18711-38.320166 189.471933 23.417879 112.831601 78.769231 100.058212 119.218295 102.18711 119.218295-4.257796 8.515593-2.128898 17.031185 6.386695 21.288982 0 2.128898 2.128898 2.128898 4.257796 2.128898 6.386694 0 10.644491-2.128898 12.773389-8.515593 6.386694-10.644491 25.546778-63.866944-108.573805-159.667359z" p-id="1040"></path></svg>
        </div>
        <div class="update-msg">
            <h3>HTTP 502</h3>
            <p>一首凉凉送给服务器,请过几分钟再试。<br>如果长时间未恢复,请<a href="http://wpa.qq.com/msgrd?v=3&uin=your@qq&site=qq&menu=yes">联系我。</a></p>
        </div>
    </div>
</main>
<footer class="footer">
    <div class="container">
        <p class="text-muted text-center">rj-bai 's Blog | Copyright © 2018</p>
    </div>

预览效果如下。

暂时就是这样,随时可能更新。

最后编辑于: 2019 年 10 月 25 日
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码