Nginx 通过 /api 前缀和二级域名进行反向代理
<p>当我们在一台服务器上 启动多个服务时, 因为在 http 协议下默认端口是 80 端口, https 下默认是 443 端口,为了好记和美观我们 只能对外暴漏<br>这两个端口。</p>
<p>以 <code>http</code> 协议 为例</p>
<p>假设我 有个后台服务在 <code>127.0.0.1:3000</code></p>
<p>这个服务里面有个接口 <code>/aaa/bbb</code></p>
<p>如果你的 后台服务启动到 <code>3000</code> 端口</p>
<p><code>http://xxxx.com:3000/aaa/bbb</code> 这样也是可以访问的但是,不好记也不美观.</p>
<p>访问时 希望</p>
<p><code>http://xxxx.com/api/aaa/bbb</code></p>
<p>或</p>
<p><code>http://api.xxxx.com/aaa/bbb</code></p>
<p>所以我们得 让 <code>Nginx</code> 启动到 <code>80</code> 端口上, 然后 <code>Nginx</code> 通过 <code>/api</code> 前缀 或 <code>二级域名</code> 来进行代理到 <code>目标服务</code></p>
<h3 id="nginxconf-配置">nginx.conf 配置</h3>
<p>nginx.conf</p>
<pre><code class="language-text">
...
http {
...
server {
listen 80;
server_namelocalhost;
#charset koi8-r;
#access_loglogs/host.access.logmain;
location / {
root html;
indexindex.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_loglogs/api.ykcloud.access.log;
location / {
proxy_passhttp://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;
}
}
...
}
</code></pre>
<p>实际中这两种方式选择一种就可以了.</p>
<p>还想到一种 代理方式就是 通过 <code>正则表达式</code> 配置 非静态资源代理到 <code>后端服务</code>. 我比较喜欢通过 <code>二级域名</code> 进行代理,这个就先不研究了.</p>
<p>附: location 配置模式<br>
<img src="https://img2020.cnblogs.com/blog/1249006/202110/1249006-20211017132137537-12412294.png" alt="" loading="lazy"></p>
<h3 id="参考">参考</h3>
<p>nginx反向代理二级域名注意事项</p>
<p>Nginx - 代理后端通过域名访问</p><br><br>
来源:https://www.cnblogs.com/taohuaya/p/15416781.html
頁:
[1]