[原创]本人之前写的一些关于 Nginx 配置的文章 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qgy18
V2EX    NGINX

[原创]本人之前写的一些关于 Nginx 配置的文章

  •  6
     
  •   qgy18 2015-08-21 14:13:50 +08:00 6460 次点击
    这是一个创建于 3776 天前的主题,其中的信息可能已经有所发展或是发生改变。
    本人对 HTTP 协议和 Nginx 比较有兴趣,下面是博客的几篇关于 Nginx 的文章,欢迎交流探讨。

    另外,由于我的 Linode Tokyo 持续上不去,刚把博客迁回国内,正在关站备案中,请用 OSX 、 Android 、 iOS 、 Linux 访问(或者模拟 UA 为各大 Spider )。

    本博客 Nginx 配置之安全篇
    https://www.imququ.com/post/my-nginx-conf-for-security.html

    本博客 Nginx 配置之性能篇
    https://www.imququ.com/post/my-nginx-conf-for-wpo.html

    Nginx 开始支持 HTTP/2 了
    https://www.imququ.com/post/nginx-http2-patch.html
    第 1 条附言    2015-08-21 23:38:11 +08:00
    刚 update 了下代码,针对 referer 中包含「 v2ex.com 或各大搜索引擎」的情况,也不会返回 404 。

    等 20 天后看备案结果,再来跟大家分享心得。
    65 条回复    2016-12-13 08:42:14 +08:00
    TakanashiAzusa
        1
    TakanashiAzusa  
       2015-08-21 14:16:28 +08:00
    其实我比较好奇关站是因为备案要求还是- -因为模拟 UA 就可以开好像和没关没差啊。。
    kappa
        2
    kappa  
       2015-08-21 14:17:09 +08:00
    @TakanashiAzusa 楼主的意思是 zf 傻逼只会用 IE 。。
    qgy18
        3
    qgy18  
    OP
       2015-08-21 14:18:26 +08:00
    @TakanashiAzusa 现在提交管局审核中,我猜想他们肯定都是用的 windows ,我针对 windows 直接返回了 404 。

    另外,关站的要求是停止 web 服务,可以做域名解析,因为不只是 web 服务会用到域名。
    yylzcom
        4
    yylzcom  
       2015-08-21 14:18:40 +08:00
    @kappa 只会用 windows ……
    zhicheng
        5
    zhicheng/strong>  
       2015-08-21 14:18:53 +08:00
    欢迎使用 TextArea.com 哦。
    TakanashiAzusa
        6
    TakanashiAzusa  
       2015-08-21 14:19:19 +08:00
    @qgy18 原来如此。。 3Q
    qgy18
        7
    qgy18  
    OP
       2015-08-21 14:19:36 +08:00
    @kappa 不一定哦,没准他们会用双核浏览器,那样也可能走 webkit 。所以为了保险, windows 一律 404.
    TakanashiAzusa
        8
    TakanashiAzusa  
       2015-08-21 14:19:43 +08:00
    @kappa 主要我就是不清楚关站是不是 ZF 要求,所以问下:)
    qgy18
        9
    qgy18  
    OP
       2015-08-21 14:21:49 +08:00
    @zhicheng 多谢, textarea.com 一直有留意,真心觉得挺好的。不过我喜欢折腾,最近写的这个基于 nodejs 的博客个人还是挺满意的。
    zhicheng
        10
    zhicheng  
       2015-08-21 14:23:12 +08:00
    @qgy18 多谢关注,共同努力吧,也欢迎提些建议
    qgy18
        11
    qgy18  
    OP
       2015-08-21 14:23:38 +08:00
    @TakanashiAzusa http://help.aliyun.com/knowledge_detail/5974591.html

    随手找了一个文档。

    据说可以不关,但是页面上不能有任何违规内容(具体什么是违规,不会告诉你),当然也不能有任何评论互动的地方。

    所以,一般都会推荐关站。
    kn007
        12
    kn007  
       2015-08-21 14:26:42 +08:00
    为毛我看到的一群 404
    qgy18
        13
    qgy18  
    OP
       2015-08-21 14:27:43 +08:00
    @kn007 哈哈,这样就对了。
    CodeDrift
        14
    CodeDrift  
       2015-08-21 14:34:42 +08:00
    机智的我 用了 chrome 选择 这个。然后就正常使用啦。
    不过感觉博主的网站很快呀!
    qgy18
        15
    qgy18  
    OP
       2015-08-21 14:42:41 +08:00
    @Anybfans 哈哈 你不要勾选 Device 下面那个 checkbox ,这样页面就不会被 resize 了。

    速度快一方面是国内网络好,另一方面前后端我都做了不少优化。
    inmyfree
        16
    inmyfree  
       2015-08-21 14:46:55 +08:00
    lz 的模板和我差不多。。。。哈哈,广告

    www.mk5i.com
    CodeDrift
        17
    CodeDrift  
       2015-08-21 14:47:59 +08:00
    @qgy18 resize 后 关闭移动模式 就可以正常阅读了。 不过仅仅指该页面
    qgy18
        18
    qgy18  
    OP
       2015-08-21 14:51:53 +08:00
    @Anybfans 嗯,你不要关闭移动模式,因为关闭了 UA 模拟就不生效了,你只要取消 Device 下面那个复选框就可以了。
    CodeDrift
        19
    CodeDrift  
       2015-08-21 14:53:17 +08:00
    @qgy18 机智
    zonghua
        20
    zonghua  
       2015-08-21 14:57:17 +08:00
    @qgy18 之前有响应优化的帖子提到了你的博客,原来页面都是 cdn 过来的。
    qgy18
        21
    qgy18  
    OP
       2015-08-21 14:59:18 +08:00 via iPhone
    @zonghua cdn ?并没有使用 cdn 呀。
    hcymk2
        22
    hcymk2  
       2015-08-21 15:00:50 +08:00
    全部 404 了。
    qgy18
        23
    qgy18  
    OP
       2015-08-21 15:07:00 +08:00 via iPhone
    @hcymk2 你看下正文的第二段,或者前面的评论
    blackeeper
        24
    blackeeper  
       2015-08-21 15:14:28 +08:00
    文章写得不错!
    horizon
        25
    horizon  
       2015-08-21 16:05:05 +08:00
    顶 ququ
    SkiTiSu
        26
    SkiTiSu  
       2015-08-21 17:00:28 +08:00
    @qgy18 我前几天在阿里云备案的时候已经允许不关站了,只要保证备案期间网站内容不要变动就行了
    ccbikai
        27
    ccbikai  
    PRO
       2015-08-21 17:09:19 +08:00
    我打开正常,一个同事打开 404 , 原来是 故意的
    hcymk2
        28
    hcymk2  
       2015-08-21 17:36:13 +08:00 via Android
    @qgy18
    User-Agent
    Mozilla/5.0 (X11; U; FreeBSD i386; de-CH; rv:1.9.2.8 ) Gecko/20100729 Firefox/3.6.8
    这个看不了。。。
    我再换个看下。
    Opera/9.80 (Android 4.0.4; Linux; Opera Mobi/ADR-1205181138; U; pl ) Presto/2.10.254 Version/12.00
    这个可以。
    Marfal
        29
    Marfal  
       2015-08-21 17:50:07 +08:00
    @Anybfans 这个是什么扩展呢?求教一下
    CodeDrift
        30
    CodeDrift  
       2015-08-21 17:53:16 +08:00
    @a33004407 这个不是扩展呀。 chrome 调试模式自带的。 你 f12 打开 左上角有个小手机。你点点看
    zonghua
        31
    zonghua  
       2015-08-21 17:54:33 +08:00
    @qgy18 域名解析到的 ip 是奇虎的
    virusdefender
        32
    virusdefender  
       2015-08-21 18:06:33 +08:00
    楼主的博客我看过好几次了,印象深刻,每次都是秒开
    foru17
        33
    foru17  
       2015-08-21 18:07:44 +08:00
    之前弄 nginx 的时候,发现了楼主博客,系列都学习了。
    virusdefender
        34
    virusdefender  
       2015-08-21 18:11:35 +08:00
    原来我就在你的服务器机房旁边啊
    qgy18
        35
    qgy18  
    OP
       2015-08-21 18:55:00 +08:00
    @hcymk2 我再把 FreeBSD 加到白名单里:)
    qgy18
        36
    qgy18  
    OP
       2015-08-21 18:58:06 +08:00
    @SkiTiSu 我也听说可以不关站了,但是一来现在身边还没有不关站的成功案例,二来我选在帝都备案,而帝都马上要月饼了。 so...
    Had
        37
    Had  
       2015-08-21 21:07:00 +08:00
    @qgy18 楼主,换个证书吧...
    Comodo 进入 SHA2 时期后,证书链就多了一级...
    建议考虑一下 RapidSSL (第一推荐)/AlphaSSL (便宜)或者上个 GeoTrust/GlobalSign/Digicert (贵)
    其实也可以尝试一下 ECC 证书,基本上以上几家贵的都有提供...
    qgy18
        38
    qgy18  
    OP
       2015-08-21 21:18:56 +08:00
    @Had 多一级确实有点不能忍,但是我这个证书截至 2016 年 10 月,现在换感觉有点浪费。

    要是天上能掉个证书下来就 happy 了。。
    simodorg
        39
    simodorg  
       2015-08-21 21:33:12 +08:00
    @Had
    @qgy18
    我用的也是 Comodo 诶,证书多一级会发生什么吗?会导致交换多一步,时间更慢吗?
    simodorg
        40
    simodorg  
       2015-08-21 21:33:37 +08:00
    之前 Gooogle 到这里,也来这学习过 nginx 。
    qgy18
        41
    qgy18  
    OP
       2015-08-21 21:44:42 +08:00
    @simodorg

    多一级意味着服务端发送的证书链就更大,建立 https 连接就更慢了。

    ---

    在给 Nginx 指定证书时,需要选择合适的证书链。因为浏览器在验证证书信任链时,会从站点证书开始,递归验证父证书,直至信任的根证书。这里涉及到两个问题: 1 )服务器证书是在握手期间发送的,由于 TCP 初始拥塞窗口的存在,如果证书太长很可能会产生额外的往返开销; 2 )如果服务端证书没包含中间证书,大部分浏览器可以正常工作,但会暂停验证并根据子证书指定的父证书 URL 自己获取中间证书。这个过程会产生额外的 DNS 解析、建立 TCP 连接等开销。

    所以,服务端证书链的最佳实践是包含 站点证书 和 中间证书 两级。根证书已经内置于各大浏览器内,完全没必要再包含。下图是本博客的证书链,服务端证书包含了「 www.imququ.com 」站点证书和「 Thawte DV SSL CA 」中间证书。另外我测过:如果不包含中间证书, Firefox 之外的主流浏览器都能正常完成验证, Firefox 似乎不会自己去获取中间证书。

    见: https://www.imququ.com/post/switch-to-https.html#toc-0
    dingyaguang117
        42
    dingyaguang117  
       2015-08-22 01:27:45 +08:00 via iPhone
    guoqiao
        43
    guoqiao  
       2015-08-22 09:51:24 +08:00   1
    @zhicheng 从你的回复中第一次知道了 TextArea.com, 简洁但不失考究, 非常不错.
    zhicheng
        44
    zhicheng  
       2015-08-22 10:56:13 +08:00
    @guoqiao 感谢,希望能给大家提供一个专心写作,分享内容的社区。
    wbsdty331
        45
    wbsdty331  
       2015-08-23 08:49:22 +08:00
    我的居然只有 B...貌似就出在加密方式
    qgy18
        46
    qgy18  
    OP
       2015-08-23 15:50:39 +08:00
    @Had 换成便宜的 RapidSSL 了,证书链少一级看着就是爽呀~
    Had
        47
    Had  
       2015-08-23 22:05:32 +08:00
    @qgy18 不知道向 RapidSSL 客服申请一下,能不能拿到 ECC 证书~
    ECC 证书的大小就又缩小了一个量级了。
    xiqingongzi
        48
    xiqingongzi  
       2015-08-23 23:14:03 +08:00
    学习了
    Soaper
        49
    Soaper  
       2015-08-24 01:36:28 +08:00
    马克
    qgy18
        50
    qgy18  
    OP
       2015-09-01 00:32:15 +08:00
    @Had RapidSSL DV 没办法拿到 ECC ,但是我发现同样便宜的 Comodo PositiveSSL 却可以方便的拿 ECC ,只要 CSR 是 ECC 就可以了。 https://www.imququ.com?ua=linux
    但是证书依然是四级,这一点郁闷。另外 windows xp 一律不支持 ECC ,也很头疼。
    Had
        51
    Had  
       2015-09-01 01:17:24 +08:00
    @qgy18
    所以就放弃 XP 用户吧。
    要不就掏点钱,上 GeoTrust or Digicert or GlobalSign ,然后去拿 ECC 。
    https://support.globalsign.com/customer/portal/articles/1995283-ecc-compatibility
    Had
        52
    Had  
       2015-09-01 01:22:25 +08:00
    @qgy18
    另外,用了 ECC 就可以在 Cipher Suites 里面去掉:
    TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA

    同时,现在的 ECC 证书链还是混合的证书链, GlobalSign 的 ECC Root Certs 前有这么个描述,当然实际我没有用过...
    https://support.globalsign.com/customer/portal/articles/1426602-globalsign-root-certificates

    我在向 Digicert 申请一个纯 ECC 的证书链及证书,但是他们的客服老是误解我,都 reissue 了好多次了,我都不好意思了...
    Had
        53
    Had  
       2015-09-01 01:53:11 +08:00
    @qgy18
    GeoTrust 的 ECC Root CA 测试页 https://ssltest42.ssl.symclab.com/ 两级!
    GlobalSign 256 https://2038r4.globalsign.com/
    GlobalSign 384 https://2038r5.globalsign.com/
    isCyan
        54
    isCyan  
       2015-09-03 08:59:18 +08:00
    楼主的阿里云带宽多大?还是启用了某些特殊技能?访问这么快!
    wujunze
        55
    wujunze  
       2016-03-18 16:49:37 +08:00
    博主网站备案成功没有?
    qgy18
        56
    qgy18  
    OP
       2016-03-18 18:10:20 +08:00
    chinaiy
        57
    chinaiy  
       2016-11-24 10:07:10 +08:00
    大大,看你博客配置完整篇一步一步操作,编译和安装 Nginx , make 的时候出现下面的错误,求助解决方法,谢谢

    cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I ../openssl/.openssl/include -I objs -I src/http -I src/http/modules -I src/http/v2 \
    -o objs/addon/src/ngx_http_brotli_filter_module.o \
    ../ngx_brotli/src/ngx_http_brotli_filter_module.c
    ../ngx_brotli/src/ngx_http_brotli_filter_module.c: In function ‘ ngx_http_brotli_body_filter ’:
    ../ngx_brotli/src/ngx_http_brotli_filter_module.c:272:9: error: ‘ BrotliEncoderInputBlockSize ’ is deprecated (declared at /usr/local/include/brotli/encode.h:87) [-Werror=deprecated-declarations]
    ctx->brotli_ring = BrotliEncoderInputBlockSize(ctx->encoder);
    ^
    ../ngx_brotli/src/ngx_http_brotli_filter_module.c: In function ‘ ngx_http_brotli_filter_add_data ’:
    ../ngx_brotli/src/ngx_http_brotli_filter_module.c:498:5: error: ‘ BrotliEncoderCopyInputToRingBuffer ’ is deprecated (declared at /usr/local/include/brotli/encode.h:95) [-Werror=deprecated-declarations]
    BrotliEncoderCopyInputToRingBuffer(ctx->encoder, size, b->pos);
    ^
    ../ngx_brotli/src/ngx_http_brotli_filter_module.c: In function ‘ ngx_http_brotli_filter_process ’:
    ../ngx_brotli/src/ngx_http_brotli_filter_module.c:534:5: error: ‘ BrotliEncoderWriteData ’ is deprecated (declared at /usr/local/include/brotli/encode.h:109) [-Werror=deprecated-declarations]
    if (!BrotliEncoderWriteData(ctx->encoder, ctx->last, ctx->flush, &size,
    ^
    cc1: all warnings being treated as errors
    make[1]: *** [objs/addon/src/ngx_http_brotli_filter_module.o] Error 1
    make[1]: Leaving directory `/root/nginx-1.11.5'
    make: *** [build] Error 2
    qgy18
        58
    qgy18  
    OP
       2016-11-24 17:04:38 +08:00 via iPhone
    @chinaiy 编译时加上这个试试呢?

    --with-cc-opt=-Wno-deprecated-declarations
    chinaiy
        59
    chinaiy  
       2016-11-25 08:41:58 +08:00
    @qgy18 嗯,加上就可以了,有个奇怪的问题请教下大大,我配置好了后使用谷歌和火狐都可以访问,但 360 浏览器(快速模式)却不可以访问,后来我去掉 server 中的 http2 fastopen=3 reuseport ,只保留 listen 443 ssl , 360 就可以访问,不知道这个是什么原因?
    chinaiy
        60
    chinaiy  
       2016-12-12 12:12:45 +08:00
    @qgy18 大大, Brotli 是不是又修改了,在阿里云的一台新服务器上按照 https://imququ.com/post/my-nginx-conf.html 这篇文章来设置,前面都没问题,到./configure --add-module=../ngx_brotli --add-module=../nginx-ct-1.3.1 --with-openssl=../openssl --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module 这里的时候就出行错误提示,加上--with-cc-opt=-Wno-deprecated-declarations 也是同样错误,错误提示:


    ./configure: error: Brotli library is missing from the ../ngx_brotli/deps/brotli directory.

    Please make sure that the git submodule has been checked out:

    cd ../ngx_brotli && git submodule update --init && cd /root/nginx-1.11.5
    qgy18
        61
    qgy18  
    OP
       2016-12-12 14:18:59 +08:00
    @chinaiy 有可能 我试试
    chinaiy
        62
    chinaiy  
       2016-12-12 18:40:08 +08:00
    @qgy18 大大出手,有咩有知道是什么原因了?
    qgy18
        63
    qgy18  
    OP
       2016-12-12 18:41:11 +08:00 via iPhone
    @chinaiy 今天各种开会,只有晚上能看了。
    qgy18
        64
    qgy18  
    OP
       2016-12-12 20:41:53 +08:00
    @chinaiy 特意在虚拟机装了一个纯净的 Ubuntu 16.04.1 LTS server 测试,发现这个问题特别容易解决。

    错误提示都告诉你要怎么做了。

    git clone https://github.com/google/ngx_brotli.git
    cd ngx_brotli

    git submodule update --init

    cd ../
    chinaiy
        65
    chinaiy  
       2016-12-13 08:42:14 +08:00
    @qgy18 第一次看这个错误直接在 nginx 目录下运行 git submodule update --init ,有点懵,汗,谢谢大大
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1222 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 17:38 PVG 01:38 LAX 09:38 JFK 12:38
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86