据我所知,我在我的 Apache 生产服务器上禁用了所有 mod_proxy 的东西。测试或确认的合理方法是什么?看看我的 httpd.conf,我可以告诉你,任何包含“代理”的行都会被注释掉,这是值得的。
我问的原因是我今天早上在日志观察报告中看到了这些东西:
Connection attempts using mod_proxy:
81.88.124.30 -> 64.12.202.116:443: 1 Time(s)
81.88.124.30 -> 64.12.202.15:443: 1 Time(s)
81.88.124.30 -> 64.12.202.1:443: 1 Time(s)
81.88.124.30 -> 64.12.202.22:443: 1 Time(s)
81.88.124.30 -> 64.12.202.29:443: 1 Time(s)
81.88.124.30 -> 64.12.202.36:443: 1 Time(s)
81.88.124.30 -> 64.12.202.43:443: 1 Time(s)
81.88.124.30 -> 64.12.202.50:443: 1 Time(s)
81.88.124.30 -> 64.12.202.8:443: 1 Time(s)
Requests with error response codes
403 Forbidden
64.12.202.116:443: 1 Time(s)
64.12.202.15:443: 1 Time(s)
64.12.202.1:443: 1 Time(s)
64.12.202.22:443: 1 Time(s)
64.12.202.29:443: 1 Time(s)
64.12.202.36:443: 1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 WHM/CPanel CeEntOS Linux 服务器上安装 Mod_Proxy Apache 模块。这是系统信息:
CentOS release 5.6 (Final)
Server version: Apache/2.2.21 (Unix)
Cpanel::Easy::Apache v3.7.2 rev9999
Run Code Online (Sandbox Code Playgroud)
我安装的目的是,当我在 abc.com 站点上单击一个指向 auto.efg.com 站点的链接(假设它的 IP 地址是 192.168.0.101)时,浏览器将在 auto.efg 上加载应用程序。 com 同时在浏览器的地址栏上维护 abc.com。
所以我跟着这个教程:
http://www.hackersgarage.com/install-mod_proxy-apache-module-on-whmcpanel-ceentos-linux-server.html
所以当我完成它时,我能够做到这一点:
root@ip-xxx-xxx-xxx [/tmp/httpd-2.2.21/modules/proxy]# ls -l
/usr/local/apache/modules/mod_proxy*
-rwxr-xr-x 1 root root 88708 Jan 5 08:22 /usr/local/apache/modules/mod_proxy.so*
-rwxr-xr-x 1 root root 49654 Jan 5 08:23 /usr/local/apache/modules/mod_proxy_connect.so*
-rwxr-xr-x 1 root root 73196 Jan 5 08:23 /usr/local/apache/modules/mod_proxy_http.so*
Run Code Online (Sandbox Code Playgroud)
现在,按照这些说明操作并尝试重新启动服务器后,出现以下错误:
/etc/init.d/httpd restart
httpd: Syntax error on line 35 of /usr/local/apache/conf/httpd.conf: module proxy_module …Run Code Online (Sandbox Code Playgroud) 我有一个使用 apache mod_proxy 的反向代理设置:
<VirtualHost *:443>
ServerName reverse.server.com
ProxyPass / http://10.1.9.11:3000/
ProxyPassReverse / http://10.1.9.11:3000/
ProxyPreserveHost on
...snip ssl stuff...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
这在大多数情况下都能正常工作。问题在于内部服务器何时进行重定向。虽然 proxypassreverse 应该捕获该位置,但它似乎会重定向到http://reverse.server.com而不是https://reverse.server.com。所以它工作了一半,地址正确更改,但协议仍然作为内部服务器。
我不清楚为什么这样做,因为代理连接是 SSL - 有什么想法吗?
我正在尝试构建一个网站,让您可以查看和操作来自任何其他网站的任何页面的数据。为此,我必须绕过“ Allow Origin”问题:我正在加载其他域的内容,iframe 并且必须使用从我的域下载的 javascript 来操作其内容。
我的第一次尝试是自己编写一个简单的代理,通过一个用 Java 编码的服务器代理请求其他域页面,该代理不仅提供内容,还重建内容中的链接(src 和 href ),以便这些链接引用的内容也得到通过我手工制作的代理下载。结果还不错,但在 css 和脚本中的 url 有问题。
就在那时,我意识到mod_proxy_html应该完全完成所有这些工作。问题是我无法弄清楚如何让它按预期工作。
假设我的服务器在 my-domain.com 中运行并代理和转换来自另一个域的内容,我会发出这样的请求:
my-domain.com/proxy?url=http://another-domain.com/some/content
Run Code Online (Sandbox Code Playgroud)
我想通过以下方式mod_proxy_html提供内容并重写以下 URL http://another-domain.com/some/content:
another-domain.com: 没有重写/other/content->/proxy?url=http://another-domain.com/other/contentother/content->/proxy?url=http://another-domain.com/some/content/other/content../other/content->/proxy?url=http://another-domain.com/some/other/contenturl 应该在运行时指定,而不是配置时。
这可以通过 mod_proxy_html 实现吗?谁能提供一个简单的工作配置开始?
编辑 1-第一种方法
以下站点配置适用于在任何地方都使用绝对 url 的站点,例如http://www.huffingtonpost.es/. 你可以在本地主机上尝试这个配置:http://localhost/asset/http://www.huffingtonpost.es/
<VirtualHost *:80>
ServerName localhost
LogLevel debug
ProxyRequests off
RewriteEngine On
RewriteRule ^/asset/(.*) $1 [P]
ProxyHTMLURLMap $1 …Run Code Online (Sandbox Code Playgroud) 在 Debian 8.0 上,我试图让 Apache 2.4.10 作为虚拟主机管理 GitLab CE 7.10 Omnibus 安装。
Apache 2 已经设置并运行了几个看起来像
vhost.example.com.
我想配置 Apache 和 GitLab,以便git.example.com由 Apache 处理以显示 GitLab Web 界面。
为此,我遵循了/sf/answers/1806681341/ 中描述的程序 。
我可以访问 GitLab 的主页git.example.com,但无法访问任何其他资源,例如 CSS 或图标。Apache 日志显示四个错误,它们看起来都像:
[Sun May 10 20:24:57.146329 2015] [authz_core:error] [pid 4141] [client 1.2.3.4:80] AH01630: client denied by server configuration: /opt/gitlab/embedded/service/gitlab-rails/public/assets/application-TOKEN.css, referer: http://git.example.com/
Run Code Online (Sandbox Code Playgroud)
在网上搜索并尝试了几项更改后,我被困在这里。有谁知道如何解决这个问题?
此外,这里是我使用的“有趣”配置文件:
/etc/apache2/sites-enabled/git.conf:
<VirtualHost git.example.com:80>
ServerAdmin admin@example.com
DocumentRoot /opt/gitlab/embedded/service/gitlab-rails/public
ServerName git.example.com
ServerAlias git.example.com
ProxyPreserveHost On
<Location …Run Code Online (Sandbox Code Playgroud) 我们设置的 Apache-2.2 和通过另一台设备代理的反向代理存在问题。
流程是:Apache A -> proxy.abc.net -> Apache B
我们在 Apache B 上得到的错误是
通过 SNI 提供的主机名 proxy.abc.net 和通过 HTTP 提供的主机名 backend.abc.net 不同
当前配置
<VirtualHost frontend.abc.com:80>
ServerName frontend.abc.com
SSLEngine on
SSLOptions +StrictRequire
SSLProtocol -all +TLSv1
SSLHonorCipherOrder On
SSLCipherSuite RC4-SHA:HIGH:!ADH:!MD5
SSLCertificateFile conf/certs/cert.cer
SSLProxyCACertificateFile certs/proxy.cer
SSLCertificateKeyFile conf/certs/cert.pem
SSLCertificateChainFile conf/certs/chain.cer
DocumentRoot /foo/bar
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost off
ProxyErrorOverride On
SetEnv proxy-sendchunked 1
ProxyRemote "*" https://proxy.abc.net:8080
ProxyPass /foo https://backend.abc.net:8888/foo disablereuse=on
</Virtual Host>
Run Code Online (Sandbox Code Playgroud)
添加
SSLProxyProtocol SSLv3
Run Code Online (Sandbox Code Playgroud)
有效,因为它不进行 SNI 检查,但 SSLv3 不是我们必须使用 TLSv1 或更高版本的选项。
我已经尝试了 ProxyPass、ProxyPassReverse 和 ProxyHTMLURLMap 的一些组合,但我仍然没有多少运气。我只是希望能够通过访问 www.printerhost.com/printers/printername 来访问 CUPS 中的打印机,而不必添加端口 631 或让 CUPS 侦听端口 80。
根据要求,这里是配置文件:
LoadModule proxy_html_module modules/mod_proxy_html.so
LoadModule xml2enc_module modules/mod_xml2enc.so
NameVirtualHost *:80
<VirtualHost *:80>
ServerName blah.yours.com
JkMount /* balancer
JkMount /jkmanager jk-status
JkUnMount /cups* balancer
ProxyRequests Off
ProxyPass /cups/ http://localhost:631/
ProxyHTMLURLMap http://localhost:631 /cups
<Location /cups/>
ProxyPassReverse /
ProxyHTMLEnable On
ProxyHTMLURLMap / /cups/
</Location>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud) 我的 error.log 中出现了一堆这样的错误:
[客户端 1.2.3.4] 代理:传入请求上没有 HTTP 0.9 请求(没有主机线路),并且保护软管设置强制 uri / 的主机名为 www.mydomain.com
我的配置基本上是:
ProxyRequests Off
<VirtualHost 1.2.3.4:80>
ServerName www.mydomain.com
DocumentRoot "c:/apache/htdocs"
ProxyPreserveHost On
ProxyPass / http://172.1.1.1/
</VirtualHost>
<VirtualHost 1.2.3.4:443>
ServerName www.mydomain.com
DocumentRoot "c:/apache/htdocs"
# SSL Stuff
ProxyPreserveHost On
ProxyPass / http://172.1.1.1/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
有人知道如何消除这些警告吗?
我们\xe2\x80\x99正在尝试设置一堆Apache 2.4.18来代理将其收到的请求传递到我们合作伙伴的上游服务器。我们的合作伙伴使用 Amazon\xe2\x80\x99s Elastic Load Balancing,因此我们对他们服务器的唯一了解就是其 DNS 名称。
\n\nDNS 记录的 TTL 是 60 秒,我想知道 Apache 是否可以遵守该 ttl,只要 DNS 记录有效就保持连接处于活动状态,然后在 TTL 过期时请求转换。
\n\n每次上游需要资源时,使用 mod_proxy DisableReuse = on 强制打开一个新连接。只要底层操作系统执行 DNS TTL 缓存,就可以实现这一目的。否则,每次需要新资源时,Apache 都会强制发出新的 DNS 请求,从而增加响应时间。
\n\n我\xe2\x80\x99ve想过使用mod_proxy ttl和超时参数,但我认为我\xe2\x80\x99m没有正确解决问题。根据文档, mod_proxy\xe2\x80\x99s 超时参数控制套接字等待来自上游的数据的时间,但 I\xe2\x80\x99m 不确定 Apache 实例是否会关闭连接并打开一个新连接。此外,使用超时很容易出错,因为较低的值可能会向客户端发送错误的答案。
\n\n我\xe2\x80\x99已经花了一些时间尝试解决这个设置,但没有任何乐趣。是否有任何特殊设置可以满足该场景?或者也许我\xe2\x80\x99已经跳过了一些东西?任何帮助,将不胜感激。
\n\n最好的,
\n\n古施陶
\n我有一个正在工作的反向代理,它仅在我的站点中的特定位置上处于活动状态,在本例中例如:www.example.com/reverseproxy/site1我正在反向代理 site1。我想替换每个代理页面正文的某些部分,所以我尝试使用 mod_substitute,问题是我无法让它在<Location /reverseproxy>
这是我的 httpd(启用了 SSL):
<VirtualHost _default_:443>
ProxyPassInterpolateEnv On
RewriteEngine On
... Some rewrite rules
RewriteRule /?reverseproxy/http(s*):/([^\/]*)/*(.*) "http$1://$2/$3" [P]
SSLProxyEngine On
ProxyPassReverse "/reverseproxy/http${ssl}://${page}" http${ssl}://${page} interpolate
SetOutputFilter INFLATE;proxy-html;SUBSTITUTE;DEFLATE;
ProxyHTMLInterp On
ProxyHTMLExtended Off
...Some ProxyURLMap
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|<body>|<body1>|"
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
这个替代品确实有效,但它适用于所有页面,而不仅仅是/reverseproxy. 当我尝试将其放入时,<Location /reverseproxy>它不起作用,它只是忽略它:
<Location /reverseproxy>
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|<body>|<body1>|"
</Location>
Run Code Online (Sandbox Code Playgroud)
我尝试添加
RequestHeader unset Accept-Encoding
Run Code Online (Sandbox Code Playgroud)
在标签之外<Location>但它不起作用
我尝试添加这个
SetOutputFilter SUBSTITUTE;DEFLATE
Run Code Online (Sandbox Code Playgroud)
在<Location /reverseproxy>标签中但没有运气
正如有人建议尝试使用这个过滤器链
FilterDeclare filter
FilterProvider filter SUBSTITUTE …Run Code Online (Sandbox Code Playgroud) mod-proxy ×10
apache-2.2 ×8
apache-2.4 ×2
apache2 ×1
centos5 ×1
cups ×1
debian ×1
gitlab ×1
https ×1
mod-rewrite ×1
printing ×1
proxypass ×1
security ×1
sni ×1