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个
- server www-data.wangbin.io:443;要发送请求到后端机器443端口
- 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现在用用,后面看看具体效果吧
参考: