【问题标题】:web apps on localhost on different ports accessed via port 80本地主机上的 Web 应用程序在通过端口 80 访问的不同端口上
【发布时间】:2010-03-09 01:57:36
【问题描述】:

在我的笔记本电脑上,使用 Apache

我在笔记本电脑的不同目录中有不同的网络应用程序,我可以开始使用简单的网络服务器监听不同的端口。例如

~/app1/./app.pl
>> listening on http://localhost:3000/

~/app2/./app.pl
>> listening on http://localhost:3001/

~/app3/./app.pl
>> listening on http://localhost:3001/

我想像这样从我的浏览器访问上述内容

http://localhost/app1
http://localhost/app2
http://localhost/app3

我可以用 mod_proxy 做上述事情吗?如果有,怎么做?

更新:我必须补充一点,我已经在 Google 上搜索了 mod_proxy,阅读了 Apache 网站上的教程,并尝试了以下内容

在我的 httpd.conf 中取消注释以下内容

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so

在我的 httpd.conf 中添加了以下内容

<IfModule mod_proxy.c>
    ProxyRequests On
    ProxyPass /app1 http://localhost:3000/
    ProxyPassReverse /app1 http://localhost:3000/
    ProxyPass /app2 http://localhost:3001/
    ProxyPassReverse /app2 http://localhost:3001/
    ProxyPass /app3 http://localhost:3002/
    ProxyPassReverse /app3 http://localhost:3002/
</IfModule>

然而,当我尝试访问上述应用程序时,我得到了 HTTP 404。

【问题讨论】:

    标签: web port mod-proxy


    【解决方案1】:

    我会使用 mod_rewrite 和 mod_proxy 来做到这一点。例如(以下规则 进入您的 VirtualHost 配置):

    RewriteEngine On
    RewriteRule ^/app1(.*)$ http://localhost:3000/$1 [P]
    RewriteRule ^/app2(.*)$ http://localhost:3001/$1 [P]
    RewriteRule ^/app3(.*)$ http://localhost:3002/$1 [P]
    

    这些规则使用 mod_rewrite 的 [P] 标志来代理请求。你需要做 通过添加/取消注释,确保 mod_proxy、mod_proxy_http 和 mod_rewrite 都加载到您的主 apache 配置中:

    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
    LoadModule rewrite_module modules/mod_rewrite.so
    

    【讨论】:

    • 好的,让我直说...我需要使用 mod_proxy with mod_rewrite 吗?
    • 是的,您需要同时启用 mod_proxy 和 mod_rewrite 才能使其工作。您可以单独使用 mod_proxy (在像您这样的简单情况下可能会更好),但是 mod_rewrite 在映射 URL 时为您提供了更大的灵活性,因此它通常是我这项工作的首选。
    • 好的。你能一步一步拼写这个吗?如果您从我上面的注释中看到,我无法使用 mod_proxy 进行这项工作。我究竟做错了什么?我应该做什么?我不必担心映射 URL,因为我的 Web 应用程序自己会这样做。我只想将浏览器指向localhost/app1,但让Apache 在后台将其重定向到localhost:3000
    • 如何处理应用程序内部生成的链接?例如如果 app1 的 javascript 指向 /js 而实际上它应该指向 /app1/js,这将不起作用。不重写应用程序源代码怎么办?
    【解决方案2】:

    是的,你可以。谷歌搜索“mod_proxy 教程”有很多结果...

    如果您的服务器支持 AJP 协议,您尤其需要使用 mod_proxy_ajp。 (如Tomcat。)

    【讨论】:

    • 谢谢,但不,我什至不想靠近 Tomcat。
    • @punkish:这只是一个示例,Jetty 中也使用了 AJP。我没有说它只是 Tomcat。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多