我的家庭网络上运行的 Web 服务器旁边有一个 gitlab 服务器。在我的 Web 服务器上,我运行带有一些域的 Apache2。 example.com 就是其中之一。现在我的目标是用户在访问 example.com/gitlab 或 gitlab.example.com 时收到 gitlab 登录页面。实际上我并不关心重定向是从某个 url 还是子域发生。我已经尝试了很多,但这些对我来说都不起作用(可能我一直都做错了)。
我还阅读了一些相关的论坛帖子,例如
- 使用apache虚拟主机将子域重定向到保留传递端口的内部IP
- 使用 Apache 的基于名称的虚拟主机重定向到内部 IP
- https://www.linuxquestions.org/questions/linux-server-73/apache-redirect-to-internal-server-919321/
- ...
但我没有启动并运行任何东西。
我的默认配置文件配置为始终将端口 80 重定向到端口 443 (HTTPS)。
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://www.example.com/
[...]
</VirtualHost>
所以这是我的example.com.conf前:
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/html/example.com
SSLEngine on
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/www.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
</VirtualHost>
首先我尝试重定向从某个网址。我补充道:
ProxyRequests Off
ProxyPass /gitlab http://192.168.0.115:80/
ProxyPassReverse /gitlab http://192.168.0.115:80/
这并不完全有效,但如果我输入网址,我会得到“404 在此服务器上找不到请求的 URL /users/sign_in”。 '/users/sign_in' 是我的 gitlab so 服务器的登录页面的路径,所以至少有些东西似乎有效。对我来说奇怪的是,如果我将根目录重定向到我的内部IP,它就会起作用:
ProxyRequests Off
ProxyPass / http://192.168.0.113:80/
ProxyPassReverse / http://192.168.0.113:80/
这有效,但现在我无法再访问我的实际网站。
然后我尝试重定向来自子域。我补充道:
<VirtualHost *:443>
ServerName gitlab.example.com
ProxyPass / http://192.168.0.113/
ProxyPassReverse / http://192.168.0.113/
</VirtualHost>
但我收到“网站无法访问”。我什至没有运行子域。
答案1
可能必须使用 mod_rewrite 来删除 /gitlab 位。就像是:
rewriteBase "/gitlab"
rewriteRule "^gitlab/(.*)" "http:/192.168.0.113/$1" [P]