Skip to content
李小明 edited this page Jun 5, 2020 · 9 revisions

静态压缩

编译启用并配置 gzip_static 参考 , 文件使用gzip命令压缩成gz后缀格式.

压缩命令:

$ gzip --best lilu.wasm

注意

代理使用域名时

小心host not found in upstream错误导致nginx无法启动, 特别是系统重启时很容易出问题. 原因就是nginx会检查域名, 一旦解析速度慢点就报错了. 好像没有很好的解决办法, 最好不用域名.

WebSocket代理奇怪问题

按照文档配置WebSocket代理后, 偶尔遇到连接失去响应问题. 经过测试发现这个问题很奇怪, 并不是消息大小引发. 例如netty后端返回如下数据:

    StringBuilder sb = new StringBuilder();
    int i = 0;
    while (i < 1000000) {
      i++;
      sb.append("字");
      sb.append(i);
    }

ctx.writeAndFlush(
    new TextWebSocketFrame(sb.toString())
);

此时Chrome上没有任何响应. 起初以为是Chrome问题,但去除nginx代理后正常. 如果去掉 sb.append(i); ,就算返回一千万个"字"也是正常的...

潜规则

proxy_pass时,nginx会剔除所有名称中含下划线的Header.所以如果你希望Header能被传递到最终服务中,使用X-a-b形式的名称作为Header名.

默认端口http(80)自动跳转https(443)

对域名及IP均有效.

http
{
  server                       
  {                                                           
    listen 80;
    return 301 https://$host$request_uri;
  }                                     

  server                                                      
  {                                                           
    listen 443 ssl;                                        
    ssl on;                          
    ssl_session_cache shared:SSL:15m;
    ssl_session_timeout 15m;   
    ssl_certificate /path.crt;
    ssl_certificate_key /path.key; 
    ssl_protocols TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!MD5;    
                               
    root /web;                      
    location / {                         
      index index.html;   
    }
  }
}

特殊端口(比如444)http自动跳转https

此方法使用域名时对默认端口没有作用.

http
{
  server
  {
    listen 444 ssl;
    error_page 497 https://$host:444$request_uri;
    ssl on;                          
    ssl_session_cache shared:SSL:15m;
    ssl_session_timeout 15m;   
    ssl_certificate /path.crt;
    ssl_certificate_key /path.key; 
    ssl_protocols TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!MD5; 

    root /path;
    location / {
      index index.html;
    }
  }
}