前言
前段时间博主购买了几台 OVH/$0.97/月的机器,除了作为备用网站还有几台多余,就想着找个腾讯云 HK 的机器反代把 OVH 机器利用起来,万一前台 HK 机器被干死就可以利用宕机切换回到 OVH。
操作介绍
大致说一下我的操作思路,OVH 机器使用 Route53 分国内外线路解析,境外走 cloudflare 的 cdn,而对于大陆地区则使用香港腾讯云反代反向代理 cloudflare 的 ip,并带上主机名 host
即可(当然也可以直接反向代理到 OVH 源站)。
Ngixn 站点配置
这里先给出博主的 yunloc.conf
配置,再在下面简单介绍
server
{
listen 80;
server_name www.yunloc.com yunloc.com;
return 301 https://yunloc.com$request_uri;
location / {
try_files $uri $uri/ =404;
}
}
server
{
listen 443 ssl http2;
server_name yunloc.com;
return 301 https://www.yunloc.com$request_uri;
ssl_certificate /usr/local/nginx/conf/ssl/www.yunloc.com.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/www.yunloc.com.key;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5";
ssl_session_timeout 5m;
ssl_stapling on;
ssl_stapling_responder http://ocsp.globalsign.com/alphasslcasha256g4;
ssl_stapling_verify on;
ssl_trusted_certificate /usr/local/nginx/conf/ssl/ocsp.yunloc.crt;
resolver 8.8.8.8 8.8.4.4 223.5.5.5 valid=3600s;
resolver_timeout 2s;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
ssl_buffer_size 4k;
ssl_session_tickets off;
ssl_early_data on;
proxy_set_header Early-Data $ssl_early_data;
location / {
try_files $uri $uri/ =404;
}
}
server
{
listen 443 ssl http2;
server_name www.yunloc.com;
index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/yunloc.com;
ssl_certificate /usr/local/nginx/conf/ssl/www.yunloc.com.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/www.yunloc.com.key;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5";
ssl_session_timeout 5m;
ssl_stapling on;
ssl_stapling_responder http://ocsp.globalsign.com/alphasslcasha256g4;
ssl_stapling_verify on;
ssl_trusted_certificate /usr/local/nginx/conf/ssl/ocsp.yunloc.crt;
resolver 8.8.8.8 8.8.4.4 223.5.5.5 valid=3600s;
resolver_timeout 2s;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
ssl_buffer_size 4k;
ssl_session_tickets off;
ssl_early_data on;
proxy_set_header Early-Data $ssl_early_data;
location / {
proxy_ssl_name www.yunloc.com;
proxy_ssl_server_name on;
proxy_set_header Host $http_host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_pass https://1.1.1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ .*\.(gif|GIF|jpg|JPG|jpeg|JPGE|png|PNG|bmp|BMP|ico|tga|imb|svg)$
{
expires 30d;
access_log off;
proxy_ssl_name www.yunloc.com;
proxy_ssl_server_name on;
proxy_set_header Host $http_host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_pass https://1.1.1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ .*\.(ttf|tiff|txt|ttc|otf|eot|woff|woff2|font.css|css|js)?$
{
expires 12h;
access_log off;
proxy_ssl_name www.yunloc.com;
proxy_ssl_server_name on;
proxy_set_header Host $http_host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_pass https://1.1.1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
}
access_log /home/wwwlogs/yunloc.com.log access;
}
上面的证书部分可参考
主要部分来了
location / {
//这里是设置 sni 来指明我们要访问的是哪个网站,如果反代域名不一样就写主站域名,把域名改成 $host 也是可以的
proxy_ssl_name www.yunloc.com;
//这个很重要,如果你对 cloudflare 设置的反向代理出现了 502 的错误,大概就是没有设置这个参数
proxy_ssl_server_name on;
//首先设置了 Host,指明了我们要访问的是服务器上的哪个网站,因为我们反代使用的是相同的域名,所以直接用$http_host 即可,如果你用了不同的域名,那就需要手动修改成你的源站域名了
proxy_set_header Host $http_host;
//这个用于告诉我们的服务器访客的真实 ip,而不是反代服务器的 ip,可以参考搜索下本站文章“Nginx 使用 CDN(CloudFlare)获取网站日志真实 IP 地址”
proxy_set_header X-real-ip $remote_addr;
//这里是 http 请求经过的服务器的 ip,包括请求者 ip,还有中间的代理服务器(如果提供)的 ip,如果想要查看真实的 ip,这个也得加上。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
//该指令用来修改被代理服务器返回的响应头中的 Location 头域和“refresh”头域,这里关闭重定向
proxy_redirect off;
//随便找个 cloudflare 的 ip 来反代即可,如果反代 OVH 原站,就写 OVH 的 IP
proxy_pass https://1.1.1.1;
//按 nginx 官方配置
proxy_set_header Upgrade $http_upgrade;
//按 nginx 官方配置
proxy_set_header Connection "upgrade";
//跨域配置
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
}
在 HTTP 时代,解决基于名称的主机同一 ip 地址上托管多个网站的问题并不难。当一个客户端请求某特定网站时,把请求的域名作为主机头(host)放在 http header 中,从而服务器根据域名可以知道把该请求引向哪个域名服务,并把匹配的网站传送给客户端。但是此方式到 https 就失效了,因为 SSL 在握手的过程中,不会有 host 信息,所以服务端通常返回配置中的第一个可用证书,这就导致不同虚拟主机上的服务不能使用不同证书(但在实际中,证书通常是与服务对应。)。 为了解决此问题,产生了 SNI,SNI 中文名为服务器名称指示,是对 SSL/TLS 协议的扩展,允许在单个 IP 地址上承载多个 SSL 证书。SNI 的实现方式是将 HTTP 头插入到 SSL 的握手中,提交请求的 Host 信息,使得服务器能够切换到正确的域并返回相应的正确证书。
不记录日志图片
如果 nginx 日志把图片也记录在日志里那查看起来就很麻烦,这里也给出了去掉方法及把图片缓存,需要把上面的反代配置也加上,不然不会显示图片了
location ~ .*\.(gif|GIF|jpg|JPG|jpeg|JPGE|png|PNG|bmp|BMP|ico|tga|imb|svg)$
{
//缓存 30 天
expires 30d;
//关闭日志
access_log off;
proxy_ssl_name www.yunloc.com;
proxy_ssl_server_name on;
proxy_set_header Host $http_host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_pass https://1.1.1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
}
结语
关于 route53 的分线路解析和宕机切换等有时间会写篇文章介绍下,有神马问题可以在下面评论区留言。
>> 所有文章均基于分享的原则,所有言论均个人观点,请注意全部都不是推荐,是分享!分享!分享!