Nginx 通过 /api 前缀和二级域名进行反向代理

当我们在一台服务器上 启动多个服务时, 因为在 http 协议下默认端口是 80 端口, https 下默认是 443 端口,为了好记和美观我们 只能对外暴漏
这两个端口。

http 协议 为例

假设我 有个后台服务在 127.0.0.1:3000

这个服务里面有个接口 /aaa/bbb

如果你的 后台服务启动到 3000 端口

http://xxxx.com:3000/aaa/bbb 这样也是可以访问的但是,不好记也不美观.

访问时 希望

http://xxxx.com/api/aaa/bbb

http://api.xxxx.com/aaa/bbb

所以我们得 让 Nginx 启动到 80 端口上, 然后 Nginx 通过 /api 前缀 或 二级域名 来进行代理到 目标服务

nginx.conf 配置

nginx.conf


...

http {

    ...

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
        
        ...
        
        # api 前缀代理 配置代码
        # 将 /api/ 接口代理到 node 服务 127.0.0.1:3000/
        # /api/ 回被 替换成 / 这样到 目标服务器时 path 中就没有 /api 了

        location /api/ {
            proxy_pass   http://127.0.0.1:3000/;
        }
        ...
    }

    ...
    
    # 二级域名代理 配置代码
    # 将 api.kycloud.xyz 域名 代理到  后台接口服务 127.0.0.1:3000
    server {
        listen          80;
        server_name     api.ykcloud.xyz;

        # 访问日志 访问这个域名的日志 都会被记录到 nginx 目录下的 logs/api.ykcloud.access.log 下
        # 这里如果不指定单独的 log 文件, nginx 也会有一个总的(有请求进来) log文件 logs/access.log
        # 所以 如果不想单独记录这里可以注释
        # access_log  logs/api.ykcloud.access.log;

        location / {
            proxy_pass  http://127.0.0.1:3000;
            # 其它代理配置
            # 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;
        }
    }
    
    ...
}

实际中这两种方式选择一种就可以了.

还想到一种 代理方式就是 通过 正则表达式 配置 非静态资源代理到 后端服务. 我比较喜欢通过 二级域名 进行代理,这个就先不研究了.

附: location 配置模式
Nginx 通过 /api 前缀和二级域名进行反向代理

参考

nginx反向代理二级域名注意事项

Nginx - 代理后端通过域名访问

上一篇:互联网早报:京东健康宠物医院上线:注册医生超3000名 提供7X24在线健康咨询服务


下一篇:利用人性做生意,女装店做营销:有钱人可以免费穿?颠覆式营销!