Apache 将某些 url 或子域重定向到内部 ip

Apache 将某些 url 或子域重定向到内部 ip

我的家庭网络上运行的 Web 服务器旁边有一个 gitlab 服务器。在我的 Web 服务器上,我运行带有一些域的 Apache2。 example.com 就是其中之一。现在我的目标是用户在访问 example.com/gitlab 或 gitlab.example.com 时收到 gitlab 登录页面。实际上我并不关心重定向是从某个 url 还是子域发生。我已经尝试了很多,但这些对我来说都不起作用(可能我一直都做错了)。

我还阅读了一些相关的论坛帖子,例如

但我没有启动并运行任何东西。

我的默认配置文件配置为始终将端口 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]

https://httpd.apache.org/docs/2.4/rewrite/proxy.html

相关内容