AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[mod-proxy](server)

Martin Hope
argyrodagdileli
Asked: 2022-02-11 06:53:22 +0800 CST

代理 api 子目录时出现 Apache 500 错误

  • 1

我正在尝试将对特定端点的 PUT 请求重定向到另一台主机。

所述端点位于/internal并仅接受 PUT 请求。下面的其他端点/internal将继续由我的主主机/服务器提供服务。

我已经尝试使用重写规则和使用代理([P])标志和使用ProxyPass指令来设置它 - 所有这些都会导致 500 内部服务器错误,并且请求永远不会到达新主机

我的客户端应用程序使用无法处理重定向的简单 REST 客户端,因此我必须使用某种代理。

Apache 日志显示以下内容

[Thu Feb 10 08:56:20.394444 2022] [rewrite:trace1] [pid 8579] mod_rewrite.c(480): [client XXX.XXX.XXX.XXX:XXXXX] XXX.XXX.XXX.XXX - - [subdomain1.mydomain.com/sid#55d4ed07ecb0][rid#55d4ed2c5f20/initial] go-ahead with proxy request proxy: https://subdomain2.mydomain.com/internal/my-endpoint [OK]

这是特定虚拟主机的当前配置

<VirtualHost *:80>
 ServerName subdomain1.mydomain.com
  ProxyPass /soap ajp://localhost:7007/soap retry=3
  ProxyPreserveHost On
  Redirect /  https://subdomain1.mydomain.com/
  ErrorLog /var/log/httpd/subdomain1_error
</VirtualHost>

<VirtualHost *:443>
  ServerName subdomain1.mydomain.com
  Options FollowSymlinks
  ProxyRequests On
  ProxyPreserveHost On
  #RewriteEngine On

  #RewriteCond %{REQUEST_URI} '^/internal/my-endpoint'
  #RewriteCond %{REQUEST_METHOD} ^(PUT)
  #RewriteRule "^/(.*)" "https://subdomain2.mydomain.com/internal/my-endpoint" [P]

  ProxyPass /internal/my-endpoint https://subdomain2.mydomain.com/internal/my-endpoint
  ProxyPassReverse /internal/my-endpoint https://subdomain2.mydomain.com/internal/my-endpoint
  ProxyPreserveHost On

  LogLevel alert rewrite:trace3
  CustomLog /var/log/httpd/subdomain1_access_log common
  ProxyPass / ajp://localhost:7007/ retry=3
  ProxyPassReverse / ajp://localhost:7007/ retry=3
  ProxyPreserveHost Off
  ErrorLog /var/log/httpd/subdomain1
  SSLEngine on
</VirtualHost>
proxy mod-proxy mod-rewrite apache-2.4 500-error
  • 1 个回答
  • 104 Views
Martin Hope
user2341534
Asked: 2021-11-09 14:53:06 +0800 CST

Apache ProxyPass 到域的共享 IP 地址

  • 1

我有一个案例,我需要将域 (domain1.com) 代理传递到托管在共享 ip 地址 (192.168.168.168) 上的不同域 (domain2.com),但 domain2.com DNS 指向的不是共享 ip地址,所以 domain2.com 不能作为代理通行证,只能作为共享 ip 地址。

由于共享 ip 地址有多个主机名,是否有域或主机名配置选项可以与 proxypass 一起使用以强制在另一端进行虚拟主机查找?例如,使用这个 apache conf 文件将 domain1.com 代理到 192.168.168.168。

#Apache Reverse Proxy
SSLProxyEngine on

<Location />
ProxyPass http://192.168.168.168/
ProxyPassReverse http://192.168.168.168/
</Location>

是否可以进行任何更改来告诉在该 IP 上查找哪个域?

proxy reverse-proxy mod-proxy apache-2.4 proxypass
  • 1 个回答
  • 484 Views
Martin Hope
Mirza Prangon
Asked: 2021-10-09 01:45:26 +0800 CST

无法在 Docker 中使用 httpd ajp 代理访问 Tomcat servlet

  • 0

Docker、httpd 和 tomcat 对我来说是新的。

我想做的:通过httpd ajp反向代理访问tomcat servlet。

我在同一个桥接网络下制作两个容器,一个运行 httpd,另一个运行 tomcat。

问题:我无法通过httpd访问tomcat。Httpd 返回 403 错误。如果我将它暴露给主机,我可以通过端口 8080 访问它。我读过很多文章,但不明白我做错了什么。根据我的理解,当前配置应该可以工作,但我肯定遗漏了一些东西。

错误页面截图

请给我指点我做错了什么。

我的配置和 dockerfiles 请在此处查看 Git 存储库。我通过首先创建图像来运行容器并按照以下方式运行

# Start web container
docker run -dit --name httpd.container -p 80:80 --network extope-network httpd-101-image
# Start AP container
docker run -dit --name tomcat.container -p 8080:8080 --network extope-network --add-host=host.docker.internal:host-gateway tomcat-101-image
tomcat mod-proxy ajp apache-2.4 docker
  • 2 个回答
  • 434 Views
Martin Hope
Jetto Martínez
Asked: 2021-08-12 09:30:15 +0800 CST

设置 Apache 子域重定向到另一个子域

  • 1

我正在尝试设置两个子域,fora和bin domain.com。我使用了两个 .conf 文件,根据对 ServerName 和 ProxyPass 的更改,它们看起来几乎相同:

<VirtualHost *:80>
        ServerName a.domain.com #This was added as a try for a fix. 
        Redirect permanent /  https://a.domain.com/
</VirtualHost>

<VirtualHost *:443>

        ServerName a.domain.com
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/a

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        #SSL stuff

        #Proxies

        ProxyPass        /        https://a.domain.com:8444/
        ProxyPassReverse /        https://a.domain.com:8444/
        ProxyPass        /a/      https://a.domain.com:8444/
        ProxyPassReverse /a/      https://a.domain.com:8444/
        ProxyPass        /b/      https://b.domain.com:8445/
        ProxyPassReverse /b/      https://b.domain.com:8445/

</VirtualHost>

这是在我的测试环境中完成的,复制类似于当前生产的东西。在 /etc/hosts 中,我将a.domain.com和添加b.domain.com到 127.0.0.1。生产中的 DNS 记录了 whata.domain.com和b.domain.comare,这是相同的 IP(我也在我正在测试它的机器上做了这个)。

另请注意,我没有从他们的根目录中提供任何内容。我补充说,试图解决标题中所述的问题。不过,两个目录中都有一个简单的 html。

实际问题是什么?

简单地说,在尝试时a.domain.com,结果是来自 的 webapp localhost:8444,正如预期的那样。尝试b.domain.com的时候,结果也是localhost:8444,而不是localhost:8445。a.conf和都已b.conf启用,如果我禁用a.conf,那么我正确地得到localhost:8445. 如果我也尝试喜欢a.domain.com/b,重定向会解析回a.domain.com.

我已经阅读了几个问题和教程,其中大多数要么在我的配置中工作,要么添加 NameVirtualHost,我知道我的 Apache 版本不需要。我还在端口 80 中添加了一个 ServerName,因为我认为请求可能b被匹配,a.conf因为它们是相同的 IP,但这也不起作用。

我在这里想念什么?我似乎忽略了 mod_proxy 吗?如果可能的话,我想为每个 webapp 保留一个文件。谢谢!

这是在 Ubuntu 18.04.2、Apache 2.4(mod_proxy 和 mod_ssl)、Tomcat 9 上。您想要的任何其他信息,我会尽力提供。

更新

也试过这个配置。同样不受欢迎的结果。

<VirtualHost *:80>
        ServerAlias a.domain.com
        Redirect permanent /  https://a.domain.com/
</VirtualHost>

<VirtualHost *:443>

        ServerName a.domain.com
        ServerAdmin webmaster@localhost

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        #SSL stuff

        #Proxies

        Redirect /b https://b.domain.com

        <Location />
                ProxyPass               https://localhost:8444/
                ProxyPassReverse        https://localhost:8444/
        </Location>

        <Location /a>
                ProxyPass               https://localhost:8444/
                ProxyPassReverse        https://localhost:8444/
        </Location>

</VirtualHost>

更新

好的,我刚刚发现了一些非常烦人的事情。如果我使用浏览器输入a.domain.com或b.domain.com,它们都解析为a.domain.com。这就是我最初描述的问题。但如果尝试https://a.domain.com或https://b.domain.com,都解析到正确的服务器:ato8444和bto 8445。

因为这非常令人沮丧,所以我会在一段时间内停下来分析一下。

更新

经过长时间的刹车后,我尝试了一些其他的随机调整,只是为了看看发生了什么,但除了使用 HTTPS 时,再次没有按预期工作。我安装了 Postman 以查看请求中发送的内容,并发现在 Postman 中,HTTP 和 HTTPS 都正确使用了主机。更好/更糟:实际响应显示 和 的不同欢迎页面a.domain.com,b.domain.com这意味着当我使用 Postman 时,我的配置工作正常。

我认为所有这些考验可能只是缓存问题,但我选择的测试浏览器(Firefox 开发版)设置为不缓存内容。我将使用 curl 和其他浏览器检查响应。

subdomain mod-proxy apache-2.4
  • 1 个回答
  • 267 Views
Martin Hope
Gfour
Asked: 2021-05-30 10:03:03 +0800 CST

Apache Web 服务器日志中的 HTTP CONNECT 请求

  • 1

我有一个服务于域www.mypersonaldomain.com的 Apache 网络服务器,我在访问日志中找到了这些条目(以及更多类似的条目)。

88.218.227.227 - - [28/May/2021:08:56:29 +0000] "CONNECT minecraft.moin.games.:30003 HTTP/1.1" 302 213
88.218.227.227 - - [28/May/2021:08:57:03 +0000] "CONNECT minecraft.moin.games.:30003 HTTP/1.1" 302 213
88.218.227.227 - - [28/May/2021:08:58:19 +0000] "CONNECT minecraft.moin.games.:30003 HTTP/1.1" 302 213
34.91.147.149 - - [28/May/2021:10:34:44 +0000] "CONNECT play.destanmc.com:25565 HTTP/1.1" 302 210
34.91.147.149 - - [28/May/2021:10:35:08 +0000] "CONNECT play.destanmc.com:25565 HTTP/1.1" 302 210
34.91.147.149 - - [28/May/2021:10:35:16 +0000] "CONNECT play.destanmc.com:25565 HTTP/1.1" 302 210
34.91.147.149 - - [28/May/2021:10:35:46 +0000] "CONNECT play.destanmc.com:25565 HTTP/1.1" 302 210
194.93.56.130 - - [28/May/2021:16:40:12 +0000] "CONNECT 45.131.0.108:25565 HTTP/1.1" 404 13899
194.93.56.130 - - [28/May/2021:16:40:32 +0000] "CONNECT 45.131.108.30:25565 HTTP/1.1" 404 13920
194.163.135.185 - - [28/May/2021:17:52:52 +0000] "CONNECT play.arkflame.com:25566 HTTP/1.1\n" 400 226
194.163.135.185 - - [28/May/2021:17:52:52 +0000] "CONNECT play.arkflame.com:25566 HTTP/1.1\n" 400 226
212.47.244.68 - - [28/May/2021:20:14:24 +0000] "CONNECT www.mypersonaldomain.com:443 HTTP/1.1" 302 212
212.47.244.68 - - [28/May/2021:20:14:24 +0000] "CONNECT www.mypersonaldomain.com:443 HTTP/1.1" 302 212
212.47.244.68 - - [28/May/2021:20:14:24 +0000] "CONNECT www.mypersonaldomain.com:443 HTTP/1.1" 302 212
212.47.244.68 - - [28/May/2021:20:14:24 +0000] "CONNECT www.mypersonaldomain.com:443 HTTP/1.1" 302 212
212.47.244.68 - - [28/May/2021:20:14:24 +0000] "CONNECT www.mypersonaldomain.com:443 HTTP/1.1" 302 212
212.47.244.68 - - [28/May/2021:20:14:24 +0000] "CONNECT www.mypersonaldomain.com:443 HTTP/1.1" 302 212

该服务器使用 Bitnami WordPress 堆栈构建在 AWS Lightsail 实例上,其中推荐和默认配置是将 Apache 配置为提供静态文件(图像、CSS、JavaScript 等)并使用 PHP_FPM 和 Apache 的 mod_proxy 模块来处理 PHP要求。

  1. 那些关于带有 302 响应的请求的日志条目是否意味着我的服务器被用作开放代理?
  2. 为什么有人会要求我的服务器以这种方式连接到我的域?
  3. 我可以做些什么来阻止重定向并保护我的服务器而不禁用 mod_proxy?
  4. 我如何自己发送 CONNECT 请求进行测试?
http security proxy mod-proxy apache-2.4
  • 1 个回答
  • 168 Views
Martin Hope
Gaurav-Reddy
Asked: 2021-05-01 09:27:25 +0800 CST

如何使用 ProxyHTMLURLMap 重写 url?

  • 0

我的网址是这种形式

/sites/site-name/Subpath-2/page-name.page
/sites/site-name/Subpath-3/Subpath-4/index.page

这应该被重写为/sitename/subpath/pagename (删除扩展.page名)子路径也可以有多个文件夹,即(/sites/site-name/Subpath-2/..../page-name.page)

如果我们有一个以 index.page 结尾的 url,那么我们必须删除 index.page 例如:
/sites/site-name/...subpath.../index.page应该是/sites/site-name/...subpath.../

我尝试过以这种方式使用反向引用

ProxyHTMLURLMap "\/sites\/([A-Za-z-0-9]+|-)\/([A-Za-z-0-9]+|-)\/([A-Za-z-0-9]+|-)\.page$" "/$1/$2/$3" R

对于以 index 结尾的网址

ProxyHTMLURLMap "\/sites\/([A-Za-z-0-9]+|-)\/([A-Za-z-0-9]+|-)\/(index)\.page$" "/$1/$2/" R

但是我需要重写 URL,这样子路径可以很多,即它应该适用于任何可以有超过三个子路径的 URL, 它需要为/sites/site-name/Subpath-3/Subpath-4/index.page /sites/site-name/Subpath-1/Subpath-2/ 工作子路径 3/home.page

regex httpd.conf mod-proxy apache-2.4
  • 1 个回答
  • 60 Views
Martin Hope
Marco
Asked: 2021-02-04 09:28:29 +0800 CST

Apache 2.4 忽略 mod_proxy?

  • 0

我正在使用 Debian 10 安装新服务器。我配置了一个虚拟主机以将一些请求定向到 TomEE (8.0.6) 服务器。此服务器在端口 8080 上响应。Apache 配置如下所示:

<VirtualHost www.sample.com:80>
    ServerAdmin     [email protected]
    ServerName      www.sample.com

    DocumentRoot    /var/www/html

    <Directory />
        Options         None
        AllowOverride   None
        Require         all granted
    </Directory>

    <Directory /var/www/html/>
        Options         -Indexes
        AllowOverride   None
        Require         all granted
    </Directory>

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel        trace5

    ProxyPreserveHost       On
    ProxyRequests           Off
    ProxyVia                Full

    <proxy *>
        Require all granted
    </proxy>

    ProxyPass           /manager    http://www.sample.com:8080/manager
    ProxyPassReverse    /manager    http://www.sample.com:8080/manager
</VirtualHost>

在error.log我收到以下消息:

AH00925: initializing worker http://www.sample.com:8080/manager shared
AH00927: initializing worker http://www.sample.com:8080/manager local
AH00930: initialized pool in child 24391 for (www.sample.com) min=0 max=25 smax=25

当我使用 URL 时,http://www.sample.com/manager我收到错误 404 并在error.log消息中:

AH00128:文件不存在:/var/www/html/manager

看起来mod_proxy没有获取 URL。模块和conf已加载。我可以从DocumentRoot的目录中获取目录列表也很奇怪。

我错过了什么?它适用于具有相同操作系统和 Apache 版本的旧服务器。

mod-proxy apache-2.4
  • 1 个回答
  • 163 Views
Martin Hope
JellicleCat
Asked: 2021-01-15 07:51:20 +0800 CST

Apache ProxyPass + RewriteRule?

  • 1

我已经设置了一个 apache 配置来尝试重定向/login和 ProxyPass 所有其他请求:

RewriteEngine on
RewriteCond "%{REQUEST_URI}" "^/login$"
RewriteRule "^/login$" "https://sub.example.org/$1" [L,R]

SSLProxyEngine on
ProxyRequests off
ProxyPassMatch   ^/login ! # Prevent proxy on /login
ProxyPassReverse ^/login ! # Prevent proxy on /login
ProxyPassMatch   ^/      https://sub.example.org/
ProxyPassReverse ^/      https://sub.example.org/
ProxyPreserveHost off
RequestHeader set Host sub.example.org
Header set Host alt.example.org

我检查的大多数结果都符合我的预期:

  • alt.example.org/login 重定向到 sub.example.org/login
  • alt.example.org/users 显示 sub.example.org/users 的内容(没有重定向)

...但是https://alt.example.org/(空路径)会产生一个Location值为 的标头https://alt.example.org^/login。 哇!是什么导致^了域中的重定向,为什么它引用alt而不是sub?

在 apache 之上运行的 Rails 应用程序的日志表明 Rails 应用程序本身实际上正在重定向到https://sub.example.org/login,这更有意义,因为 ProxyPass 意味着 Rails 应该只看到 sub.example。 org 而不是 alt.example.org。那么为什么 apache 会给出 https://alt.example.org^/login 呢?

mod-proxy mod-rewrite apache-2.4 proxypass
  • 1 个回答
  • 760 Views
Martin Hope
user1791914
Asked: 2021-01-06 09:54:30 +0800 CST

Apache 仅重写代理主页

  • 2

我尝试了各种正则表达式(^/$, ^index.php$, ^$)来重写/代理 WordPress 网站的主页.htaccess。作为记录,我已经加载了适当的模块来完成此操作,并且可以使用特定的正则表达式为其他路径执行此操作,但不是主页。其他答案已经表明^$并且^/$会起作用,但它对我不起作用。怎么可能只定位到主页?

RewriteEngine On
RewriteBase /
RewriteRule ^$ http://some-other-domain.com [P]

最终目标是只为主页提供来自另一个网站的页面。也许有更好的方法?

.htaccess wordpress mod-proxy mod-rewrite apache-2.4
  • 1 个回答
  • 215 Views
Martin Hope
musbur
Asked: 2021-01-02 04:40:11 +0800 CST

如何在 Apache / mod_proxy_uwsgi 后面使用 UNIX 域套接字?

  • 2

在我的开发系统上,我正在使用 uwsgi 和 nginx 运行 Flask WSGI 应用程序。但是在生产服务器上我需要使用 Apache 而不是 nginx,所以我正在尝试这样做。在 nginx 中,站点的安装方式如下:

location /flaskapp { uwsgi_pass unix:/tmp/flaskapp.sock; }

它有效。在 Apache 我试过这个:

 ProxyPass /flaskapp unix:/tmp/flaskapp.sock|uwsgi://flaskapp

这在日志文件中给了我一个 503 错误:

[Fri Jan 01 13:19:45.551524 2021] [proxy:error] [pid 14167] (2)No such file or directory: AH02454: uwsgi: attempt to connect to Unix domain socket /tmp/flaskapp.sock (flaskapp) failed
[Fri Jan 01 13:19:45.551802 2021] [:error] [pid 14167] [client ::1:48950] AH10101: failed to make connection to backend: httpd-UDS:0

我启用了 mod_proxy 和 mod_proxy_uwsgi 模块。我不明白“没有这样的文件或目录”位。套接字文件显然是它应该在的位置。

当然,我停止了 nginx,然后重新启动了 Apache,以防止 nginx 保留该套接字。

ProxyPass 指令的文档没有解释管道(“|”)字符后面的部分是什么意思,所以我不知道该放什么以及为什么。

mod-proxy apache-2.4 uwsgi
  • 1 个回答
  • 723 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve