Nginx反向代理HTTPS站点

发布于 2017-03-25  64 次阅读


引言:上一期我们简单的介绍了Nginx反向代理服务的运作原理,本期将通过实战向大家展示Nginx反向代理后站点访问速度有效提升的效果。这次的实例是一个真实的案例,也就是本站点目前采用的Web服务架构!

1、案例介绍:

由于本站域名目前受制于站长年龄因素,暂时无法在大陆进行域名备案。无法备案,带来了很多问题,比如无法使用国内的Web服务器节点而只能使用访问较缓慢的海外节点,同时还不能使用国内云计算厂商的CDN镜像加速服务器。。。虽然本站使用了海外节点中访问性能较佳的百度香港机房节点作为服务器托管区,同时百度云计算官方提供了6个公网IP出口,平时访问ping值基本在30ms-50ms,但是当高峰访问时由于站长的服务器是共享IP,导致出现访问ping值飙到100ms甚至出现断电,从而导致网站访问体验严重下降。。。站长是个爱折腾,追求完美用户体验的人,所以呢,也就产生了这个案例。。

2、所需工具:

免备案云服务器(本地ping该服务器延迟稳定在30ms左右皆可,要有公网访问出口)

3、实验步骤:

a.首先,强烈建议把云服务器系统换成linux。虽说有windows版的nginx,但是在linux下nginx的性能才能发挥到极致。同时,接下来的步骤博主都以CentOS6.8为平台进行讲解!

b.云服务器系统就绪后,通过SSH或控制台登录服务器。

c.安装nginx:yum install nginx -->如果运行此命令后提示找不到该软件包,请先执行此命令安装epel社区软件仓库后再次安装:yum install epel-release

d.配置nginx:vim /etc/nginx/conf.d/default.conf -->这里只是一个示例,如果你不喜欢vim,你可以使用其他编辑器,如gedit、nano等。这里不再撰述nginx基本的配置和启动了,下面直接贴上https的反向代理的server配置段,你也可以把它写到自己的子配置文件里

server {
        listen 443 ssl;//反向代理监听类型,你也可以配置成源站是https,本地代理是http的。
        server_name blog.dingstudio.cn;//虚拟主机的主机头

        resolver 180.76.76.76;//配置Nginx使用的DNS解析服务器
        set $backend "https://dingstudio-tech.hk.bdysite.com:443";//回源地址,注意这个是关键。源站是https协议的时候需使用此方式设置,不是传统的upstream

        #本地代理因为使用了https监听,所以需要把目标域名的SSL信息配置上去,这个不属于本章节内容范畴
        ssl_certificate /etc/ssl/certs/dingstudio-tech.pem;
        ssl_certificate_key /etc/ssl/certs/dingstudio-tech.key;
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        #代理缓存和生效配置
        location / {
                #设置回源主机头,在这里也可以使用$host。不过如果你希望通过其他域名访问有主机头判断的源站,就需要在这里指定主机头了。
                proxy_set_header        Host    blog.dingstudio.cn;
                #设置回源ClientIP为反向代理服务器访客的IP而非反向代理自身,避免源站DDOS防护模块在大流量访问时由于ClientIP都是相同的而误封锁反向代理服务器。
                proxy_set_header        X-Real-IP       $remote_addr;
                #设置添加X转发地址
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header        X-Forwarded-Proto       $scheme;
                #当上游服务器响应头回来后,可以根据响应状态码的值进行拦截错误处理,与error_page 指令相互结合,用在访问上游服务器出现错误的情况下。
                proxy_intercept_errors  on;
                #设置代理的HTTP版本,如果访客浏览器支持HTTP/2.0,可以开启2.0哦~
                proxy_http_version      1.1;
                #应用之前配置的源站目标
                proxy_pass      $backend;
                #缓存配置,用于加速二次访问
                proxy_cache_valid 200 304 12h;
                expires 2d;
        }
}

To be or not to be, that is a question.