【问题标题】:Can't configure nginx location(use rewrite)?无法配置 nginx 位置(使用重写)?
【发布时间】:2021-04-09 20:31:44
【问题描述】:

我有一台运行 nginx 的服务器,可以通过 80 端口访问 Internet。假设我的服务器的外部 IP 地址是 8.41.37.217,我有一个域 srv.vvzvlad.xyz,它指向这个地址.因此,当我在浏览器中打开 h[tt]p://srv.vvzvlad.xyz 时,我会看到 nginx 欢迎页面。到目前为止一切正常。

我在服务器上运行了 docker,其中包含一些实现 Web 应用程序的容器。 docker 容器内的这些应用程序打开端口 80,而容器外部(来自内部网络)这些端口可用作 3333 或 4444 或类似端口。因此,通过在浏览器中使用端口 3333 打开本地服务器地址(192.168.88.111),我可以访问运行 wiki 的 docker 容器的端口:h[tt]p://192.168.88.111:3333 重定向到 10.0 .0.2:80,其中 10.0.0.2 是 docker 容器的内部地址。这也有效。

现在我想从 Internet 访问这些 docker 容器。我可以只打开路由器上的端口,然后转到 h[tt]p://srv.vvzvlad.xyz:3333 之类的地址,但是一些发送请求的软件不知道如何处理除 80/443 之外的端口. 这就是为什么我在 nginx 上设置了一些位置(参见第一段),这些位置将 h[tt]p://srv.vvzvlad.xyz(:80)/wiki 之类的 URL 重定向到 h[tt]p://192.168.88.111 :3333。

我是这样做的:

server {
    listen 80;
...
    location /wiki {
        proxy_pass h[tt]p://192.168.88.111:3333;
    }
...
}

我刚才描述的网络结构如下所示: https://habrastorage.org/webt/ud/va/8p/udva8p6ggl_ojb3cde-yessdnmk.png

此方案有效,但添加到应用程序“/wiki”内的任何地址。因此,应用程序的地址是 h[tt]p://192.168.88.111:3333/index 中的 h[tt]p://srv.vvzvlad.xyz/wiki/index。对于某些应用程序,这可以正常工作。但有些应用程序希望只在 Web 服务器的根目录下运行。它们可以直接使用地址 h[tt]p://srv.vvzvlad.xyz (h[tt]p://srv.vvzvlad.xyz/index),但不能使用添加的地址 (h[tt] p://srv.vvzvlad.xyz/wiki/index),因为他们仍然在内部使用指向其资源的绝对链接,例如 h[tt]p://srv.vvzvlad.xyz/favicon.png,这当然不在“location /”,但仅限于“location /wiki”。

我该如何解决这个问题? 我尝试过使用重写(例如“rewrite ^/wiki/(.*)$ h[tt]p://192.168.88.111:3000/$1;”),但应用程序请求的资源仍然没有 /wiki: https://habrastorage.org/webt/zj/s4/oa/zjs4oazs7ywo10c_zffxs8pkpnw.png

【问题讨论】:

    标签: docker nginx url-rewriting


    【解决方案1】:

    对两者都使用尾部斜杠应该对大多数人都有帮助。否则玩弄斜线..总是很痛苦..

     location /wiki/ {
            proxy_pass http://192.168.88.111:3333/;
    

    /wiki 正在为所有术语 wiki* 进行正则表达式 *

    还有一种可能:

     location ~* /wiki/(.*)$ {
            proxy_pass http://192.168.88.111:3333/$1;
    

    如果之后在浏览器中无法访问 /wiki(没有斜杠):

     location /wiki {
            return 308 http://$host/wiki/
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-04
      • 2016-04-19
      • 2014-12-06
      • 2016-02-14
      • 2012-04-16
      • 2016-05-30
      相关资源
      最近更新 更多