V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
qgy18
V2EX  ›  NGINX

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

  •  6
     
  •   qgy18 · 2015-08-21 14:13:50 +08:00 · 6085 次点击
    这是一个创建于 3385 天前的主题,其中的信息可能已经有所发展或是发生改变。
    本人对 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  
       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 哈哈,这样就对了。
    Anybfans
        14
    Anybfans  
       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
    Anybfans
        17
    Anybfans  
       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 下面那个复选框就可以了。
    Anybfans
        19
    Anybfans  
       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  
       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 这个是什么扩展呢?求教一下
    Anybfans
        30
    Anybfans  
       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   ·   实用小工具   ·   2461 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 16:00 · PVG 00:00 · LAX 08:00 · JFK 11:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.