wangbin
  • wangbin
  • 2019-12-22
  • IT

centos7使用nginx搭建cdn服务

一. 简介

最近脑袋抽了,买了一堆高内存高性能,但是网络很一般的机器。上了CloudFront后,感觉上了云减速,打开速度慢腾腾的。

算了,矮个子里挑个高的,找个网络好的vps自己搭个cdn服务,速度怎么着应该比现在好吧。

二.配置

www-mycdn.wangbin.io.conf

## backend
upstream io_wangbin_www-data  {
    # server 192.168.16.32:59002 weight=1;
    server www-data.wangbin.io:443;
}

# www-mycdn.wangbin.io;
server {

    listen       50443 ssl http2;
    listen       [::]:50443 ssl http2;

    server_name  wangbin.io;
    server_name  www.wangbin.io;

    # ssl
    ssl_certificate             /vps/save/certificate/acme/*.wangbin.io/fullchain.cer;
    ssl_certificate_key         /vps/save/certificate/acme/*.wangbin.io/*.wangbin.io.key;
    ssl_trusted_certificate     /vps/save/certificate/acme/*.wangbin.io/fullchain.cer;

    # ecc
    ssl_certificate             /vps/save/certificate/acme/*.wangbin.io_ecc/fullchain.cer;
    ssl_certificate_key         /vps/save/certificate/acme/*.wangbin.io_ecc/*.wangbin.io.key;

    # log
    access_log                  logs/wangbin.io/www-mycdn.wangbin.io/access-www-mycdn.wangbin.io.log siyou325;
    error_log                   logs/error.log;

    # header
    add_header  X-Robots-Tag    "";

    location / {
        proxy_pass  https://io_wangbin_www-data;

        proxy_set_header Host www-data.wangbin.io;
        proxy_set_header X-Real-Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_protocol_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        # # proxy-protocol
        # proxy_set_header X-Real-Ip $proxy_protocol_addr;

        proxy_ssl_server_name   on; # 要加上这个,不然会报502错误, peer closed connection in SSL handshake while SSL handshaking to upstream
        proxy_ssl_verify_depth  2;
        proxy_ssl_session_reuse on;
        proxy_ssl_verify off;

        proxy_redirect off;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_max_temp_file_size 0;
        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;
        proxy_buffer_size          64k;
        proxy_buffers              32 32k;
        proxy_busy_buffers_size    128k;
        proxy_temp_file_write_size 128k;
    }

    # 禁止访问.svn目录,防止svn信息泄漏,必加项
    location ~ ^(.*)\/\.svn\/ {
        deny all;
    }

}

提供源服务的nginx配置文件是www.wangbin.io.conf,在cdn端删除www.wangbin.io.conf,只保留这个www-mycdn.wangbin.io.conf

注意点有2个

  1. server www-data.wangbin.io:443;要发送请求到后端机器443端口
  2. proxy_ssl_server_name on;不加这个会报502错,下面详细说

三. peer closed connection in SSL handshake while SSL handshaking to upstream

如果没配置

proxy_ssl_server_name on;

打开https://wangbin.io会报502,这个问题困扰我好几天,最后终于找到了原因,配置上这个解决了问题。

502的时候查看日志文件/usr/local/nginx/logs/wangbin.io/wangbin.io/error.log发现报错

2019/12/22 16:21:08 [error] 20504#0: *2374 peer closed connection in 
SSL handshake while SSL handshaking to upstream, client: 127.0.0.1, 
server: wangbin.io, request: "GET / HTTP/2.0", 
upstream: "https://107.174.245.89:443/", host: "wangbin.io"

百度"proxy_pass peer closed connection in SSL handshake while SSL handshaking to upstream",找到了解决方法https://www.itkz.cn/114.html

四. 总结

这次问题困扰我好几天,除了中间各种事拖着没连续时间看外,另外一个重要的原因是虽然知道需要看日志查看具体的原因,但是又没去查找nginx的日志,反而一直纠结proxy_pass https://www.163.com 可以,配置proxy_pass https://www-data.wangbin.io 不行,不想去看日志。 偶尔想到看日志的几次,也只是查看了源站的nginx日志,没有发现来自mycdn服务器的请求和错误日志而告罢。今天查看了mycdn服务器上的/usr/local/nginx/logs/wangbin.io/wangbin.io/error.log,才发现了这个错误日志,搜索下就解决了问题,对症下药解决问题才easy

总结下这个经验,后面error.log统一放到/usr/local/nginx/logs/error.log,有问题之后,只需要看两个机器的error.log就可以方便的定位原因了。还是对日志的使用不太熟悉呀,另外日志真是牛逼、很牛逼的功能

mycdn现在用用,后面看看具体效果吧

参考:

  1. https://www.itkz.cn/114.html

  2. https://blog.csdn.net/chenyulancn/article/details/70841298

  3. https://blog.csdn.net/chenyulancn/article/details/70841298