Nginx 反代 Varnish&WordPress 使用 https

前言

Varnish 有一个比较明显的缺点就是不能走 HTTPS,所以我们要上 h2 就不可能了,如果我们要保证网站不被劫持,那么我们只有在 Varnish 上再套一层 Nginx:443 就可以实现 https 访问网站了。

很多网站的设计,依旧是 Varnish 走 80 端口,然后 Nginx 走 443 端口 反代 80 端口实现 HTTPS(如上图)。我觉得这样子反而麻烦,要在 Varnish 添加判断跳转到 443 端口。我觉得讲 Varnish 放到 6081 找个默认端口,让 Nginx 反代。 然后 80 端口 让 Nginx 走才 301 跳转到 HTTPS。这样的话,http 的 80 端口就可以被 Nginx 使用了,其他的网站可以不走缓存。

Nginx:443 ——> Varnish:6081 ——> Nginx:8080 然后 Nginx:80 301 跳转到 Nginx:443。

内容

步骤一

Varnish 4.1 & WordPress 带来内存级加速 的基础上,我们再将 Varnish 的端口改为默认的 6081,将 /etc/default/varnish 中的 DAEMON_OPTS="-a :80 \ 换成 DAEMON_OPTS="-a :6081 \ ,然后重启 service varnish restart

步骤二

Nginx 添加 https ,监听 443 端口。 如果不太可能得懂,请参考:或许是 Nginx 上配置 HTTP2 最实在的教程了

server {
listen 443 ssl http2; # Nginx 1.9 以上的版本才可以 h2。

ssl_certificate /path/to/ssl.crt;  # SSL 的证书
ssl_certificate_key /path/to/ssl.key; # SSL 的密钥

ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RC4-SHA:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS;
ssl_session_cache builtin:1000 shared:SSL:10m;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
server_name www.mf8.biz; #你的域名
access_log off;

#反代 Varnish 的 6081 端口

        location / {
            proxy_pass http://127.0.0.1:6081;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-Port 443;
            proxy_set_header Host $host;
        }

}

步骤三

这时候我们看一下我们的网站用 https 打开, 例如:https://www.mf8.biz,应该已经可以访问了,但是你会发现css、js 等静态渲染文件全部是挂掉的,因为他们还在 http 下而不是 https,所以我们要强制一下。

wp-config.php 添加:

if ($_SERVER['HTTP_X_SSL'] == 'on') $_SERVER['HTTPS']='on';

再刷新一下是不是好了? 但是我们的 http:80 端口却死掉了。

步骤四

自然就是再监听一个 http:80 的端口。然后 301 跳转到 https 上。

server {
listen 80;
server_name www.mf8.biz;
rewrite ^/(.*) https://www.mf8.biz/$1 permanent;
}

注意点

你每一次修改 Varnish 或者 Nginx 的配置文件,如果要想让其生效的话,你就需要重启,重启,重启和重启!!

可能喜欢
发表评论