标签: mod-proxy

AJP 1.3连接器全局监听端口8009,为什么以及如何将其关闭?

我用Apache 2和mod_proxy设置了一个Tomcat 6.现在我在server.xml中有这个默认值:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
Run Code Online (Sandbox Code Playgroud)

netstat看起来像这样:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      4703/apache2    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1020/sshd       
tcp        0      0 127.0.0.1:8005          0.0.0.0:*               LISTEN      10517/java      
tcp        0      0 0.0.0.0:8009            0.0.0.0:*               LISTEN      10517/java      
tcp        0      0 127.0.0.1:8009          127.0.0.1:48704         ESTABLISHED 10517/java      
tcp        0      0 127.0.0.1:48704         127.0.0.1:8009          ESTABLISHED 11696/apache2   
Run Code Online (Sandbox Code Playgroud)

我现在的问题是,AJP是否有必要在全球范围内收听8009端口,我不这么认为?!以及如何关闭它?

tomcat mod-proxy ajp

11
推荐指数
1
解决办法
3万
查看次数

ProxyPreserveHost似乎对我没什么用

我在网上看到很多人指的是ProxyPreserveHost On确保代理后端接收原始呼叫者的主机名.我使用它来收紧我的Web应用程序的安全性(Java,Tomcat),如果我的日志显示用户实际所在的位置也会很好.我的Tomcat日志现在显示了这个 - 相当无用:

127.0.0.1 - - [17/Mar/2013:06:32:13 +0100] "GET /webapp/frontend/app/partials/welcome.html HTTP/1.1" 200 54
Run Code Online (Sandbox Code Playgroud)

这是我的配置,显然不能按预期工作:

"/ 000-缺省的/ etc/apache2的/启用的站点 - "

<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass /webapp http://localhost:8080/webapp
ProxyPassReverse /webapp http://localhost:8080/webapp
RewriteEngine On
RewriteRule ^/$            /webapp/frontend/app/ [proxy]
RewriteRule ^/webapp/$     /webapp/frontend/app/ [redirect]
RewriteRule ^/webapp/app/$ /webapp/frontend/app/ [redirect]
Run Code Online (Sandbox Code Playgroud)

(从这里开始的默认内容000-default)

启用模块:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod rewrite
Run Code Online (Sandbox Code Playgroud)

这是运行Apache HTTPD 2.2.22的Ubuntu 12.10.

非常感谢您的帮助.

apache mod-proxy

11
推荐指数
1
解决办法
4万
查看次数

使用websocket mod_proxy_wstunnel反向代理

我有一个Web套接字和我的反向代理Apache的问题,我已经在最新版本2.4.5升级并加载了模块mod_proxy_wstunnel.

httpd.conf:

<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName www.toto.fr
ServerAlias toto.fr


ProxyPass /my_app  http://1X.X.X.1:8080/my_app
ProxyPassReverse /web_pmr  http://1X.X.X.1:8080/my_app
ProxyPassReverseCookiePath /my_app /
ProxyPassReverseCookieDomain localhost my_app
ProxyRequests off
ProxyTimeout 15

#WEBSOCKETS


ProxyPass /my_app/BasicWebsocketServlet ws://1X.X.X.1:8080/my_app/BasicWebsocketServlet retry=0
ProxyPassReverse /my_app/BasicWebsocketServlet ws://1X.X.X.1:8080/web_pmr/BasicWebsocketServlet retry=0


ErrorLog "logs/my_app_error.log"
LogLevel debug
CustomLog "logs/my_app_access.log" combined
<Proxy *>
      Order deny,allow
      Allow from all
</Proxy>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

当我在本地URL中测试时,websockets正在运行,但是使用反向代理Apache,Tomcat日志中没有跟踪.

reverse-proxy apache2 mod-proxy websocket

11
推荐指数
1
解决办法
3万
查看次数

使用Apache mod_proxy的风险

我现在正在探索使用Apache的mod_proxy指令,例如ProxyPass,作为跨域脚本限制(对于html/ajax/flash代码)的解决方案的一部分.但是,我担心通过启用mod_proxy,我会冒险将服务器作为开放代理.

简而言之,风险是什么,以及如何最大限度地降低风险?

谢谢.

apache mod-proxy

10
推荐指数
1
解决办法
2388
查看次数

apache代理模块给出403禁止错误

我正在尝试使用apache的代理模块在ubuntu桌面上使用xmpp.为此,我做了以下事情 -

1)通过在mods-enabled目录中的/ etc/apache2/mods-available /创建proxy.conf,proxy.load和proxy_http.load的符号链接来启用mod_proxy.

2)在vhost中添加以下行

    <Proxy http://mydomain.com/httpbind>
     Order allow,deny
     Allow from all
   </Proxy>

   ProxyPass /httpbind http://mydomain.com:7070/http-bind/
   ProxyPassReverse /httpbind http://mydomain.com:7070/http-bind/
Run Code Online (Sandbox Code Playgroud)

我是新手使用代理模块,但我可以从上面的行中做出的是将请求http://mydomain.com/httpbind转发到http://mydomain.com:7070/http-bind/.如果错了,请更正.

3)Allow from .mydomain.com在/mods-available/proxy.conf中添加了规则

现在我尝试访问http://mydomain.com/httpbind它显示403 Forbidden错误..

我在这里失踪了什么?请帮忙.谢谢

编辑:当我在mods_available/proxy.conf中更改以下代码时问题得到解决

    <Proxy *>
            AddDefaultCharset off
            Order deny,allow
    Deny from all 
    Allow from mydomain.com                        
    </Proxy>
Run Code Online (Sandbox Code Playgroud)

    <Proxy *>
            AddDefaultCharset off
            Order deny,allow
    #Deny from all 
    Allow from all                         
    </Proxy>
Run Code Online (Sandbox Code Playgroud)

虽然没有得到初始代码的错误

xmpp apache2 mod-proxy

10
推荐指数
2
解决办法
2万
查看次数

如何将Apache URI重写/代理到侦听特定端口/服务器的应用程序?

他们说Apache的mod_rewrite是URL操纵的瑞士军刀,但它能做到吗?

假设我想在我的Apache网络服务器中添加一个新的应用程序,其中该应用程序唯一可配置的选项是端口号.

我想使用&提供" http://hostname.example.com/app " 形式的网址,而不是" http://hostname.example.com:8080 ".这将确保客户也能通过该机构的防火墙,而且通常更整洁.

我的应用程序包括php,javascript和css中的绝对URI,因此我想将自己的根位置添加到应用程序内部链接中的URI.我无法访问DNS记录,因此无法创建另一个基于名称的虚拟服务器.

使用Apache的mod_rewrite和mod_proxy模块,我可以透明地将客户端重定向到应用程序的正确主页.但该主页中的链接并未将客户端指向相对于新基本URL的链接.

那么,将请求代理到正在侦听特定端口的应用程序的最佳方法是什么?

例如,如果我有一个应用程序侦听端口8080,我可以把它放在我的Apache配置中: -

<VirtualHost *:80>
    SSLProxyEngine On
    ServerName myhost.example.com
    RewriteEngine On
    UseCanonicalName On
    ProxyVia On
    <Location "/application">
        RewriteRule ^/application/?(.*) http://localhost:8080/$1 [P,L]
    </Location>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

如果应用程序不使用绝对URL,这可以正常工作,但确实如此.我需要做的是重写应用程序的css,javascript和php返回的URL.

我查看了ProxyPass和ReverseProxyPass文档,但我认为这些不会起作用..?

我也遇到过Nick Kew的mod_proxy_html,但这并没有包含在标准的Apache发布版中,而且我的机构的网络服务器似乎没有它好多年..除了手动拖网(或使用grep -r | sed)通过应用程序的源代码,或使用此第三方加载项,类型表达式,还有其他方法可以解决这个问题吗?

我可以在mod_rewrite规则中使用一些内部服务器变量吗?例如,基于'HTTP_REFERER'的重写规则?

apache mod-rewrite port mod-proxy

10
推荐指数
1
解决办法
3万
查看次数

Apache httpd 2.4反向代理不压缩

使用Apache httpd 2.2,可以设置反向代理并使用mod_deflate压缩代理内容,以表达Accept-Encoding: gzip标题.

此配置足以使其工作:

    LoadModule deflate_module modules/mod_deflate.so
    LoadModule filter_module modules/mod_filter.so
    SetOutputFilter DEFLATE

    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
    ProxyRequests Off
    ProxyPass        /tomcat http://localhost:8880/
    ProxyPassReverse /tomcat http://localhost:8880/
    ProxyPass        /other  http://localhost:8001/
    ProxyPassReverse /other  http://localhost:8001/
Run Code Online (Sandbox Code Playgroud)

现在升级到2.4(Windows上为2.4.29)后,接受相同的配置,它确实压缩了DocumentRoot提供的静态内容.但是,当通过ProxyPass检索时,相同的内容将以未压缩的形式返回.

我知道我可以配置Tomcat来进行压缩,但是还有另一个服务器忽略了Accept-Encoding头.

如何设置反向代理,并压缩代理内容?

编辑:

以下是返回的标头,证明代理内容未被2.4服务器压缩:

----- Retrieving uncompressed from DocumentRoot ---------------------------------

C:\Temp>curl -I http://localhost/test.txt 
HTTP/1.1 200 OK
Date: Tue, 09 Jan 2018 17:11:59 GMT
Server: Apache/2.4.29 (Win64) OpenSSL/1.1.0g
Last-Modified: Fri, 05 Jan 2018 12:58:40 GMT
ETag: "75441-5620701eb471c"
Accept-Ranges: bytes
Content-Length: 480321
Vary: Accept-Encoding
Content-Type: text/plain …
Run Code Online (Sandbox Code Playgroud)

apache mod-deflate mod-proxy

10
推荐指数
1
解决办法
2431
查看次数

如何为除apache2之外的所有路径设置代理位置?

我的网络服务器上运行了几个webapp:

  • SVN资源库浏览器,可通过 https://beta.mydomain.tld/svn/repos
  • Trac实例,可通过访问 https://beta.mydomain.tld/trac
  • 我自己的java Web应用程序,可通过http://beta.mydomain.tld/端口8080上的本地Apache Tomcat的代理访问

请注意,前两个可通过SSL获得,第三个不是(尚未).现在我需要通过https提供我的网络应用程序,但我希望Trac和SVN浏览器仍可在其当前位置访问.

即我想配置的Apache2代理所有请求没有开始svntrac到Tomcat.

对于现有的SSL Web应用程序,有以下配置

    <Location /svn/repos>
        DAV svn
        SVNParentPath /home/myuser/svn
        SVNListParentPath on
        AuthType Basic
        AuthName "Subversion repository"
        AuthUserFile /home/myuser/.htpasswd
        Require valid-user
    </Location>

    <Location /trac>
        SetHandler mod_python
        PythonHandler trac.web.modpython_frontend
        PythonOption TracEnvParentDir /home/myuser/trac
        PythonOption TracUriRoot /trac
        AuthType Basic
        AuthName "Trac"
        AuthUserFile /home/myuser/.htpasswd
        Require valid-user
    </Location>
Run Code Online (Sandbox Code Playgroud)

我试图添加以下位置,但它没有任何帮助...

    <Location />
        ProxyPass           http://localhost:8080
        ProxyPassReverse    http://localhost:8080/
    </Location>
Run Code Online (Sandbox Code Playgroud)

有关更多信息,这里是关于SSL部分的完整apache2配置(没有任何我失败的试验 - 我认为它是默认的trac配置):

<VirtualHost *:443>
    ServerAdmin webmaster@localhost
    ServerName beta.mydomain.tld:443

    DocumentRoot /var/www/
    <Directory /var/www/>
            Options Indexes …
Run Code Online (Sandbox Code Playgroud)

apache2 virtualhost mod-proxy

9
推荐指数
1
解决办法
2万
查看次数

httpd mod_proxy_balancer故障转移failonstatus - 透明切换

我使用mod_proxy_balancer来管理后端服务器的故障转移.后端服务器可能会返回错误代码,而不是在某些其他后端服务失败时(例如NFS)超时,我们希望此类服务器也被标记为失败的节点.因此我们使用failonstatus指令.

<Proxy balancer://avatar>
    ProxySet failonstatus=503 
    BalancerMember http://active/ retry=30
    # the hot standby
    BalancerMember http://standby/ status=+H retry=0
</Proxy>
Run Code Online (Sandbox Code Playgroud)

目前,故障转移与一个故障完美配合.当活动节点发生故障时,用户会收到503错误,并且从下一个请求中,备用服务器将接管.

我甚至不希望一个请求失败.无法将mod_proxy故障转移到客户端并返回错误?如果活动节点出现故障,我希望mod_proxy为同一个请求尝试待机,而不仅仅是后续请求!

apache failover reverse-proxy mod-proxy mod-proxy-balancer

9
推荐指数
1
解决办法
1万
查看次数

Apache 2.4 + php-fpm - AH01071:收到错误'主要脚本未知\n'mod_proxy_balancer

我在我的Ubuntu 14.04中使用php-fpm 5.5.9配置Apache 2.4.9.我想要的是为php-fpm请求制作一个平衡器,但它会抛出以下错误:

AH01071: Got error 'Primary script unknown\n'

当我尝试访问我的PHP文件.似乎代理平衡器不会抓取ProxyPassMatch传递给它的文档根目录.我正在使用UDS使apache访问php-fpm套接字而不是使用网络tcp.

如果我配置它没有平衡器,一切正常.

作品

ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/var/run/php5-fpm.sock1|fcgi://./var/www/html
Run Code Online (Sandbox Code Playgroud)

不工作

ProxyPassMatch ^/(.*\.php(/.*)?)$ balancer://localhost/var/www/html
<Proxy balancer://localhost/>
    BalancerMember unix:/var/run/php5-fpm.sock1|fcgi://localhost:9001
    BalancerMember unix:/var/run/php5-fpm.sock2|fcgi://localhost:9002
    BalancerMember unix:/var/run/php5-fpm.sock3|fcgi://localhost:9003
    BalancerMember unix:/var/run/php5-fpm.sock4|fcgi://localhost:9004
</Proxy>
Run Code Online (Sandbox Code Playgroud)

这是平衡器的配置日志:

[Sun Jun 15 12:32:30.839726 2014] [authz_core:debug] [pid 12217:tid 140330025703168] mod_authz_core.c(828): [client 10.1.1.2:52526] AH01628: authorization result: granted (no directives)
[Sun Jun 15 12:32:30.839899 2014] [lbmethod_byrequests:debug] [pid 12217:tid 140330025703168] mod_lbmethod_byrequests.c(97): AH01207: proxy: Entering byrequests for BALANCER (balancer://localhost)
[Sun Jun 15 12:32:30.839915 2014] [lbmethod_byrequests:debug] [pid 12217:tid 140330025703168] mod_lbmethod_byrequests.c(144): AH01208: proxy: byrequests …
Run Code Online (Sandbox Code Playgroud)

php mod-proxy mod-proxy-balancer apache2.4

9
推荐指数
1
解决办法
1万
查看次数