因为项目需要,现在想将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服务器中。同理也可以实现负载均衡。
,