其他教程

其他教程

Products

当前位置:首页 > 其他教程 >

利用Nginx反向代理,不重新解析域名对网站进行服务器迁移

GG网络技术分享 2025-03-18 16:14 0


大家好,这里是关于[免费网站反向代理系统程序–zmirror],[利用Nginx反向代理,不重新解析域名对网站进行服务器迁移]问题的解答,希望对您有所帮助。如果你还想了解更多这方面的信息,请关注本站其他相关内容,共同学习吧!

免费网站反向代理系统程序–zmirror

教程大全zmirror,反代网站,反向代理,网站反代

免费网站反向代理系统程序–zmirror

准备工作:

推荐系统为:Ubuntu 16.04

一键自动安装:

使用zmirror快速部署镜像的脚本

如果无法部署成功, 可以尝试手动部署: 手动部署zmirror

前置需求

一台墙外VPS, OpenVZ/Xen/KVM均可

操作系统:

支持的操作系统:
Ubuntu 14.04/15.04(不支持HTTP2)/15.10/16.04+
Debian 8 (不支持HTTP/2)
不支持 CentOS/RHEL/Windows/Fedora/Arch/… 对于这些系统, 可以使用由yumin9822提供的这个脚本
推荐的操作系统:
Ubuntu 16.04 x86_64
全新(刚安装完成)的操作系统. 如果系统中有其他东西, 可能会产生冲突
root权限
域名

每个镜像要求一个三级域名(类似于g.zmirrordemo.com这样的, 有三部分, 两个点)

域名已经在DNS记录中正确指向你的VPS

运行方法

我没有SSL证书 (如果不懂, 请使用这个)

sudo apt-get -y update && sudo apt-get -y install python3 git

git clone https://github.com/aploium/zmirror-onekey.git --depth=1

cd zmirror-onekey

sudo python3 deploy.py

然后按照脚本给予的提示继续, 过程中会自动获取SSL证书
如果有不懂的, 可参考下面的安装视频
如果遇到bug, 请发issues提出

我已有SSL证书
如果已有证书, 希望使用自己提供的证书, 而不是通过 let’s encrypt 获取
请将上面代码中的第四行替换成下面的样子, 在运行期间会提示你输入证书路径的:

sudo python3 deploy.py --i-have-cert

警告
不支持加密的私钥, 如果私钥有密码加密, 请先解密
安装过程视频

特性

支持一次部署多个镜像, 支持同VPS多镜像
自动安装 let’s encrypt 并申请证书, 启用HTTPS
自动添加 let’s encrypt 的定期renew脚本到crontab
启用HTTP/2 ps:Debian8和Ubuntu15.04不支持HTTP/2
启用HSTS

手动安装教程:

本教程使用zmirror自带的配置文件, 在一台全新安装的Ubuntu服务器上部署部署支持HTTPS和HTTP/2的zmirror镜像
本教程以Google镜像为例
适用于 Ubuntu 14.04/15.10/16.04+
建议的系统是 Ubuntu16.04-x86_64

暂时没有撰写CentOS系/win/Mac下的部署教程
部署有困难的请将VPS重装为Ubuntu

暂时只能手动部署, 自动部署脚本 zmirror-onekey 仍在开发中, 欢迎贡献代码

部署完成后的镜像使用Apache2.4.23, 会启用HTTPS, 并且使用HTTP/2来提升访问性能
在教程中使用 let’s encrypt 来获取HTTPS证书

前置需求

一台国外的服务器

Ubuntu 14.04/15.10/16.04+
建议的系统为 Ubuntu16.04-x86_64
全新安装的系统
一个已经解析到你服务器的三级域名, 不支持中文域名

三级域名指类似于这样的: g.mydomain.com 域名里有两个点, 三部分的
至于如何将域名解析到你的服务器, 请自行Google相关说明
本教程以 lovelucia.zmirrordemo.com 为例
安装操作

如果部署中出现任何问题或者不清楚的地方
请 点此发issue 提出
或者在 gitter 中请求实时帮助, 可以点击右边的图标进入gitter聊天室 Gitter
您会被加入到 CONTRIBUTORS.md 的贡献者列表中
安装初始化环境

以下脚本可以直接整个原样复制黏贴到terminal中运行

每一行最后的&&表示本行执行成功后继续执行下一行

sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&

sudo apt-get update &&

sudo apt-get upgrade -y &&

sudo apt-get dist-upgrade -y &&

sudo apt-get install build-essential patch binutils make devscripts nano libtool libssl-dev libxml2 libxml2-dev software-properties-common python-software-properties dnsutils git wget curl python3 python3-pip iftop -y &&

sudo python3 -m pip install -U flask requests cchardet fastcache

安装Apache2

由于ubuntu14.04和16.04自带的Apache2均不支持HTTP/2, 所以需要安装不依赖ubuntu的最新版的Apache2

同样, 下面的脚本也可以原样粘贴到terminal中运行

LC_ALL=C.UTF-8 sudo add-apt-repository -y ppa:ondrej/apache2 &&

sudo apt-key update &&

sudo apt-get update &&

sudo apt-get upgrade -y &&

sudo apt-get install apache2 -y &&

sudo a2enmod rewrite mime include headers filter expires deflate autoindex setenvif ssl http2 &&

sudo apt-get install libapache2-mod-wsgi-py3 -y

使用PPA中最新版的Apache2, 覆盖掉自带的源, 之后也支持使用apt-get来升级或者卸载

安装并配置zmirror本身

假设将zmirror安装到 /var/www/zmirror

本教程以部署Google镜像为例

即使用这个配置文件 more_configs/config_google_and_zhwikipedia.py

cd /var/www &&

git clone https://github.com/aploium/zmirror &&

cd zmirror &&

chown -R www-data . &&

chgrp -R www-data . &&

cp more_configs/config_google_and_zhwikipedia.py config.py

之后需要手动修改 config.py, 在里面加上自己的域名

在大约第38行开始处, 的

# ############## Local Domain Settings ##############

my_host_name = \'127.0.0.1\'

my_host_scheme = \'http://\'

修改为如下, 修改两行, 添加一行

# ############## Local Domain Settings ##############

my_host_name = \'lovelucia.zmirrordemo.com\'

my_host_scheme = \'https://\' # 注意把上面这行的http改成https

verbose_level = 2

请将其中的lovelucia.zmirrordemo.com替换为你是自己实际的域名

新添加的 verbose_level = 2 这一行, 把zmirror的日志级别设置为Warning, 减少日志产生量.
默认是3级, 会产生大量debug日志
安装let’s encrypt并获得证书

证书来源
本教程使用let’s encrypt证书, 获取非常快, 但是有效期只有90天, 到期前需要重新获取
你也可以使用 startSSL 或者 沃通 的免费SSL证书
有效期分别为一年和两年
请将下面脚本中 lovelucia.zmirrordemo.com 域名修改为你自己的域名, 修改后能直接复制进去运行

为保证兼容性, 本教程使用standalone模式获取证书, 所以需要先停掉apache(包含在下面脚本中了)

sudo service apache2 stop &&

cd ~ &&

git clone https://github.com/certbot/certbot &&

cd certbot &&

./certbot-auto certonly --agree-tos -t --standalone -d lovelucia.zmirrordemo.com

如果一切顺利, 此时你应该能看到如下的输出:

IMPORTANT NOTES:

- Congratulations! Your certificate and chain have been saved at

/etc/letsencrypt/live/lovelucia.zmirrordemo.com/fullchain.pem. Your cert

will expire on 2016-10-30. To obtain a new or tweaked version of

this certificate in the future, simply run certbot-auto again. To

non-interactively renew *all* of your certificates, run

\"certbot-auto renew\"

- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let\'s Encrypt: https://letsencrypt.org/donate

Donating to EFF: https://eff.org/donate-le

表示SSL证书已经成功获取, 并且已经存到了 /etc/letsencrypt/live/lovelucia.zmirrordemo.com/ 目录中

配置Apache2

现在需要给Apache2添加配置文件

使用apt-get安装的情况下, apache2的配置文件存放在/etc/apache2/中

下面下载的这个配置文件包含了一些功能和性能的优化, 如Gzip, 修改自h5bp

cd /etc/apache2/conf-enabled &&

wget https://gist.githubusercontent.com/aploium/8cd86ebf07c275367dd62762cc4e815a/raw/29a6c7531c59590c307f503b186493e559c7d790/h5.conf

然后进入/etc/apache2/sites-enabled文件夹,

创建一个my-first-mirror-site.conf文件, 内容如下(记得修改对应的域名和文件夹等东西)

<IfModule mod_ssl.c>

SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5

<VirtualHost *:443>

# 域名, 记得修改成你自己的

ServerName lovelucia.zmirrordemo.com

# 这个没用的

ServerAdmin root@localhost

# 下面两个log文件路径也建议按实际修改

# 默认保存在 /var/log/apache2/ 文件夹下

# ErrorLog 中包含了zmirror产生的stdout输出, 若需要debug可以看它

ErrorLog ${APACHE_LOG_DIR}/zmirror-google_ssl_error.log

CustomLog ${APACHE_LOG_DIR}/zmirror-google_ssl_access.log combined

# ##### WSGI 这部分是重点 ######

WSGIDaemonProcess zmirror_google user=www-data group=www-data threads=16

#这是刚刚安装的zmirror的路径

WSGIScriptAlias / /var/www/zmirror/wsgi.py

WSGIPassAuthorization On

# 给予zmirror文件夹权限

<Directory /var/www/zmirror>

WSGIProcessGroup zmirror_google

WSGIApplicationGroup %{GLOBAL}

Order deny,allow

Allow from all

</Directory>

# ######### SSL部分 这部分告诉Apache你的证书和私钥在哪 #########

# 下面使用的是刚刚let’s encrypt给我们的证书, 你也可以用别的

SSLEngine on

# 私钥

SSLCertificateFile /etc/letsencrypt/live/lovelucia.zmirrordemo.com/cert.pem

# 证书

SSLCertificateKeyFile /etc/letsencrypt/live/lovelucia.zmirrordemo.com/privkey.pem

# 证书链

SSLCertificateChainFile /etc/letsencrypt/live/lovelucia.zmirrordemo.com/chain.pem

# HTTP/2

<IfModule http2_module>

Protocols h2 h2c http/1.1

</IfModule>

</VirtualHost>

</IfModule>

完成

很好, 所有部署工作已经完成了!
现在只需要重启一下Apache即可

sudo service apache2 restart

存在的一个小问题

按照上面的配置完成后, https的网站是可以直接访问了, 但是访问http无法直接跳转到https.
请在 /etc/apache2/sites-enabled/000-default.conf 中加入以下设置, 使得HTTP能自动跳转到HTTPS

加在<VirtualHost></VirtualHost>括起来范围的里面

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteCond %{HTTPS} !=on

RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]

</IfModule>

利用Nginx反向代理,不重新解析域名对网站进行服务器迁移

因为项目需要,现在想将A服务器上的网站(代码)转移到B服务器上,但是不想重新做域名解析,因为这段时间网站收录方面都比较优秀,冒然修改解析怕对网站收录有影响。所以借助一下Nginx的反向代理,将域名从A服务器反向代理到B服务器。

首先将B服务器的环境做成和A一致(Nginx+PHP7.2+Mysql)。将A服务器上的代码以及数据库同步到B服务器上。

不用修改代码中的站点配置,只需要修改Nginx的配置:

A服务器的配置:

upstream proxy_server{

server B_SERVER_IP:8080;

}

server {

listen 80;

server_name www.domain.com m.domain.com;

index index.html index.htm index.php;

## send request back to apache ##

location / {

proxy_pass http://proxy_server;

#Proxy Settings

proxy_redirect off;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

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 4k;

proxy_buffers 4 32k;

proxy_busy_buffers_size 64k;

proxy_temp_file_write_size 64k;

}

}

通过以上配置,将域名解析反向代理到B_SERVER_IP:8080中,注意端口,因为我A和B服务器都做了配置分割,在default配置中,监听的80端口,并且配置了server_name _。所以一切以IP直接解析过来的访问都走了default这个配置,没有到指定的配置下。在不想修改default规则的前提下,我把B服务器上的需要被反向代理访问的站点,listen 8080,server_name IP,所以A服务器配置中需要设置被访问的B服务器的IP时,需要修改端口为8080。如果想玩负载均衡,可以在upstream proxy_server下配置多台webserver的ip,并且通过设置weight权重来配比访问。

upstream proxy_server{

server B_SERVER_IP:8080 weight=1;

server C_SERVER_IP:8080 weight=1;

}

权重越高,被访问的机率越大。如上所示,weight都为1,那机率为50%,50%

B服务器的配置

server {

listen 8080;

server_name IP;

root /home/www/wwwroot/website;

index index.php index.html index.htm;

charset utf8;

location ~ \\.php(/|$)

include snippets/fastcgi-php.conf;

fastcgi_pass unix:/run/php/php7.2-fpm.sock;

#include fastcgi_params;

}

#针对Thinkphp 3.2 做的优化,不开启PATH_INFO,直接用rewrite指向到兼容模式的URL

location / {

if (!-e $request_filename) {

rewrite ^(.*)$ /index.php?s=$1 last;

break;

}

}

}

通过这样的配置,在访问网站时,域名先解析到A服务器上,然后A服务器将所有的访问请求反向代理到B服务器中,B服务器对请求做相关的处理后,返回给A服务器。从而达到不需要修改域名解析,将代码部署到B服务器中。同理也可以实现负载均衡。

标签:

提交需求或反馈

Demand feedback