ProxyPass:将目录URL重定向到非标准端口


13

我一直在搜索Google,但没有找到成功的答案。我在Ubuntu上运行服务器,并且安装了使用各种非标准端口的程序。每个服务器使用不同的端口,在我的情况下分别是9090、9091、9092、9093和9094。我设置了一个apache服务器,并拥有一个域名,该域名现在可以访问我的服务器,而不必键入我的IP地址。我正在寻找一种创建目录的方法,该目录可以指向我列出的不同端口。我想要类似的东西:

https://www.mydomain.com/app1
https://www.mydomain.com/app2
http://www.mydomain.com/app3

有些端口通过SSL传输,有些则不是,我只是按顺序整理(9090-9094),以便于我方便使用。我想将/ app1指向SSL端口9090,将/ app2指向SSL端口9091,将/ app3指向非SSL端口9092。是否有一种简单的方法?我已经尝试根据其他帖子添加ProxyPass之类的东西,但是没有任何效果。我需要添加一个新站点吗?

另外,如果这涉及到编辑文件(我希望这样做),那么如果您可以列出文件的默认位置以及在何处添加内容,将不胜感激。我一直看到有人说要添加ProxyPass,所以我只是假设它在VirtualHost内,但是我不确定。基本上,我对Web服务器设置知之甚少,因此需要这样对待。

对于不正确的标签,我们深表歉意,感谢您花时间阅读该帖子以及您可以提供的任何帮助。

编辑:为澄清起见,应用程序已经可以通过https://www.mydomain.com:9090等访问。我只想使用一种方法来https://www.mydomain.com/appName访问这些应用程序发布的相同位置/页面。

编辑2:从/ etc / apache2 / sites-available / default

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPass /app1 https://localhost:9090/
    ProxyPassReverse /app1 https://localhost:9090/
</VirtualHost>

您可以发布用于设置此设置的配置指令的输出吗?如果它们在虚拟主机中,您可以发布整个虚拟主机吗?
Marcos Velazquez 2013年

设置什么?端口?端口都是通过各自程序的UI设置的,我正在寻找一种避免访问服务器上每个应用程序时必须键入端口的方法。我可以浏览应用程序以查看可以找到的内容,但是端口通常只是存储在config.ini文件中
Serneum 2013年

不,不是那样。我的意思是,如果您正在使用ProxyPass和其他功能,则必须将它们放置在虚拟主机中,对吗?如果可以,您是否可以发布整个虚拟主机内容?即 <VirtualHost 10.0.0.1:80 > ServerName server.domain.com DocumentRoot /usr/local/apache/htdocs </VirtualHost>
Marcos Velazquez

我已撤消大部分更改,以便在寻求帮助之前获得一份干净的名单。我刚刚添加了我拥有的/ etc / apache2 / sites-available / default文件,并根据在其他各个站点/搜索中看到的内容在末尾添加了Proxy内容
Serneum 2013年

Answers:


13

确保已安装并加载以下apache模块:

mod_proxy
mod_proxy_http
mod_ssl

您可以通过以超级用户身份运行以下命令来检查(假设httpd在$ PATH中)

httpd -t -D DUMP_MODULES

之后,尝试将您的配置更改为以下内容:

ProxyRequests Off
<Proxy *>
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Proxy>
SSLProxyEngine on
ProxyPass /app1 https://localhost:9090
ProxyPassReverse /app1 https://localhost:9090

如果您访问http://localhost/app1http://mydomain.com/app1假设mydomain.com指向localhost,则代理现在应该可以工作。


和以前一样,我不知道如何安装mod_proxy,而a2enmod mod_proxy表示mod_proxy不存在。我将继续寻找如何获得这3个mod,以便让我的东西正常工作。话虽如此,我现在确实正在运行proxy,proxy_http和ssl。如果这些是我所需要的,那么此解决方案似乎仍然行不通。我收到一条禁止的消息,我认为它可能与“允许自127.0.0.1”有关,但我不确定
Serneum 2013年

旁注,mydomain.com指向我的外部IP,而不是本地主机。我尝试将localhost:9090更改为我的ip:9090,但没有成功。是相对于服务器还是相对于尝试访问它的代理服务器而言,ProxyPass旁边的“允许来自”和“ 本地主机 ”?
Serneum 2013年

通过暂时允许所有人操作来使其正常工作。缺点是页面上没有css等,但这是我自己要研究的完全独立的问题。谢谢。
Serneum 2013年

我需要添加到哪个配置文件ProxyRequests Off <Proxy *> Order deny,allow Deny from all Allow from 127.0.0.1 </Proxy> SSLProxyEngine on ProxyPass /app1 https://localhost:9090 ProxyPassReverse /app1 https://localhost:9090
kiltek

页面资产未显示可能不是单独的问题。这里的ProxyPass指令仅适用于文档(app1)。要使用所有内容代理到app1目录,请添加斜杠。ProxyPass /app1/ https://localhost:9090/与ProxyPassReverse(如果使用)相同。其次,添加RewriteRule redirect:RewriteRule ^/app1$ /app1/ [R]因为/ app1不会被代理。
papo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.