利用Nginx反向代理来简单镜像HTTP(S)网站的方法

作者: Darren 分类: nginx,收藏 发布时间: 2019-01-27 17:41

说明:现在发个Debian下反代HTTP(S)网站的教程,其他系统的也可以参考一下

安装nginx

系统要求:Debian 7

echo "deb http://packages.dotdeb.org wheezy all" >> /etc/apt/sources.list
apt-get update
apt-get install nginx
# 安装会提示输入两次 Y 来继续安装。

安装完毕之后输入nginx -v ,查看nginx的版本,确定是否安装完成。

修改配置文件

找到下面这个文件,然后修改。

vi /etc/nginx/sites-available/default

按照下面的示例修改完毕后就重启Nginx

service nginx restart

然后访问你的域名看一看是否成功镜像,需要注意的一点是,如果被镜像的网站设置了防盗链,那么静态文件(js/css/图片)可能无法显示,这就没办法了。

HTTP 镜像适用于:添加虚拟主机时选择不启用 SSL 证书,并且被镜像的域名也没有启用 SSL 证书
打开/usr/local/nginx/conf/vhost
找到 bbbbb.com.conf 下载到本地
打开 bbbbb.com.conf 删除所有内容,然后把以下内容复制到 bbbbb.com.conf

server
	{
		listen 80;
		server_name bbbbb.com;
		
		if ($http_user_agent ~* (baiduspider|360spider|haosouspider|googlebot|soso|bing|sogou|yahoo|sohu-search|yodao|YoudaoBot|robozilla|msnbot|MJ12bot|NHN|Twiceler)) {
		return  403;
		}
  
		location / {
		sub_filter aaaaa.com bbbbb.com;
		sub_filter_once off;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header Referer http://aaaaa.com;
		proxy_set_header Host aaaaa.com;
		proxy_pass http://aaaaa.com;
		proxy_set_header Accept-Encoding "";
		}
}

然后把上述代码中的 aaaaa.com 改为被镜像的网站,
bbbbb.com 改为镜像网站所用的域名
因为我的网站都不带 WWW,所以示例也没有 WWW,如果你的有 WWW,请自行就改吧

修改完毕保存,把需改好的 bbbbb.com.conf 上传到服务器进行覆盖替换
最后执行:/etc/init.d/nginx restart 重启nginx,使其生效。

3.2 HTTPS镜像

HTTPS 镜像适用于:添加虚拟主机时选择启用 SSL 证书,并且被镜像的域名也启用了 SSL 证书
打开/usr/local/nginx/conf/vhost
找到 bbbbb.com.conf 下载到本地
打开 bbbbb.com.conf ,复制文中的如下证书内容(因域名不同,部分内容会有差别),保存到另一个文档中:

 

  ssl on;
        ssl_certificate /etc/letsencrypt/live/bbbbb.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/bbbbb.com/privkey.pem;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "EECDH+CHACHA20:EECDH+CHACH:RSA+3DES:!MD5";
        ssl_session_cache builtin:1000 shared:SSL:10m;
        # openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
        ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
		add_header Strict-Transport-Security "max-age=31536000";

 

然后清空 bbbbb.com.conf,把下方内容全部复制到被清空的 bbbbb.com.conf

 

server
	{
		listen 80;
		listen 443 ssl;
		server_name bbbbb.com ;
        index index.html index.htm index.php default.html default.htm default.php;
        root  bbbbb.com;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/bbbbb.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/bbbbb.com/privkey.pem;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "EECDH+CHACHA20:EECDH+CHACH:RSA+3DES:!MD5";
        ssl_session_cache builtin:1000 shared:SSL:10m;
        # openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
        ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
		add_header Strict-Transport-Security "max-age=31536000";
		
		if ( $scheme = http ){
			return 301 https://$server_name$request_uri;
		}
		
		if ($http_user_agent ~* (baiduspider|360spider|haosouspider|googlebot|soso|bing|sogou|yahoo|sohu-search|yodao|YoudaoBot|robozilla|msnbot|MJ12bot|NHN|Twiceler)) {
		return  403;
		}
  
		location / {
		sub_filter aaaaa.com bbbbb.com;
		sub_filter_once off;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header Referer https://aaaaa.com;
		proxy_set_header Host aaaaa.com;
		proxy_pass https://aaaaa.com;
		proxy_set_header Accept-Encoding "";
		}
}

 

利用Nginx反向代理镜像HTTP(S)网站
修改 ABC 三处的内容
A 处,把 bbbbb.com 替换为你用来镜像的域名
B 处,删 B处内容,把刚才单独保存的证书内容复制到 B处
C 处,把 bbbbb.com 替换为你用来镜像的域名,把 aaaaa.com 替换为被镜像的域名。

因为我的网站都不带 WWW,所以示例也没有 WWW,如果你的有 WWW,请自行就改吧,修改完毕保存,把需改好的 bbbbb.com.conf 上传到服务器进行覆盖替换。
最后执行:/etc/init.d/nginx restart 重启nginx,使其生效。