• 首页
    • English
    • 中文
  • 关于我们
  • 服务项目
    • 谷歌SEO服务
    • WordPress建站服务
    • 谷歌ADS/SEM代运营
  • 项目案例
    • 医疗
    • 建材
    • 机械加工
    • 照明
    • 电商
    • 电脑硬件
  • 博客
    • 服务器运维
      • aliyun
      • 服务器安装
      • 宝塔面板
      • 虚拟化
      • 阿里云
      • Centos
      • linux
      • nginx
    • 电子商务
    • 免费资源
    • PHP
      • Magento
      • WordPress
    • 大数据采集
    • Python
    • Javascript
    • SEO
    • 未分类
  • 联系我们
What's Hot

机械模具加工公司网站设计案例

24 10 月, 2023

快速原型公司案例

24 10 月, 2023

陶瓷加工网站案例

24 10 月, 2023
Facebook Twitter Instagram
  • 中文
  • English
Facebook Twitter Instagram
VPSEO VPSEO
  • 首页
    • English
    • 中文
  • 关于我们
  • 服务项目
    • 谷歌SEO服务
    • WordPress建站服务
    • 谷歌ADS/SEM代运营
  • 项目案例
    • 医疗
    • 建材
    • 机械加工
    • 照明
    • 电商
    • 电脑硬件
  • 博客
    • 服务器运维
      • aliyun
      • 服务器安装
      • 宝塔面板
      • 虚拟化
      • 阿里云
      • Centos
      • linux
      • nginx
    • 电子商务
    • 免费资源
    • PHP
      • Magento
      • WordPress
    • 大数据采集
    • Python
    • Javascript
    • SEO
    • 未分类
  • 联系我们
VPSEO VPSEO
Home»nginx»利用Nginx实现Varnish支持SSL访问
nginx

利用Nginx实现Varnish支持SSL访问

chrispengcnBy chrispengcn7 8 月, 2021没有评论2 Mins Read
Facebook Twitter Pinterest LinkedIn Tumblr Email
Share
Facebook Twitter LinkedIn Pinterest Email

利用Nginx实现Varnish支持SSL访问

之前博客其实是以Varnish=>Nginx=>PHP(FPM-FCGI)来访问的,但Varnish不支持SSL,也就是说无法使用https。好蛋疼。。。

所以耍点小聪明,以Nginx(443)=>Varnish(80)=>Nginx=>PHP(FPM-FCGI)来访问到博客。也就是说https走Nginx,反代回Varnish,Varnish反代后端Nginx反代PHP。

画了张简单的示意图:

如上,就很好解决了这个问题,虽说目前Nginx只支持h2、http/1.1,但算是够用了。什么时候也能同时支持h2、h2-15、h2-14、spdy/3.1、spdy/3、http/1.1就爽了,当然,这只是YY一下。

言归正传,编译Nginx相信大家都会了,使用 –with-http_v2_module 便可使用上http2。

在原有的Varnish+Nginx架构中,给Nginx添上规则:

server {
        listen 443 ssl http2;
        server_name kn007.net;
        keepalive_timeout 75s;
        include kn007_net_security.conf;

        location / {
            proxy_pass http://127.0.0.1:80;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
            proxy_set_header X-SSL on;
            proxy_hide_header Vary;
            proxy_redirect off;
        }
}

这样https就被Nginx监听了,并且对处于http(80端口)的Varnish进行反代。其中kn007_net_security.conf里是诸如ssl_certificate一类ssl信息的配置,请大家自行替换为所需。

给Varnish添上规则:

sub vcl_recv {

	...

    if (req.http.X-SSL == "on") {
      set req.http.X-Forwarded-Proto = "https";
      set req.http.X-Forwarded-Port = "443";
    }

	...

}

这样就达到http访问Varnish,https访问Nginx。当然如果你想设定,http走Varnish时,跳转到Nginx的https,只要将上面Varnish配置,略微修改一下,大概如下:

sub vcl_recv {

	...

    if ( req.http.X-Forwarded-Proto !~ "(?i)https" && !req.http.X-SSL){
      set req.http.x-redir = "https://" + req.http.host + req.url;
      return(synth(700, ""));
    }

    if (req.http.X-SSL == "on") {
      set req.http.X-Forwarded-Proto = "https";
      set req.http.X-Forwarded-Port = "443";
    }

	...

}

	...

sub vcl_synth {

	...

    if (resp.status == 700) {
      set resp.status = 301;
      set resp.http.Location = req.http.x-redir;
      return (deliver);
    }

	...

}

现在Varnish对普通访客访问80端口的行为,跳转到443,对Nginx(443端口)的访问进行放行。

如果你也是使用Wordpress,那么可能需要替换下数据库的地址:

UPDATE wp_options SET option_value = replace( option_value, 'http://kn007.net', 'https://kn007.net' ) WHERE option_name = 'home' OR option_name = 'siteurl' ;
UPDATE wp_posts SET post_content = replace( post_content, 'http://kn007.net', 'https://kn007.net' ) ;
UPDATE wp_posts SET guid = replace( guid, 'http://kn007.net', 'https://kn007.net' ) ;
UPDATE wp_posts SET pinged = replace( pinged, 'http://kn007.net', 'https://kn007.net' ) ;
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://kn007.net', 'https://kn007.net') ;
UPDATE wp_comments SET comment_content = replace(comment_content, 'http://kn007.net', 'https://kn007.net') ;
UPDATE wp_comments SET comment_author_url = replace(comment_author_url, 'http://kn007.net', 'https://kn007.net') ;

除了修改站点地址等,还应在wp-config.php添加:

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

以上为大概的规则,请按照实际情况修改。

另外对于许多人说的为什么要使用https的疑问,除了网上搜得到的原因之外。最大的原因是我喜欢跟着趋势随波逐浪,就如我博客抬头所说的:人生是一种无法抗拒的前进。

毕竟Google都扁平化了,Baidu也https了,我跟在巨人的后面,应该也不算丢人吧。

还有扁平化了,自然会自适应,这并不冲突。。。

最后要说的是,其实百度收录对https并不完全支持,也不友好。

{"message":"HTTPS protocol is not supported.","siteurl":"https://kn007.net/","status":2007}

对这个有要求的,还是要再三考虑是否使用https。目前收录和索引在下降,我已经看淡了。

Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
chrispengcn
  • Website

Related Posts

nginx wordpress 反向代理缓存规则

14 5 月, 2023

nginx屏蔽中国ip地址以及开放特定ip地址

23 6 月, 2022

Nginx 自动识别PC端与Mobile移动端

7 1 月, 2022

宝塔面板nginx 安装安全狗过程

20 10 月, 2021
Add A Comment

Leave A Reply Cancel Reply

*

code

导航
  • 首页
  • 关于我们
  • 服务项目
  • 项目案例
  • 博客文章
  • 联系我们
博客
  • 服务器运维
  • 服务器安装
  • nginx
  • PHP
  • WordPress
  • Python
  • Javascript
  • SEO
  • 电子商务
  • 大数据采集
  • 宝塔面板
  • 数据库
  • 电子商务
  • 虚拟化
  • 阿里云
导航
  • 首页
  • 关于我们
  • 谷歌SEO服务
  • 谷歌ADS/SEM代运营
  • WordPress建站服务
  • 项目案例
  • 博客
  • 联系我们
最新文章
  • 机械模具加工公司网站设计案例
  • 快速原型公司案例
  • 陶瓷加工网站案例
  • CNC数控加工日文网站案例
  • 触摸一体机数字标牌厂家网站案例
关于我们
关于我们

广州纬来科技有限公司
联系地址:广东省广州市番禺区富华中路富源二街18号合和大厦809

QQ : 13602156
Email : 13926026058@139.com
Contact: +86 13926026058

Facebook Twitter YouTube LinkedIn
© 2025 广州纬来科技有限公司 粤ICP备2023105857号-2
  • 首页
  • 关于我们
  • 谷歌SEO服务
  • 谷歌ADS/SEM代运营
  • WordPress建站服务
  • 项目案例
  • 博客
  • 联系我们

Type above and press Enter to search. Press Esc to cancel.