<p>当我使用 <strong>Nginx</strong> 进行反向代理服务时,通常的做法是为每个服务分配一个 <strong>子域名</strong>,这样每个服务都可以从 <code>/</code> 开始处理 URI。比如以下配置:</p><br><pre data-code-wrap="nginx"><code class="lang-nginx">server {<br>    listen 443 ssl;<br><br>    server_name share.example.cn;<br><br>    ssl_certificate      "/etc/nginx/conf.d/cert/example.cn/cert.pem";<br>    ssl_certificate_key  "/etc/nginx/conf.d/cert/example.cn/key.pem";<br><br>    location / {<br>        proxy_pass http://shlink:8080/;<br>        proxy_set_header Host $host;<br>        proxy_redirect off;<br>        proxy_set_header X-Real-IP $remote_addr;<br>        proxy_set_header X-Scheme $scheme;<br>        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br>        proxy_set_header X-Forwarded-Proto $scheme;<br>    }<br>}<br><br>server {<br>    listen 443 ssl;<br><br>    server_name link.example.cn;<br><br>    ssl_certificate      "/etc/nginx/conf.d/cert/example.cn/cert.pem";<br>    ssl_certificate_key  "/etc/nginx/conf.d/cert/example.cn/key.pem";<br><br>    location / {<br>        alias /usr/share/nginx/html/link.example.cn/;<br>        index index.html;<br>    }<br>}<br></code></pre><br><p>但是这个配置有点不方便,因为这是一个前后端分离的服务,使用两个子域名不仅不便管理,还需要处理跨域问题。因此,我想把它们放在 <strong>同一个子域名</strong> 下。</p><br><p>于是,我修改了配置,简单地为管理端新增了 <code>/admin/</code> 的上下文路径:</p><br><pre data-code-wrap="nginx"><code class="lang-nginx">server {<br>    listen 443 ssl;<br><br>    server_name link.example.cn;<br><br>    ssl_certificate      "/etc/nginx/conf.d/cert/example.cn/cert.pem";<br>    ssl_certificate_key  "/etc/nginx/conf.d/cert/example.cn/key.pem";<br><br>    location / {<br>        proxy_pass http://shlink:8080/;<br>        proxy_set_header Host $host;<br>        proxy_redirect off;<br>        proxy_set_header X-Real-IP $remote_addr;<br>        proxy_set_header X-Scheme $scheme;<br>        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br>        proxy_set_header X-Forwarded-Proto $scheme;<br>    }<br><br>    location /admin/ {<br>        alias /usr/share/nginx/html/link.example.cn/;<br>        index index.html;<br>    }<br>}<br></code></pre><br><p>然而,这样的配置引入了一个问题:新增上下文的上游服务无法识别自己需要加上 <code>/admin</code> 前缀,导致虽然 <code>index.html</code> 可以访问,但请求相关静态资源时,路径仍然是没有 <code>/admin</code> 的,比如 <code>/server</code> 或 <code>/setting</code>,从而导致路由失败。因此,这个配置无法满足需求。</p><br><blockquote><br><p>前提是我 <strong>无法</strong> 修改上游服务的配置,或者我只有打包好的静态资源文件。</p><br></blockquote><br><p>在这种情况下,我是否有办法将两个服务反代到同一个子域名上呢?这个问题困扰了我很久,希望能够得到帮助。</p>
举报· 91 次点击
登录 注册 站外分享
6 条回复  
NaMei_ZZ 初学 2024-10-28 11:23:12
<p>换个思路,前端用/匹配,后端加子路径试试</p>
googleweb 初学 2024-10-28 11:23:12
<p>都前后端分离了,为啥不能通过路径location去做,前后端分离搞的路径还一样?那也是人才</p>
Lemon_Zuo 初学 2024-10-28 11:23:12
<p>需要动前端源代码的<img src="https://linux.do/images/emoji/apple/rofl.png?v=12" title=":rofl:" class="emoji" alt=":rofl:" loading="lazy" width="20" height="20"><img src="https://linux.do/images/emoji/apple/rofl.png?v=12" title=":rofl:" class="emoji" alt=":rofl:" loading="lazy" width="20" height="20">,有时候静态资源正常了,路由也有可能不正常,上个月某几个项目就合并到一个域名下,大改了一顿,ps一句前端项目用的vue​<img src="https://linux.do/images/emoji/apple/face_holding_back_tears.png?v=12" title=":face_holding_back_tears:" class="emoji" alt=":face_holding_back_tears:" loading="lazy" width="20" height="20"><img src="https://linux.do/images/emoji/apple/face_holding_back_tears.png?v=12" title=":face_holding_back_tears:" class="emoji" alt=":face_holding_back_tears:" loading="lazy" width="20" height="20"></p>
返回顶部