<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> |
|