需求

有一个很老很老的 Laravel 项目,很多东西都是写死的,就比如路由文件,直接写死了这个域名绑定哪个路由。

目前遇到的问题是,没有的测试、预发布环境,导致测试一些东西就非常麻烦,又因为如上面说的直接写死了「哪个域名绑定哪个路由」,也不敢改,怕出问题,能跑就行 /dog。
所以就想到了用 Nginx 来做一个反向代理,根据 Host 头来转发请求。

实现

因为我想把代码部署到云服务器上,但是项目域名没有备案的,所以购买服务器的地域选择了 香港

但是众所周知的原因,国内某些大厂云服务器商,回国线路很差,丢包、连不上,所以套了个 Cloudflare 加速访问

所以最终架构如下:

test.www.codesou.cn 是代理域名

www.codesou.cn 是项目域名

  • 访问 test.www.codesou.cn
    • Nginx 转发到 test.app
  • 访问 www.codesou.cn
    • Nginx 转发到 product.app

所以 Nginx 配置如下:

server
{
    listen 80;
    server_name test.www.codesou.cn www.codesou.cn;

    set $_proxy_host '';

    if ( $host = "test.www.codesou.cn" ) {
        set $_proxy_host test.app;
    }

    if ( $host = "www.codesou.cn" ) {
        set $_proxy_host product.app;
    }