组建一个简易的自用CDN

CDN是什么 A content delivery network or content distribution network (CDN) is a geographically distributed network of proxy servers and their data centers. The goal is to distribute service spatially relative to end-users to provide high availability and high performance. CDNs serve a large portion of the Internet content today, including web objects (text, graphics and scripts), downloadable objects (media files, software, documents), applications (e-commerce, portals), live streaming media, on-demand streaming media, and social media sites. »

在Nginx中配置Google-Analytics

原因 在Nginx端配置Google-Analytics和在HTML中加载Google-Analytics有几个显著的有点, 杜绝用户到Google Analytics之间的网络问题,特别是国内(尽管已经解析到Google在北京的服务器) 防止adblock这样的软件屏蔽 提升页面加载速度 配置方法 nginx 配置 server 块内加入以下内容 userid on; userid_name cid; userid_domain moonagic.com; userid_path /; userid_expires max; if ($http_accept_language ~* '^(.+?),') { set $first_language $1; } location @tracker { resolver 8.8.8.8 ipv6=off; # 需要设定dns,不然无法解析.不支持ipv6的机器需要关闭ipv6 internal; proxy_method GET; proxy_pass https://www.google-analytics.com/collect?v=1&tid=UA-*******-*&$uid_set$uid_got&t=pageview&dh=$host&dp=$request_uri&uip=$remote_addr&dr=$http_referer&ul=$first_language&z=$msec; proxy_set_header User-Agent $http_user_agent; proxy_pass_request_headers off; proxy_pass_request_body off; } 并在指向root或者bypass的时候添加 location / { root /content/path/; post_action @tracker; ... } location / { proxy_pass http://127.0.0.1:8081; post_action @tracker; . »

Author image 月杪 on #Nginx,

Nginx 1.13.9 HTTP/2 server push 介绍

2018年2月20日发布的NGINX 1.13.9开始支持HTTP/2服务器推送功能. HTTP/2规范中定义的服务器推送允许服务器抢先将资源推送到远程客户端,预计客户端可能很快会请求这些资源.通过这样做,您可以在页面加载操作中将RTT(往返时间 - 请求和响应所需的时间)减少一个RTT或更多,从而为用户提供更快的响应. 配置HTTP/2 server push server { # Ensure that HTTP/2 is enabled for the server listen 443 ssl http2; ssl_certificate ssl/certificate.pem; ssl_certificate_key ssl/key.pem; root /var/www/html; # whenever a client requests demo.html, also push # /style.css, /image1.jpg and /image2.jpg location = /demo.html { http2_push /style.css; http2_push /image1.jpg; http2_push /image2.jpg; } } 验证HTTP/2 server push 使用开发人员工具进行验证(Google Chrome) 使用命令行客户端进行验证(nghttp) # *表示服务器推送的资源 $ nghttp -ans https://example. »

Author image 月杪 on #Nginx,

使用LetsEncrypt签发多域名ECC证书

克隆certbot cd /opt git clone https://github.com/certbot/certbot.git 配置openssl.cnf cp /etc/ssl/openssl.cnf /opt/certbot/ vi openssl.cnf # 在[ v3_req ]标签下添加 subjectAltName = @alt_names [ alt_names ] DNS.1 = example.com DNS.2 = www.example.com DNS.3 = sub.example.com ... 生成CSR文件 openssl ecparam -genkey -name secp384r1 > ec.key openssl req -new -sha384 -key ec.key -out ec-der.csr -outform der -config openssl.cnf 通过LetsEncrypt签发证书 ./certbot-auto certonly -a webroot --webroot-path=/var/www/html -d example.com -d www.example.com ... --csr ec-der.csr 通过此方法生成的证书将在certbot工具目录下生成 0000_cert.pem # crt.pem 0000_chain.pem # chain. »

为Nginx添加TLS1.3支持

Nginx主线分支从1.13.0版本开始支持TLS1.3,只需要在编译的时候选择使用OpenSSL支持TLS1.3的分支进行编译即可. 使用对应的OpenSSL分支进行编译 # OpenSSL对TLS1.3的支持已经到了draft19,不过Chrome和Firefox对TLS1.3的支持还在draft18 git clone -b tls1.3-draft-18 --single-branch https://github.com/openssl/openssl.git openssl 然后在预编译的时候选择该分支,并添加额外选项--with-openssl-opt=enable-tls1_3. 其他操作参考手动编译Nginx支持ALPN,以在最新版Chrome中支持HTTP/2. 浏览器设定 Firefox目前最新版已经默认开启TLS1.3支持(如果不是新安装的Firefox那么可能依然需要检查about:config中的对应设定). Chrome需要在chrome:flags中将TLS 1.3选项调整为Enabled (Draft) 测试 Firefox: Chrome: 已知问题 由于nginx-ct目前并不支持TLS1.3,所以如果Certificate Transparency是靠该方案实现的话那么开启TLS1.3后无法继续显示Certificate Transparency信息. 该问题在Letsencrypt自带CT信息后得到一定缓解,某些商业证书也不需要nginx-ct来实现CT信息. 更新(September,12,2018) TLS1.3最终定稿rfc8446,Openssl-1.1.1在几个小时前也正式发布支持. 目前Firefox Nightly版已经支持,Chrome从70开始也支持了. »

手动编译Nginx支持ALPN,以在最新版Chrome中支持HTTP/2

安装一些必要的工具 apt-get install build-essential libpcre3 libpcre3-dev zlib1g-dev 下载需要的源代码 # Openssl版本需要1.0.2才能支持ALPN,而后者是新版Chrome支持HTTP/2的必要条件 wget -O openssl.zip -c https://github.com/openssl/openssl/archive/OpenSSL_1_1_1d.tar.gz unzip openssl.zip mv openssl-OpenSSL_1_1_1c/ openssl wget -O nginx-ct.zip -c https://github.com/grahamedgecombe/nginx-ct/archive/v1.3.2.zip unzip nginx-ct.zip # 获取Nginx源码 wget -c https://nginx.org/download/nginx-1.19.6.tar.gz tar zxf nginx-1.19.6.tar.gz # 编译 cd nginx-1.19.6/ # 编译参数参考了官方源的Nginx ./configure \ --prefix=/etc/nginx \ --sbin-path=/usr/sbin/nginx \ --modules-path=/usr/lib/nginx/modules \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/run/nginx.lock \ --http-client-body-temp-path=/var/cache/nginx/client_temp \ --http-proxy-temp-path=/var/cache/nginx/proxy_temp \ --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \ --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \ --http-scgi-temp-path=/var/cache/nginx/scgi_temp \ --add-module=. »

Author image 月杪 on #Nginx,

Setup LetsEncrypt on Debian

Install LetsEncrypt Client git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt Obtain a Certificate Inside the nginx config, add this location block: location ~ /\.well-known/acme-challenge { root /var/www/html; } Reload Nginx: systemctl reload nginx Generate Certificate: cd /opt/letsencrypt ./letsencrypt-auto certonly -a webroot \ --webroot-path=/var/www/html \ -d example.com \ -d www.example.com »