当我们在一台服务器上 启动多个服务时, 因为在 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
... 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反向代理二级域名注意事项
Nginx - 代理后端通过域名访问