当我们在一台服务器上 启动多个服务时, 因为在 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 配置模式