标签: mod-proxy

如何将 Apache 配置为使用 HTTPS 进行外部访问而使用 HTTP 进行内部访问?

我有两台服务器,一台是可以在我们公司的本地网络内部访问的开发服务器,另一台是面向公众的 Web 服务器。开发服务器托管了几个我们用来在内部管理项目的工具,但现在我们也需要在维护安全性的同时从外部访问它们。

我已经使用 ProxyPass 和 ProxyPassReverse 指令在外部服务器上设置了 mod_proxy 以将外部请求映射到内部服务器。我还在这些外部虚拟主机上设置了身份验证,以为外部访问提供安全性。我还需要使用 SSL 进行外部访问,但理想情况下更希望让内部工具可以通过普通 HTTP 访问内部网络中的人员。

是否有可能实现这种行为,如果可以,我应该使用哪些指令和 Apache 模块以及需要在哪些服务器上设置它们?

mod-proxy mod-ssl apache-2.2

5
推荐指数
2
解决办法
2778
查看次数

在传递给代理 Lighttpd 之前重写 URL

我正在尝试在 lighttpd 中设置一个反向代理,以便 /mobile/video 下的所有请求(并且只有那些请求)被重定向到辅助 Web 服务器的 / 目录。这在 apache 中很容易,但我一生都无法弄清楚如何在 lighttpd 中做到这一点。

$HTTP["url"] =~ "^/wsmobile/video/" {
       url.rewrite-once = ( "^/wsmobile/video/(.+)" => "/$1" )
       proxy.server = ( "" => ( ( "host" =>  "210.200.144.26", "port" => 9091 ) ) )
}
Run Code Online (Sandbox Code Playgroud)

我试过使用 http["url"] 指令,但是 lighttpd 只是忽略这些请求并继续将完整的 url 传递给辅助服务器,这当然会导致 404 阻塞和抛出。但是,如果我进行全局重写,那么所有内容都会转发到辅助服务器,这也不是我想要的。

我该如何完成这项任务?

rewrite url configuration mod-proxy lighttpd

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

会话 id 在 url 中时的 Apache 负载平衡

我真的不知道...

我有一个 java web 应用程序,它将会话 id 存储在 URL 中,而不是使用 cookie。我想在 2 个 tomcat 服务器上运行该应用程序,并在它们前面使用 Apache 服务器进行负载平衡。


            __ tomcat1
Apache ----/
           \__ tomcat2
Run Code Online (Sandbox Code Playgroud)

通过在Tomcat文件中设置jvmRouteto ,url就会变成. 所以可以通过查看url来实现会话粘性,并将其路由到相应的服务器。tomcat1server.xmlhttp://url;jsessionid=id.tomcat1

我知道,mod_proxymod_jk做负载均衡,但他们的粘性会话只有工作当会话ID存储在cookie中。就我而言,会话 ID 编码在 URL 中。如何进行负载平衡?

load-balancing mod-proxy mod-jk apache-2.2

5
推荐指数
1
解决办法
4100
查看次数

IPtables 阻止端口 8080 但不适用于本地主机

目前我有一个应用程序在 8080 上运行,由 mod_proxy 前端。

    <Location /hudson>
            Order allow,deny
            Allow from all
            ProxyPass http://localhost:8080/hudson
            ProxyPassReverse http://localhost:8080/hudson
    </Location>
Run Code Online (Sandbox Code Playgroud)

我需要阻止 TCP 8080 但不需要阻止本地主机如何使用 IPtables 来完成?

mod-proxy hudson

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

嵌入 Tomcat 的 Apache SSL 反向代理

我正在尝试为通过 SSL 运行 tomcat 嵌入服务器的应用程序设置反向代理。该应用程序需要在端口 9002 上通过 SSL 运行,因此我无法为此应用程序“禁用 SSL”。当前的设置架构如下所示:

[192.168.0.10:443 - Apache with mod_proxy] --> [192.168.0.10:9002 - Tomcat App]
Run Code Online (Sandbox Code Playgroud)

在谷歌搜索如何进行这样的设置(和测试)之后,我遇到了这个:

https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/861137

这导致我当前的配置(尝试模拟 wget 的 --secure-protocol=sslv3 选项)

/etc/apache2/sites/enabled/default-ssl:

<VirtualHost _default_:443>

    SSLEngine On
    SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

    SSLProxyEngine On
    SSLProxyProtocol SSLv3
    SSLProxyCipherSuite SSLv3
    ProxyPass /test/ https://192.168.0.10:9002/
    ProxyPassReverse /test/ https://192.168.0.10:9002/

    LogLevel debug
    ErrorLog /var/log/apache2/error-ssl.log
    CustomLog /var/log/apache2/access-ssl.log combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

问题是错误日志显示错误:14077102:SSL 例程:SSL23_GET_SERVER_HELLO:不支持的协议

完整的请求日志:

[Wed Mar 13 20:05:57 2013] [debug] mod_proxy.c(1020): Running scheme https handler (attempt 0)
[Wed Mar 13 20:05:57 2013] [debug] mod_proxy_http.c(1973): proxy: …
Run Code Online (Sandbox Code Playgroud)

tomcat mod-proxy mod-ssl apache-2.2

5
推荐指数
1
解决办法
4550
查看次数

跨多个文件拆分相同的虚拟主机配置

我的服务器上有多个 django 应用程序,每个应用程序都在自己的虚拟主机中运行,绑定到不同的端口。(我这样做是为了隔离每个 WSGIProcessGroup)。

现在,为了简单起见,我想将每个应用程序代理到端口 80。

对于一个应用程序,我做这样的事情:

Listen 8101
<VirtualHost 127.0.0.1:8101>
    WSGIProcessGroup app1
    WSGIDaemonProcess app1 display-name=%{GROUP}
    WSGIScriptAlias /app1 "/var/django_apps/app1/app1.wsgi"
</VirtualHost>

<VirtualHost *:80>
    ProxyPass /app1 http://localhost:8101/app1
    ProxyPassReverse /app1 http://localhost:8101/app1
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

现在,为了简单地启用或禁用某些应用程序,当我运行另一个应用程序时,我有另一个 .conf 文件包含以下内容:

Listen 8102
<VirtualHost 127.0.0.1:8102>
    WSGIProcessGroup app2
    WSGIDaemonProcess app2 display-name=%{GROUP}
    WSGIScriptAlias /app2 "/var/django_apps/app2/app2.wsgi"
</VirtualHost>

<VirtualHost *:80>
    ProxyPass /app2 http://localhost:8102/app2
    ProxyPassReverse /app2 http://localhost:8102/app2
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

但是这第二个<VirtualHost *:80>没有使用,考虑到 apache 配置语法,这似乎很正常。

但是,我希望将这一点配置放在应用程序声明的旁边,这样我就可以将属于一起的内容放在一个文件中。

有什么我可以做的吗?我正在考虑以某种方式使用 include 指令,但我对 apache 配置知之甚少,而且我认为我无法自己找到解决方案:)

你怎么认为?

干杯

mod-proxy django virtualhost

5
推荐指数
1
解决办法
2044
查看次数

ProxyPass 仅当文件不存在时

我见过这个例子:

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://app_cluster%{REQUEST_URI} [P,QSA,L]
Run Code Online (Sandbox Code Playgroud)

我需要一个类似的东西,当静态文件不存在时,它将委托给 mod_proxy(即做一个 ProxyPass)。可行吗?

mod-rewrite mod-proxy apache-2.2

5
推荐指数
1
解决办法
7695
查看次数

ProxyPass HTTPS 到其他服务器

我有一台frontend.example.com带有公共 IP的服务器。Apache (2.4) 应该代理service1.example.com(DNS 别名为frontend.example.com)的流量。

service1.example.com是位于192.168.56.0两者之间的专用 LAN ( )上的 VM 。

现在,这对 HTTP 来说很容易:

<VirtualHost *:80>
        ServerName service1.example.com

        ProxyPass / http://192.168.56.2/
        ProxyPassReverse / http://192.168.56.2/

        <Location "/">
                Require all granted
        </Location>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

我正在尝试为 HTTPS 做同样的事情:

<VirtualHost *:443>
        ServerName service1.example.com

        SSLEngine On
        SSLProxyEngine On
        ProxyRequests Off
        SSLProxyCheckPeerCN off
        SSLProxyCheckPeerExpire off
        SSLInsecureRenegotiation on
        SSLProxyVerify none
        SSLVerifyClient none
        SSLCertificateFile /etc/ssl/certs/example_com.crt
        SSLCertificateKeyFile /etc/ssl/certs/example_com.key

        ProxyPass / https://192.168.56.2/
        ProxyPassReverse / https://192.168.56.2/

        <Location "/">
                Require all granted
        </Location>
</VirtualHost> …
Run Code Online (Sandbox Code Playgroud)

mod-proxy mod-ssl apache-2.4

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

Apache 中的间歇性代理错误:“部分结果有效,但处理不完整”,并显示“AH01110:读取响应时出错”

我在 CentOS 7.8 上使用 Apache 2.4.43 以及 Varnish 6 和 PHP-FPM 来为 Magento 2 网站提供服务。

Varnish 侦听端口 80。Apache 侦听 8080 以向 Varnish 提供内容,并且还侦听端口 443,该端口将 HTTPS 请求代理到 Varnish,如下所示:

ProxyPreserveHost On
ProxyPass         / http://127.0.0.1:80/
RequestHeader     set X-Forwarded-Port  "443"
RequestHeader     set X-Forwarded-Proto "https"
Run Code Online (Sandbox Code Playgroud)

这适用于大多数请求,但偶尔(约 10% 的请求)我会收到来自 Varnish 和 Apache 的 503 响应。我在 Apache 日志中看到的唯一错误是:

[proxy_http:error] [pid 6719:tid 140054596265728] (70008)Partial results are valid but processing is incomplete: [client x.x.x.x:53760] AH01110: error reading response, referer: http://example.com
Run Code Online (Sandbox Code Playgroud)

如果我重试该请求,它通常会立即起作用,尽管有时我必须刷新几次才能满足请求。我注意到,当发出大批量请求时(即包含数百个外部资源的页面),这种情况会更频繁地发生。我还注意到,这种情况似乎发生在较大的文件上,而不是较小的文件上。

我猜测这可能是某种超时,但我不确定要调整哪些值或如何进一步调试它。

我尝试过的事情包括以下内容:

  • 这个答案涉及更改我不使用的模块(Forge Rock OpenAm)。 …

proxy varnish reverse-proxy mod-proxy apache-2.4

5
推荐指数
0
解决办法
6458
查看次数

Logwatch:使用 mod_proxy 的连接尝试

今天我在我的日志文件中注意到了这个条目:

Connection attempts using mod_proxy:
175.180.113.83 -> 66.135.210.61:80: 1 Time(s)
Run Code Online (Sandbox Code Playgroud)

这是我通常在日志中看不到的内容。我对此有几个问题:

  1. 这实际上意味着什么?这是否意味着有人试图通过代理连接访问我的服务器?
  2. 第一个IP地址是什么?这是原始IP吗?
  3. 第二个IP地址是什么?这是他们用作代理的服务器吗?
  4. 如果我对 2 和 3 所说的都是正确的,那么 Logwatch(或 Linux 中的任何解决方案)如何检测原始 IP?我认为代理应该有助于匿名并使其完全屏蔽原始 IP 地址?
  5. 这是什么意思?这些请求通常来自寻找额外安全漏洞的机器人吗?通过代理访问我的服务器的漏洞是什么?

编辑:看起来 66.135.210.61 属于 eBay,另一个 IP 属于台湾的某个人。这是否意味着有人通过 eBay 访问了我的服务器?eBay 的安全性不应该足以防止此类事情发生吗?

谢谢

logging mod-proxy logwatch apache-2.2

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