我在安装了 ubuntu 服务器的服务器上遇到了一个非常奇怪的问题(我尝试过使用 ubuntu 服务器 16.04 和 17.04),该服务器在我的本地网络上运行。我将 gitlab 与 apache2 一起使用,设置如下:
我的 /etc/gitlab/gitlab.rb 文件如下所示:
external_url "http://localhost:17391"
我的站点的 apache 虚拟主机配置文件(我们称之为“example.com”)如下所示:
<VirtualHost *:80>
ProxyPass / http://localhost:17391
ProxyPassReverse / http://localhost:17391
</VirtualHost>
本质上,我正在获取 apache 接收的全部流量并将其重定向到 nginx。我可以查看'http://example.com' 在 Web 浏览器中(当然,我必须通过代理访问该网站,因为服务器与我的 PC 在同一个本地网络上运行)并且一切正常(登录、查看存储库等)。当我尝试通过在终端中运行以下命令克隆到 PC 上的存储库时,我收到一条错误消息:
$ git clone http://example.com/user/repoName
Cloning into repoName...
fatal: repository 'http://example.com/user/repoName' not found
但是,当我尝试使用服务器的本地 IP(假设为 192.168.1.100)而不是域进行相同操作时,它似乎有效:
$ git clone http://192.168.1.100/user/repoName
Cloning into repoName
Warning: redirecting to http://192.168.1.100/user/repoName.git
remote: counting objects: 3, done
remote: total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done
因此我认为它不起作用的原因可能是当我在同一个本地网络上时无法通过域访问服务器。
但奇怪的是:
当我尝试完全相同的设置,但 apache 不是监听端口 80,而是监听另一个端口 17392 时,两个命令都成功克隆到 repo 中。
提前感谢您的帮助!
答案1
虽然我没有找到导致这种奇怪行为的原因,但我找到了解决问题的方法(实际上:我首先发现那里没有问题)。
我请一位朋友尝试运行该命令
git clone http://example.com/user/repoName
并且运行良好。因此,从服务器本地网络外部克隆到端口 80 上的 repo 的过程似乎运行良好,但从同一本地网络内部,必须使用本地 IP。