我正在努力调试今天与混合mod_proxy和mod_rewrite一起相关的问题,我最终不得不使用balancer://mycluster它RewriteRule来停止从Apache接收404错误.我有两个问题:
1)有没有其他方法可以让重写的URL通过平衡器而不添加balancer://mycluster到RewriteRule?
2)有没有办法ProxyPass在<Proxy>or或RewriteRule?中定义我定义的所有参数(stickysession = JSESSIONID | jsessionid scolonpathdelim = On lbmethod = bytraffic nofailover = Off)?我担心匹配新的请求RewriteRule不会以与通过的方式相同的方式进行负载平衡ProxyPass(例如/app1/something.do)?
以下是httpd.conf的相关部分.我正在使用Apache 2.2.
<Proxy balancer://mycluster>
Order deny,allow
Allow from all
BalancerMember ajp://my.domain.com:8009 route=node1
BalancerMember ajp://my.domain.com:8009 route=node2
</Proxy>
ProxyPass /app1 balancer://mycluster/app1 stickysession=JSESSIONID|jsessionid scolonpathdelim=On lbmethod=bytraffic nofailover=Off
ProxyPassReverse /app1 ajp://my.domain.com:8009/app1
Run Code Online (Sandbox Code Playgroud)
...
RewriteRule ^/static/cms/image/(.*)\.(.*) balancer://mycluster/app1/$1.$2 [P,L]
Run Code Online (Sandbox Code Playgroud) 我正在尝试设置mod代理来阻止除特定域之外的所有流量.我可以使用ProxyBlock指令将其配置为阻止单个域,我可以使用ProxyBlock*阻止所有内容.有没有办法阻止除一个域之外的所有内容?
谢谢,
-安德鲁
我需要绕过跨站点脚本限制,以便在用户点击我在iframe(external.com/onlyforme)中加载的外部站点的链接时向用户显示地图.我了解到,最简单的方法是设置反向代理,以便Apache在访问local.com/external时检索external.com/onlyforme,并使其显示为来自我的域.
这主要有效,但是当external.com/onlyforme/index.html尝试访问external.com/onlyforme/site_media/script.js时,会被重定向到local.com/site_media/script.js,这不是我想要的.相反,我希望将其重定向到external.com/onlyforme中的正确URL,以便外部站点按预期工作.
我怎样才能做到这一点?
我在我的httpd.conf中有这个,在任何其他配置语句之外:
ProxyRequests Off
ProxyPass /external/ http://www.external.com/onlyforme
ProxyPassReverse /external/ http://www.external.com/onlyforme
Run Code Online (Sandbox Code Playgroud)
我正在运行Apache 2.2.
我在一组三个tomcat6服务器前面有一个Apache服务器(服务器版本:Apache/2.2.22(Ubuntu)).Apache使用mod_proxy和AJP连接器设置为负载均衡器:
<VirtualHost *:80>
ProxyRequests off
<Proxy balancer://mycluster>
BalancerMember ajp://localhost:8009 keepalive=On retry=1 timeout=15 ping=1
BalancerMember ajp://10.0.3.152:8009 keepalive=On retry=1 timeout=15 ping=1
BalancerMember ajp://10.0.3.153:8009 keepalive=On retry=1 timeout=1 ping=15
Order Deny,Allow
Deny from none
Allow from all
ProxySet lbmethod=byrequests
</Proxy>
<Location /balancer-manager>
SetHandler balancer-manager
Order deny,allow
Allow from all
</Location>
ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
Tomcat使用以下JAVA_OPTS运行:
-Xms2048m -Xmx2048m -XX:NewSize=256m
-XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m
Run Code Online (Sandbox Code Playgroud)
系统运行正常,但过了一段时间我从Tomcat收到这些错误:
org.apache.jk.common.ChannelSocket processConnection
WARNING: processCallbacks status 2
Run Code Online (Sandbox Code Playgroud)
而这个来自Apache:
[error] ajp_read_header: ajp_ilink_receive failed
[error] (70007)The timeout specified has expired: proxy: read …Run Code Online (Sandbox Code Playgroud) 我有一个运行的网站,比方说,example.com它使用apache.我正在写的,我想通过访问node.js的一个应用程序example.com/app,并有我的node.js服务器认为example.com/app是/和example.com/app/users是/users.我尝试通过ProxyPass使用我在网上找到的一些教程来做到这一点,但这并不能完全给我我正在寻找的东西(除非我没有设置正确).
这是ProxyPass我正在使用的:
ProxyPass /app/ http://127.0.0.1:3000/
ProxyPassReverse /app/ http://127.0.0.1:3000/
Run Code Online (Sandbox Code Playgroud)
但是当我去example.com/app/users我的节点服务器认为我正在尝试访问//users哪个显然会抛出一个404.任何帮助,将不胜感激.谢谢.
在我们的环境中,我们在错误日志中始终获得这些条目
[Sun Dec 22 20:29:43 2013] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
[Sun Dec 22 20:29:43 2013] [error] ajp_read_header: ajp_ilink_receive failed
[Sun Dec 22 20:29:43 2013] [error] (70007)The timeout specified has expired: proxy: read response failed from (null) (xx.xx.xx.xx)
[Sun Dec 22 20:30:01 2013] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
Run Code Online (Sandbox Code Playgroud)
如果这些错误同时出现在所有节点上,则站点将抛出998响应代码,直到重新启动使这些错误消失.Apache正在与后端jboss服务器进行通信.
可能导致这些问题的原因.根据我的观察,这可能是由于webservice调用延迟导致AJP连接终止.
如果我错了,请纠正我,如何永久修复此问题.
谢谢.
我正在尝试将访问www.server.com的用户重定向到浏览器的首选语言设置.
当用户在www.server.com/<lang>下面的情况下输入/ es为西班牙语时,它们被正确地代理到智能翻译服务器.但是,当用户在其浏览器中设置了语言首选项时,他们会遇到重定向循环.
我有以下配置:
<VirtualHost *:8008>
ServerName www.server.com
ServerAlias www
ProxyPreserveHost On
RewriteEngine On
RewriteCond %{HTTP:Accept-Language} ^es [NC]
RewriteRule ^/$ es/ [R=301,L]
<Proxy http://server.sl.smartling.com/*>
Allow from all
</Proxy>
<LocationMatch "/es">
ProxyPass http://server.sl.smartling.com/es
ProxyPassReverse http://server.sl.smartling.com/es
Header add Host "www.server.com"
RequestHeader set Host "www.server.com"
</LocationMatch>
DocumentRoot /www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
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 …Run Code Online (Sandbox Code Playgroud) 我们将图像代理为许可内容,并需要将max-age标头添加到代理图像.尝试修改.htaccess,但它没有工作,并怀疑这是由于代理的图像文件夹不是服务器上的实际目录.
首先,代理设置在apache2.conf:
# Image Proxy
ProxyPass /photo http://photo.licensor.com
ProxyPassReverse /photo http://photo.licensor.com
Run Code Online (Sandbox Code Playgroud)
.htaccess在网站的public_html目录下进行了多次修改.似乎修改代理图像的max-age标头的条件永远不会被Apache识别,因为/photo它不是真正的目录.
我真的很想使用/photo不真实的目录来定位代理的图像.
尝试通过我的Apache2服务器访问ws:// localhost:8080 /时收到错误500.该服务器运行OpenSuse Leap 42.1和Apache 2.4.16.
启用了这些Apache2模块:mod_proxy,mod_proxy_http,mod_proxy_wstunnel.
从本地网络调用请求时,一切正常.网址示例:http://<myhost-ip-address>/api/ws/<some-url>.它返回状态101和响应:Upgrade: websocket.没关系.
来自外部网络的同类请求失败.网址示例:ws://www.mysite.com/api/ws/<some-url>.它返回错误500.
Apache访问日志包含: GET /api/ws/<some-url> HTTP/1.1" 500 ...
Apache错误日志包含: [proxy:warn] AH01144: No protocol handler was valid for the URL /api/ws/<some-url>. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
我的httpd.conf:
<VirtualHost *:80>
ServerName mysite.com
ServerAlias mysite.com
# Redirection for ws protocol
ProxyPreserveHost On
ProxyVia full
ProxyRequests OffHere
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/api/ws/(.*) [NC]
RewriteCond …Run Code Online (Sandbox Code Playgroud) 问题
我正在通过Apache2反向代理运行节点服务器(sqlpad).
在某些请求中,节点服务器返回304状态代码,Content-Type直接访问时为no .但是,当通过反向代理访问时,状态代码将更改为200,并Content-Type添加值为text/html.添加它Content-Type会导致应用程序无法加载JS和CSS,因为X-Content-Type-Options: nosniff它位于标题中.
我真的不想对节点服务器进行更改,因为它不是我的项目.我想用反向代理配置解决这个问题.
如何配置Apache2 ProxyPass以转发原始304响应,或者至少,不用Content-Type缺省填写缺失?
以下是我的具体内容:
组态
# /etc/apache2/sites-enabled/xxxx.conf
...
<Location "/sqlpad">
ProxyPass http://x.x.x.x:xxxx # IP address of Node server
ProxyPassReverse http://x.x.x.x:xxxx # IP address of Node server
</Location>
# /etc/apache2/apache2.conf (comments removed)
ServerName xxxxx.com
DefaultRuntimeDir ${APACHE_RUN_DIR}
PidFile ${APACHE_PID_FILE}
Timeout 600
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Include …Run Code Online (Sandbox Code Playgroud)