反向代理
如何代理网站,这里举一个代理Google的例子
location / {
proxy_ssl_server_name on;
proxy_pass https://www.google.com/;
proxy_set_header Accept-Encoding '';
sub_filter "www.google.com" "YOUR_WEBSITE";
sub_filter_once off;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
}
这是什么意思?
proxy_ssl_server_name on;
:HTTPS SNI回源proxy_pass https://www.google.com/;
: 代理www.google.com的数据sub_filter "www.google.com" "YOUR_WEBSITE";
: 匹配文字修改,Google会在搜索时重新跳转会自己的域名,因为替换www.google.com到反代网站sub_filter_once off;
:配合上方使用,意为是否只替换一次proxy_set_header Host $host;
: 设置代理头,传递Host信息,否则会有一些奇奇怪怪的问题 记住这个待会儿要考proxy_set_header X-Real_IP $remote_addr;
:这两段都是向原站传递用户真实IP地址
proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
proxy_http_version 1.1;
: 定义HTTP版本proxy_set_header Upgrade $http_upgrade;
: websocket支持
proxy_set_header Connection upgrade;,用V2ray的应该很熟悉这个
Nginx CDN
location / {
proxy_ssl_server_name on;
proxy_pass https://YOUR_WEBSITE_IP/;
proxy_set_header Accept-Encoding '';
proxy_set_header Host YOUR_WEBSITE; #这里记得改
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
}
没错基本和反向代理一样,只是删掉了文本替换
原理是什么呢?proxy_pass
: 代理原服务器的数据proxy_set_header Host
: 向原服务器传递网站Host头,防止代理错误的网站 说了要考的
缓存
以下来自这里,稍作修改
做这些当然要缓存一下静态QWQ,不然对原站的负载太高失去了CDN原有的作用
HTTP层设置
proxy_connect_timeout 10;
proxy_read_timeout 180;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 96k;
proxy_temp_file_write_size 96k;
proxy_temp_path /var/cache/nginx/temp;
proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g; #/tmp/cache路径可以自定义
Server层设置
location ~ .*.(gif|jpg|png|css|js)(.*) {
proxy_pass http://YOUR_WEBSITE; #如果是作为CDN请在这里填写原站IP,否则填写反代地址
proxy_redirect off;
proxy_set_header Host $host; #如果作为CDN请将$host改为原站地址,否则填写反代地址
proxy_cache cache_one;
proxy_cache_valid 200 302 24h;
proxy_cache_valid 301 30d;
proxy_cache_valid any 5m;
expires 90d;
}
明明是23年的稿子,却还不用上http2呢φ( ̄∇ ̄o)
明明已经23年了,Nginx还是没能支持HTTP/2 1.24