部署支持HTTPS和HTTP2.0的镜像

一、前置需求

一台国外的服务器,系统为Ubuntu 14.04/15.10/16.04,且为全新系统

一个已经解析到你服务器的三级域名,不支持中文域名

二、安装初始化环境

以下脚本可以直接整个原样复制黏贴到SSH中运行

每一行最后的&&表示本行执行成功后继续执行下一行

  1. sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&
  2. sudo apt-get update &&
  3. sudo apt-get upgrade -y &&
  4. sudo apt-get dist-upgrade -y &&
  5. sudo apt-get install build-essential patch binutils make devscripts nano libtool libssl-dev libxml2 libxml2-dev software-properties-common python-software-properties dnsutils git wget curl python3 python3-pip iftop -y &&
  6. sudo python3 -m pip install -U flask requests cchardet fastcache

三、安装Apache2

由于ubuntu14.04和16.04自带的Apache2均不支持HTTP/2,所以需要安装不依赖ubuntu的最新版的Apache2

同样,下面的脚本也可以原样粘贴到SSH中运行

  1. LC_ALL=C.UTF-8 sudo add-apt-repository -y ppa:ondrej/apache2 &&
  2. sudo apt-key update &&
  3. sudo apt-get update &&
  4. sudo apt-get upgrade -y &&
  5. sudo apt-get install apache2 -y &&
  6. sudo a2enmod rewrite mime include headers filter expires deflate autoindex setenvif ssl http2 &&
  7. sudo apt-get install libapache2-mod-wsgi-py3 -y

使用PPA中最新版的Apache2,覆盖掉自带的源,之后也支持使用apt-get来升级或者卸载

四、安装并配置zmirror本身

假设将zmirror安装到/var/www/zmirror

以部署Google镜像为例

即使用这个配置文件 more_configs/config_google_and_zhwikipedia.py

  1. cd /var/www &&
  2. git clone https://github.com/aploium/zmirror &&
  3. cd zmirror &&
  4. chown -R www-data . &&
  5. chgrp -R www-data . &&
  6. cp more_configs/config_google_and_zhwikipedia.py config.py

之后需要手动修改 config.py,在里面加上自己的域名

在大约第38行开始处,的

  1. # ############## Local Domain Settings ##############
  2. my_host_name = '127.0.0.1'
  3. my_host_scheme = 'http://'

修改为如下,修改两行,添加一行

  1. # ############## Local Domain Settings ##############
  2. my_host_name = 'lovelucia.zmirrordemo.com'
  3. my_host_scheme = 'https://' # 注意把上面这行的http改成https
  4. verbose_level = 2

请将其中的lovelucia.zmirrordemo.com替换为你是自己实际的域名

新添加的verbose_level = 2这一行,把zmirror的日志级别设置为Warning,减少日志产生量

默认是3级,会产生大量debug日志

五、安装let's encrypt并获得证书

证书来源

本教程使用let's encrypt证书,获取非常快,但是有效期只有90天,到期前需要重新获取

你也可以使用startSSL或者沃通的免费SSL证书

有效期分别为一年和两年

请将下面脚本中lovelucia.zmirrordemo.com域名修改为你自己的域名,修改后能直接复制进去运行

为保证兼容性,本教程使用standalone模式获取证书,所以需要先停掉apache(包含在下面脚本中了)

  1. sudo service apache2 stop &&
  2. cd ~ &&
  3. git clone https://github.com/certbot/certbot &&
  4. cd certbot &&
  5. ./certbot-auto certonly --agree-tos -t --standalone -d lovelucia.zmirrordemo.com

如果一切顺利,此时你应该能看到如下的输出:

IMPORTANT NOTES:

- Congratulations! Your certificate and chain have been saved at

/etc/letsencrypt/live/lovelucia.zmirrordemo.com/fullchain.pem. Your cert

will expire on 2016-10-30. To obtain a new or tweaked version of

this certificate in the future, simply run certbot-auto again. To

non-interactively renew *all* of your certificates, run

"certbot-auto renew"

- If you like Certbot, please consider supporting our work by:


Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate

Donating to EFF: https://eff.org/donate-le

表示SSL证书已经成功获取,并且已经存到了/etc/letsencrypt/live/lovelucia.zmirrordemo.com/目录中

六、配置Apache2

现在需要给Apache2添加配置文件

使用apt-get安装的情况下,apache2的配置文件存放在/etc/apache2/中

下面下载的这个配置文件包含了一些功能和性能的优化,如Gzip,修改自h5bp

  1. cd /etc/apache2/conf-enabled &&
  2. wget https://gist.githubusercontent.com/aploium/8cd86ebf07c275367dd62762cc4e815a/raw/29a6c7531c59590c307f503b186493e559c7d790/h5.conf

然后进入/etc/apache2/sites-enabled文件夹

创建一个my-first-mirror-site.conf文件,内容如下(记得修改对应的域名和文件夹等东西)

  1. <IfModule mod_ssl.c>
  2.     SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
  3.     <VirtualHost *:443>
  4.         # 域名, 记得修改成你自己的
  5.         ServerName lovelucia.zmirrordemo.com
  6.  
  7.         # 这个没用的
  8.         ServerAdmin root@localhost
  9.  
  10.         # 下面两个log文件路径也建议按实际修改
  11.         # 默认保存在 /var/log/apache2/ 文件夹下
  12.         # ErrorLog 中包含了zmirror产生的stdout输出, 若需要debug可以看它
  13.         ErrorLog ${APACHE_LOG_DIR}/zmirror-google_ssl_error.log
  14.         CustomLog ${APACHE_LOG_DIR}/zmirror-google_ssl_access.log combined
  15.  
  16.         # ##### WSGI 这部分是重点  ######
  17.         WSGIDaemonProcess zmirror_google user=www-data group=www-data threads=16
  18.         #这是刚刚安装的zmirror的路径
  19.         WSGIScriptAlias / /var/www/zmirror/wsgi.py
  20.         WSGIPassAuthorization On
  21.  
  22.         # 给予zmirror文件夹权限
  23.         <Directory /var/www/zmirror>
  24.             WSGIProcessGroup zmirror_google
  25.             WSGIApplicationGroup %{GLOBAL}
  26.             Order deny,allow
  27.             Allow from all
  28.         </Directory>
  29.  
  30.        # ######### SSL部分 这部分告诉Apache你的证书和私钥在哪 #########
  31.        # 下面使用的是刚刚let's encrypt给我们的证书, 你也可以用别的
  32.         SSLEngine on
  33.         # 私钥
  34.         SSLCertificateFile /etc/letsencrypt/live/lovelucia.zmirrordemo.com/cert.pem
  35.         # 证书
  36.         SSLCertificateKeyFile /etc/letsencrypt/live/lovelucia.zmirrordemo.com/privkey.pem
  37.         # 证书链
  38.         SSLCertificateChainFile /etc/letsencrypt/live/lovelucia.zmirrordemo.com/chain.pem
  39.  
  40.        # HTTP/2
  41.         <IfModule http2_module>
  42.             Protocols h2 h2c http/1.1
  43.         </IfModule>
  44.     </VirtualHost>
  45. </IfModule>

完成

很好,所有部署工作已经完成了!

现在只需要重启一下Apache即可

  1. sudo service apache2 restart

七、存在的一个小问题

按照上面的配置完成后,https的网站是可以直接访问了,但是访问http无法直接跳转到https

请在/etc/apache2/sites-enabled/000-default.conf中加入以下设置,使得HTTP能自动跳转到HTTPS

加在括起来范围的里面

  1. <IfModule mod_rewrite.c>
  2.     RewriteEngine On
  3.     RewriteCond %{HTTPS} !=on
  4.     RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
  5. </IfModule>
管理员

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: