转载留作备份:
转载来源:https://run.la/s/169.html
贴一份自己反向代理加速国外网站,主要代理github和一些源。
server
{
listen 443 ssl http2 reuseport;
#http2 表示启用http2协议,http2一般需要openssl 1.0.2+以上版本支持,大部分linux系统需要自行编译nginx作为支持,ubuntu16.04可以直接支持。
listen 80 reuseport;
#同时监听80端口。
#reuseport提高nginx性能,有兴趣可以搜索引擎
location ~* .(conf|sql|bak)$ {
deny all;
}
ssl_certificate ssl/p.run.la.pem;
ssl_certificate_key ssl/p.run.la.key;
ssl_certificate ssl/p.run.la.ecdsa.pem;
ssl_certificate_key ssl/p.run.la.ecdsa.key;
#配置双证书,一个是rsa算法的证书,一个是ecc,ecc算法效率更高,但是并不支持某些老的系统。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#配置加密协议,如果要支持ie6还需要加上SSLv3,但是安全性会降低
ssl_session_timeout 1d;
#缓存时间
ssl_ciphers 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;
#配置https加密算法,chacha20对称算法消耗更少,对于移动端更友好,但是需要自行编译nginx,打Cloudflare 补丁。
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets on;
#配置ssl缓存
ssl_stapling on;
#开启OCSP,因为Let's Encryptc证书的原因,我开启ocsp无需更多设置。
server_name p.run.la; #绑定的域名
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
}
if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot")
{
return 403;
}
#屏蔽搜索引擎
resolver 8.8.8.8 8.8.4.4 valid=600s;
#设置域名解析的dns服务器
resolver_timeout 10s;
#设置dns解析超时时间。
location ~ ^/(repo\.mongodb\.com|repo\.mysql\.com|www\.debian\.org|deb\.debian\.org|security\.debian\.org|cdn-fastly\.deb.debian\.org|nginx\.org|github\.com|codeload\.github\.com|yum\.dockerproject\.org)(\/.*)$ {
#需要代理的域名正则,避免有人用来代理某些被墙的网站,导致反向代理被gfw误杀,会的人自己改改就可以反向代理所有网站了,其实在通过sub_filter替换链接可以做到访问大部分网站,但是当初有份写好的,因为某VPS商,导致数据丢了,有兴趣的可以自己试着填一下。
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#将用户ip放到请求协议头内,一般用来告诉后端服务器,是谁访问的网站。
proxy_set_header Accept-Encoding "";
#告诉被代理网站,不要压缩内容,否则sub_filter会失效。
proxy_set_header Connection "";
#启用http1.1协议
proxy_http_version 1.1;
#同上
proxy_connect_timeout 10s;
#设置连接超时
proxy_read_timeout 10s;
#设置读取超时
proxy_set_header Host $1;
#设置host,域名
proxy_redirect ~^(http:\/\/|https:\/\/)?(.*)$ $1$server_name/$2;
#将原301跳转,重新跳转回本域名。
sub_filter 'src="/' 'src="/$1/';
sub_filter 'src="http://$1' 'src="http://$server_name/$1';
sub_filter 'src="https://$1' 'src="https://$server_name/$1';
sub_filter 'src="//$1' 'src="//$server_name/$1';
#替换网页内链接地址。
sub_filter 'href="/' 'href="/$1/';
sub_filter 'href="http://$1' 'href="http://$server_name/$1';
sub_filter 'href="https://$1' 'href="https://$server_name/$1';
sub_filter 'href="//$1' 'href="//$server_name/$1';
#同上
sub_filter 'action="/' 'action="/$1/';
sub_filter 'action="http://$1' 'action="http://$server_name/$1';
sub_filter 'action="https://$1' 'action="https://$server_name/$1';
sub_filter 'action="//$1' 'action="//$server_name/$1';
#同上
sub_filter_once off;
#替换多次
proxy_hide_header Strict-Transport-Security;
#隐藏被代理网站返回回来的协议头“Strict-Transport-Security”,避免启动hsts,具体搜索引擎hsts
set $query_mark "";
if ($query_string != "") {
set $query_mark "?${query_string}";
}
#因为nginx并不匹配url后面的?参数,而是使用“$query_string”储存。
proxy_pass $scheme://$1$2${query_mark};
#$scheme是当前访问的协议,http、https
}
root /home/wwwroot/p.run.la;
#设置目录。
}
配置完后就可以使用https://域名/github.com/,访问github了,比如https://p.run.la/github.com/
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。