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


我一直在搜索谷歌,并没有找到答案的成功。我在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>

10
2018-01-25 18:53




您可以发布用于设置它的配置指令的输出吗?如果他们在vhost中,你可以发布整个vhost吗? - Marcos Velazquez
设置了什么?港口?端口都是通过各自程序的UI设置的,我正在寻找一种方法来避免在访问我的服务器上的每个应用程序时输入端口。我可以挖掘应用程序以查看我能找到的内容,但端口通常只存储在config.ini文件中 - Serneum
不,那不是。我的意思是,如果你正在使用ProxyPass和其他东西,你必须将它们放在一个虚拟主机中,对吧?如果是这样,你可以发布整个vhost内容吗?即 <VirtualHost 10.0.0.1:80 > ServerName server.domain.com DocumentRoot /usr/local/apache/htdocs </VirtualHost> - Marcos Velazquez
为了在寻求帮助之前得到一个干净的名单,我已经撤消了我的大部分修改。我刚刚添加了/ etc / apache2 / sites-available / default文件,我根据我在各种其他网站/搜索中看到的内容添加了代理内容 - Serneum


答案:


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

mod_proxy
mod_proxy_http
mod_ssl

您可以通过以root身份运行以下命令来检查(假设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/app1 要么 http://mydomain.com/app1 假设mydomain.com指向localhost。


10
2018-01-25 21:43



和以前一样的问题,我不知道如何安装mod_proxy和a2enmod mod_proxy说mod_proxy不存在。我将继续寻找如何获得这3个mod,以便我可以让事情发挥作用。话虽这么说,我现在正在运行proxy,proxy_http和ssl。如果这些是我需要的,那么这个解决方案似乎仍然不起作用。我得到一条Forbidden消息,我认为这可能与“允许来自127.0.0.1”有关但我不完全确定 - Serneum
旁注,mydomain.com指向我的外部IP而不是localhost。我已经尝试将localhost:9090更改为我的ip:9090,但没有成功。是“允许来自”和“本地主机“在ProxyPass相对于服务器旁边或相对于试图访问它的内容? - Serneum
通过暂时允许所有工作。缺点是页面上没有出现css等,但这是我将单独查看的完全独立的问题。谢谢。 - Serneum
我需要添加哪个配置文件 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