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

Ser*_*eum 16 proxypass apache-2.2 ubuntu-12.10

我一直在搜索谷歌,但在找到答案方面没有取得多大成功。我在 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 内部,但我并不完全确定。基本上,我对网络服务器设置知之甚少,我需要被这样对待。

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

编辑:为了澄清起见,应用程序已经可以通过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>
Run Code Online (Sandbox Code Playgroud)

小智 16

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

mod_proxy
mod_proxy_http
mod_ssl
Run Code Online (Sandbox Code Playgroud)

您可以通过以 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
Run Code Online (Sandbox Code Playgroud)

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

  • 页面资产未显示可能不是一个单独的问题。此处的 ProxyPass 指令仅适用于文档 (app1)。要代理 app1 目录及其所有内容,请添加尾部斜杠。`ProxyPass /app1/ https://localhost:9090/` 和 ProxyPassReverse 如果使用相同。其次,添加 RewriteRule redirect: `RewriteRule ^/app1$ /app1/ [R]` 作为 /app1 将不会被代理。 (2认同)