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

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

经验文章nimo972025-01-05 16:12:3411A+A-

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

点击这里复制本文地址 以上内容由nimo97整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

尼墨宝库 © All Rights Reserved.  蜀ICP备2024111239号-7