摘要:官網(wǎng)全站實踐正式來襲也迎來自己的一個里程碑?dāng)?shù)正式突破官網(wǎng)作為項目組服務(wù)開發(fā)者們的重要渠道也迎來了自己的一次重大更新重構(gòu)升級到全站實現(xiàn)本篇先介紹官網(wǎng)全站實踐先來一張官網(wǎng)效果圖鎮(zhèn)樓靜態(tài)資源由托管開啟業(yè)務(wù)代碼交由執(zhí)行設(shè)置使用協(xié)議要實現(xiàn)非常簡單
date: 2018-3-8 13:50:03
title: Swoft| Swoft官網(wǎng)全站 HTTP2 實踐
Swoft1.0正式來襲, Swoft 也迎來自己的一個里程碑, star數(shù)正式突破 1k. Swoft官網(wǎng)作為項目組服務(wù)開發(fā)者們的重要渠道, 也迎來了自己的一次重大更新:
重構(gòu), 升級到 Swoft1.0
全站實現(xiàn)HTTP2
本篇先介紹 Swoft官網(wǎng)全站 HTTP2 實踐
先來一張 Swoft 官網(wǎng) 效果圖鎮(zhèn)樓:
靜態(tài)資源由 nginx 托管, 開啟 http2
業(yè)務(wù)代碼交由 Swoft 執(zhí)行, 設(shè)置 SwooleHttpServer 使用 HTTP2 協(xié)議
要實現(xiàn) HTTP2 非常簡單:
nginx 開啟 HTTP2
Swoft 開啟 HTTP2
nginx + Swoft 配合使用
福利: 域名證書申請 輕松指南
nginx 開啟 HTTP2首先查看 nginx 中是否開啟了 HTTP2 module(模塊)
# -V: show version and configure options then exit /var/www # nginx -V # 新版 nginx 默認(rèn)開啟了 HTTP2: --with-http_v2_module nginx version: nginx/1.13.8 built by gcc 6.2.1 20160822 (Alpine 6.2.1) built with OpenSSL 1.0.2n 7 Dec 2017 TLS SNI support enabled configure arguments: --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 --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-threads --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-stream_realip_module --with-stream_geoip_module=dynamic --with-http_slice_module --with-mail --with-mail_ssl_module --with-compat --with-file-aio --with-http_v2_module
nginx 開啟 HTTP2 配置示例, 可以在我的開源項目-docker中查看到示例:
# http2 server { listen 80; server_name www.daydaygo.top; # 將 HTTP 請求強制跳轉(zhuǎn)到 HTTPS rewrite ^(.*)$ https://${server_name}$1 permanent; } server { # 開啟 HTTP2 listen 443 ssl http2 default_server; server_name www.daydaygo.top; # 證書極簡設(shè)置 ssl on; ssl_certificate daydaygo.top.crt; ssl_certificate_key daydaygo.top.key; root /var/www/https_test; index index.php index.html; location / {} location ~ .php$ { fastcgi_pass fpm:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }Swoft 開啟 HTTP2
Swoole 開啟 HTTP2, 可以參考 Swoft 提供的 Dockerfile
# Debian系Linux apt-get install -y libssl-dev libnghttp2-dev # Swoole 添加編譯參數(shù) ./configure --enable-async-redis --enable-mysqlnd --enable-coroutine --enable-openssl --enable-http2
Swoft 配置中開啟 HTTP2, 參考 .env.example 文件
# 默認(rèn)配置 OPEN_HTTP2_PROTOCOL=false SSL_CERT_FILE=/path/to/ssl_cert_file SSL_KEY_FILE=/path/to/ssl_key_file # 開啟 HTTP2: 這里是將證書放到項目 resource/ 目錄下 OPEN_HTTP2_PROTOCOL=true SSL_CERT_FILE=@res/ssl/ssl_cert_file SSL_KEY_FILE=@res/ssl/ssl_key_filenginx 配合 Swoft 使用
nginx 配合 Swoft 使用, 類似 nginx+fpm 配置即可, 代碼示例可以參考 我的開源項目-docker
# swoft-site server { listen 80; server_name swoft.daydaygo.top; # 將 HTTP 請求強制跳轉(zhuǎn)到 HTTPS rewrite ^(.*)$ https://${server_name}$1 permanent; } server { # 開啟 HTTP2 listen 443 ssl http2; server_name swoft.daydaygo.top; # 證書極簡配置 ssl on; ssl_certificate 1_swoft.daydaygo.top_bundle.crt; ssl_certificate_key 2_swoft.daydaygo.top.key; root /var/www/swoole/swoft-offcial-site/public; index index.php index.html; error_log /var/log/nginx/swoft-site.error.log; access_log /var/log/nginx/swoft-site.access.log; # nginx 轉(zhuǎn)發(fā)請求給 swoft location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Connection "keep-alive"; proxy_pass https://swoft:9501; } location ~ .php(.*)$ { proxy_pass https://swoft:9501; } # nginx 托管靜態(tài)文件 location ~* .(js|map|css|png|jpg|jpeg|gif|ico|ttf|woff2|woff)$ { expires max; } }福利: 域名證書申請 輕松指南
先確認(rèn)你知道關(guān)于域名的幾個基礎(chǔ)知識:
為什么用域名?
什么是子域名?
為什么域名要備案?
什么是域名證書?
如果這些都不熟悉, 建議申請一個域名體驗一下.
域名證書分為 2 種: 單域名證書 泛域名證書, 區(qū)別來自于 什么是子域名. 比如我擁有域名 .daydaygo.top, 那么我可以設(shè)置任意子域名, 比如 www.daydaygo.top, test.www.daydaygo.top. 如果是單域名證書, 那么我每一個子域名都需要一個證書, 泛域名證書則可以對我所有的子域名生效.
域名證書由相關(guān)機構(gòu)發(fā)放, 一般需要花錢購買. 既然是 福利, 這里介紹 2 個免費好用的途徑:
動動鼠標(biāo), 證書到手, 騰訊云-申請免費單域名證書
終于等到免費泛域名證書, Let"s Encrypt 泛域名證書
單域名證書實踐騰訊云-申請免費單域名證書: https://console.qcloud.com/ssl
全程只需要動動鼠標(biāo)即可:
到騰訊云官網(wǎng)申請
配置域名解析驗證域名所有權(quán)
然后下載證書, 配置到 nginx 中即可. 詳細(xì)教程請參考騰訊云官方文檔.
不過要注意:
證書有效期 1 年
同一域名最多只能申請 20 個證書
通配符域名證書實踐Let"s Encrypt 終于支持通配符證書了: https://www.jianshu.com/p/c5c...
Let"s Encrypt 在免費域名證書領(lǐng)域算是 家喻戶曉, 現(xiàn)在終于支持 通配符證書 了. 不過按照上面 blog 的教程, 很是一番折騰. 雖然一波三折, 但是得益于自己使用 docker 作為開發(fā)環(huán)境, 在嘗試各種解決方案時, 都沒有太大阻礙.
這里記錄下來最終成功使用的一種方式:
來自官網(wǎng)的教程: ACME v2 Production Environment & Wildcards: Remember: You must use an ACME v2 compatible client to access this endpoint
ACME v2 Compatible Clients: 結(jié)合上面的 blog, 選擇 certbot
在 certbot 官網(wǎng), 選擇 nginx+centos7 環(huán)境, 出現(xiàn)教程
使用自己的 docker 開發(fā)環(huán)境 - centos 進(jìn)行實踐
# 安裝 certbot yum install certbot-nginx # 稍微修改教程中的命令 certbot certonly -d *.daydaygo.top --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory
之后一路確認(rèn), 最后添加 配置域名解析驗證域名所有權(quán), 大功告成!
[root@e6be50c34c81 www]# ll /etc/letsencrypt/live/daydaygo.top/ total 4 -rw-r--r-- 1 root root 543 Mar 16 16:48 README lrwxrwxrwx 1 root root 36 Mar 16 16:48 cert.pem -> ../../archive/daydaygo.top/cert1.pem lrwxrwxrwx 1 root root 37 Mar 16 16:48 chain.pem -> ../../archive/daydaygo.top/chain1.pem lrwxrwxrwx 1 root root 41 Mar 16 16:48 fullchain.pem -> ../../archive/daydaygo.top/fullchain1.pem lrwxrwxrwx 1 root root 39 Mar 16 16:48 privkey.pem -> ../../archive/daydaygo.top/privkey1.pem
查看 README, 所得證書與 nginx 配置對應(yīng)關(guān)系如下:
ssl_certificate -> fullchain1.pem ssl_certificate_key -> privkey1.pem
certbot 還可以配置 crontab 來 自動更新證書, 按照 官方教程 配置即可
折騰的過程頗為一波三折, 簡單記錄一下, 希望能給大家?guī)椭?
我本人喜歡使用 alpine linux, 所以直接使用自己的 docker 開發(fā)環(huán)境 - alpine 安裝 certbot: apk add certbot, 然而執(zhí)行后報錯不支持泛域名
百度之, 出現(xiàn)的第一篇文章是 Let"s Encrypt 官方新聞, 發(fā)現(xiàn)里面的 url 和教程的 url 不同, 沒細(xì)看下 以為是 url 錯誤, 其實看到的這篇新聞比較早, url 是預(yù)發(fā)布時的 url
繼續(xù)看 Let"s Encrypt 官方新聞, 評論中看到正式 url 放出的新聞, 這就是上面教程中提到的鏈接, 從而知道使用的 certbot 版本不對: Certbot (Certbot >= 0.22.0)
另一條錯誤的嘗試是使用 certbot-auto, 根據(jù)報錯發(fā)現(xiàn)運行需要依賴 python + gugeas, 于是又嘗試使用自己的 docker 開發(fā)環(huán)境 - python 來嘗試, 但 pip install python-gugeas 時一直報錯, 解決軟件依賴無果
寫在最后對技術(shù)保持好奇并勇于嘗試新技術(shù), 實在是一件頗為有趣的事.
薦書: 圖靈社區(qū) - HTTP/2基礎(chǔ)教程不要因為環(huán)境, 限制了你的能力, 投入 docker 的懷抱吧
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28424.html
摘要:官方在文檔沒有提供完整的但我們還是可以在單元測試中找得到的用法。解決的問題是分散在引用各處的橫切關(guān)注點。橫切關(guān)注點指的是分布于應(yīng)用中多處的功能,譬如日志,事務(wù)和安全。通過將真正執(zhí)行操作的對象委托給實現(xiàn)了能提供許多功能。源碼剖析系列目錄 作者:bromine鏈接:https://www.jianshu.com/p/e13...來源:簡書著作權(quán)歸作者所有,本文已獲得作者授權(quán)轉(zhuǎn)載,并對原文進(jìn)...
摘要:易用穩(wěn)定,本次想通過對的學(xué)習(xí)和個人解析,吸收框架的思想和設(shè)計知識,加強自己對的認(rèn)知和理解。當(dāng)然,筆者能力水平有限,后續(xù)的文章如有錯誤,還請指出和諒解。目錄如下后續(xù)添加文章都會記錄在此服務(wù)啟動過程以及主體設(shè)計流程源碼解析 前言 swoole是什么?官網(wǎng)的原話介紹是這樣的: Swoole 使用純 C 語言編寫,提供了 PHP 語言的異步多線程服務(wù)器,異步 TCP/UDP 網(wǎng)絡(luò)客戶端,異步 ...
摘要:官網(wǎng)源碼解讀號外號外歡迎大家我們開發(fā)組定了一個就線下聚一次的小目標(biāo)里面的框架算是非常重的了這里的重先不具體到性能層面主要是框架的設(shè)計思想和框架集成的服務(wù)讓框架可以既可以快速解決很多問題又可以輕松擴(kuò)展中的框架有在應(yīng)該無出其右了這次解讀的源碼 官網(wǎng): https://www.swoft.org/源碼解讀: http://naotu.baidu.com/file/8... 號外號外, 歡迎大...
摘要:歷時年多緊鑼密鼓的開發(fā),以及愉快而忙碌的春節(jié)假期,期間數(shù)從到快破,碼云首頁推薦,作者和社區(qū)的大力支持,正式版終于要和大家見面。此次更新新增了大量特性在易用性代碼復(fù)用性能方面都有所提升。可以用于構(gòu)建高性能的系統(tǒng)中間件基礎(chǔ)服務(wù)等等。 歷時 1 年多緊鑼密鼓的開發(fā),以及愉快而忙碌的春節(jié)假期,期間 github star 數(shù)從 500 到快破 1k,碼云首頁推薦,Swoole作者 Rango ...
摘要:發(fā)布,基于的云原生協(xié)程框架是首個基于原生協(xié)程的框架,從開發(fā)到發(fā)布據(jù)今已有年多。發(fā)布以來,已有大量的開發(fā)人員和企業(yè)使用,得到了大家的認(rèn)可。從去年月份開始,將近半年的時間從零開始,底層吸取之前經(jīng)驗,基于方式完全重新構(gòu)建。 Swoft 2 Beta 發(fā)布,基于 Swoole 的云原生協(xié)程框架 Swoft 是首個基于 Swoole 原生協(xié)程的框架,從開發(fā)到發(fā)布據(jù)今已有2年多。 1.x 發(fā)布以來...
閱讀 2788·2021-10-11 11:08
閱讀 1505·2021-09-30 09:48
閱讀 1066·2021-09-22 15:29
閱讀 1055·2019-08-30 15:54
閱讀 993·2019-08-29 15:19
閱讀 546·2019-08-29 13:12
閱讀 3179·2019-08-26 13:53
閱讀 983·2019-08-26 13:28