标签: reverse-proxy

我为什么要使用鱿鱼?

我用谷歌搜索过,搜索过 StackOverflow 和这里。我仍然不能完全理解什么或为什么有人会使用 Squid。

到目前为止,我只能发现它是某种缓存,可以减少您的服务器(即 Apache)必须做的工作。那么有人可以确切地澄清 Squid 的作用,更重要的是,我为什么要使用 Squid?

我有一个大型社交网站,所以也许它会有益于提供图像或其他东西,我目前正在运行与 Apache 分开的 lighttpd,仅用于提供图像。

proxy squid reverse-proxy

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

代理服务器关闭时的 Apache 反向代理错误页面

我使用 Apache2 作为 tomcat 的反向代理,我的配置类似于:

ProxyRequests Off

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

我的问题是:我可以配置 Apache 以在 Tomcat 关闭时显示礼貌页面(“正在建设中”的 HTML 静态页面)吗?

reverse-proxy apache-2.2

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

ProxyPass整个域到Tomcat,包括root

我已将我的VirtualHost example.com配置为将所有请求代理到 Tomcat 服务器

ProxyPass / http://localhost:8088/app
ProxyPassReverse / http://localhost:8088/app
Run Code Online (Sandbox Code Playgroud)

这适用于example.com/page 之类的URL ,但对于example.comexample.com/我得到了这个重定向响应,这显然不会导致任何结果。

HTTP/1.1 302 Moved Temporarily
Date: Wed, 06 Jul 2011 21:13:37 GMT
Server: Apache-Coyote/1.1             <-- the redirect comes from tomcat
Location: http://example.com/app/     <-- nonsense
...
Run Code Online (Sandbox Code Playgroud)

我能做些什么来修复它?最好在 Apache 配置中。

我正在使用 Apache 2 和 Tomcat 7

rewrite tomcat reverse-proxy apache-2.2

8
推荐指数
1
解决办法
9671
查看次数

Apache:将特定 URL 重定向到不同端口上的本地服务器

这看起来很简单,但我不能让它工作。

我有一个非常简单的网络服务器,只需要做两件事:

  1. example.com/status.html 返回一个本地文件(这有效)
  2. example.com/atom 在端口 4000 上重定向在同一台机器上运行的防火墙服务器的内容

这不起作用:

RewriteRule ^$ http://localhost:4000
Run Code Online (Sandbox Code Playgroud)

从请求者的角度(即,在客户端的机器上),这将流量重定向回 l​​ocalhost:4000。

我对 VirtualHost 的有限理解表明这是针对 atom.example.com 之类的,而不是 example.com/atom

我想我必须使用 ProxyReverse,但我找不到正确的组合。

更新:尝试由 Shane Madden 给出的 ProxyPass/ProxyReverse 建议会在错误日志文件中产生:

[Thu Mar 15 11:59:15 2012] [error] (13)Permission denied: proxy: HTTP: attempt to connect to 127.0.0.1:4000 (localhost) failed
[Thu Mar 15 11:59:15 2012] [error] ap_proxy_connect_backend disabling worker for (localhost)
[Thu Mar 15 11:59:17 2012] [error] proxy: HTTP: disabled connection for (localhost)
Run Code Online (Sandbox Code Playgroud)

(本地服务器肯定运行在127.0.0.1:4000)

url reverse-proxy port-forwarding apache-2.2

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

HAProxy 切换到 500 个错误和/或服务器停机时进行备份

我只在 2 个后端服务器前面设置了一个 HAProxy,有一个特定的配置:任何请求都应该转到服务器 A;但是,如果服务器 A 返回 5xx 错误代码,则所有请求都应转到备用服务器 B。当 A 返回“up”时,所有请求都应转到 A。

我正在尝试这种配置:

backend example_cluster
        balance roundrobin
        option httpclose
        option forwardfor

        option httpchk HEAD /ping.html HTTP/1.0\r\nHost:www.example.com
        http-check disable-on-404
        default-server error-limit 1 on-error mark-down

        redirect scheme https if !{ ssl_fc }
        server node1 1.2.3.4:80 check observe layer7
        server node_back 5.6.7.8:443 backup ssl verify none
Run Code Online (Sandbox Code Playgroud)

但它不起作用有两个原因:

  1. 所有请求都路由到服务器 node_back (B),即使 node1 (A) 已启动。
  2. 似乎没有对服务器 A 执行 httpchecks;或者更好的是,在 syslog 中,我没有看到有关服务器 A 停机的任何错误。

如果我删除“option httpchk”行,以及它下面的两行;我还删除了服务器 A 中的“观察层 7”;HAProxy 通过将所有请求路由到节点 A 来工作。但是,很明显,当服务器 A 返回 500 …

proxy reverse-proxy load-balancing haproxy

8
推荐指数
1
解决办法
3502
查看次数

Nginx WebSocket 反向代理保持返回 200 而不是 101

我目前正在尝试在我的个人服务器上运行hack.chat

长话短说,它由两台服务器组成。第一个是一个简单的 httpd 服务器,提供 javascript 和 CSS。第二个,聊天系统,是一个 node.js 服务器,javascript 使用 websocket 连接到它。问题来了。

我希望全部使用端口 80,在单个 IP 上使用不同的域名,在 Nginx 中使用单独的服务器块。

我遵循了 Nginx websocket 文档,但这不起作用。当 websocket 尝试连接时,它总是得到 200 返回码,而如果我理解得很好,它应该得到 101(切换协议)。

我的 Nginx 版本是 1.8.0,我的服务器在 gentoo 和 linux 4.0.5 上运行

这是相关 nginx conf 文件的转储:

nginx.conf:

user nginx nginx;
worker_processes 1;

error_log /var/log/nginx/error_log info;

events {
    worker_connections 1024;
    use epoll;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    log_format main
        '$remote_addr - $remote_user [$time_local] '
        '"$request" $status $bytes_sent '
        '"$http_referer" "$http_user_agent" ' …
Run Code Online (Sandbox Code Playgroud)

nginx reverse-proxy node.js websocket

8
推荐指数
1
解决办法
7151
查看次数

ProxyPass 将 WebSocket 连接传递到 UNIX 套接字

在 Apache 2.4 中,您可以使用以下命令将HTTP连接反向代理到本地Unix套接字:[1]

ProxyPass unix:/path/to/app.sock|http://example.com/app/name
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方法将WebSocket连接反向代理到本地TCP套接字:[2]

ProxyPass ws://127.0.0.1:12345/app/name
Run Code Online (Sandbox Code Playgroud)

但是如何将WebSocket连接反向代理到Unix套接字?[?]

reverse-proxy proxypass socket apache-2.4 websocket

8
推荐指数
1
解决办法
7481
查看次数

带有 httpd mod_proxy_balancer 的“没有对 URL 有效的协议处理程序”

我正在尝试为具有 localhost 静态资源副本的反向代理服务器设置故障转移,这些资源通常由内容管理系统提供服务。我曾经wget为了故障转移的目的抓取动态站点的静态副本。

我尝试使用类似于Apache 的 ProxyPass 指令的回退位置的配置让事情开始,这是一个相当简单的,但我在标题中遇到错误。

这是我的(经过消毒的)代理配置:

DocumentRoot /var/www/www.example.com/htdocs

ProxyRequests Off
ProxyPreserveHost On

ProxyPass "/site/" "balancer://cms"
ProxyPassReverse "/site/" "balancer://cms"
ProxyPassReverse "/site/" "http://ip-10-1-1-229.ec2.internal/site/"

<Proxy "balancer://cms">
    #BalancerMember "http://ip-10-1-1-229.ec2.internal/site/" loadfactor=1
    # For localhost services, a backup of the CMS's site
    BalancerMember "http://127.0.0.1/site-backup/www.example.com/site/" loadfactor=10 status=+H
</Proxy>

<Directory "/var/www/www.example.com/htdocs/site-backup">
  Order allow,deny
  Allow from all

  Options Indexes FollowSymlinks
  DirectoryIndex index.html
</Directory>
Run Code Online (Sandbox Code Playgroud)

(在这里,我已经注释掉了进入真正 CMS 系统的平衡器成员——那部分工作得很好——这样我就可以测试本地的静态副本。)

有一个index.html文件,/var/www/www.example.com/site-backup/www.example.com/当我尝试点击时它确实被加载了http://www.example.com/site/,但是页面的其他资源(CSS、图像等)都没有被加载。他们在页面中有 URL,例如:

我有一个文件,foo.png在这个位置:

/var/www/www.example.com/htdocs/site-backup/www.example.com/site/sites/default/files/foo.png
Run Code Online (Sandbox Code Playgroud)

但是当浏览器加载该图像时,我会收到500 Internal …

reverse-proxy mod-proxy apache-2.4

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

IIS 没有设置 X-FORWARDED-HOST

我有一个 IIS 服务器 [在 WinServer 2016 上],它充当一些 Kestrel Web 服务器的反向代理。现在我正在尝试设置 IIS 以转发所有 X-Forwarded-* 标头。对于 X-Forwarded-For 和 X-Forwarded-Proto 标头,一切正常,但不适用于 X-Forwarded-Host。

这是服务器级别的“允许的服务器变量”:

允许的服务器变量

这是我在调试器中看到的,当 HTTP 请求命中 Kestrel 网络服务器时

HTTP 标头

不幸的是,我无法从 PROD 服务器创建转储,但由于一些功能无法正常工作,情况应该类似于 DEV 环境。

在阅读了几篇关于如何将 IIS 设置为反向代理的文章后,我的印象是所有 X-Forwarded-* 标头都应该自动添加。或者,XFH 是一个例外,我需要手动设置它吗?

我将不胜感激任何形式的帮助!

iis reverse-proxy

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

Apache 反向代理到 docker 容器

我有一个在 docker 容器上运行的网站,并且我在主机的 apache 上创建了一个 VirtualHost,它对容器(在主机的 8280 端口上)执行反向代理。所以我有:

<VirtualHost *:443>
    ServerName www.example.com
    DirectoryIndex index.php index.html
    SetOutputFilter SUBSTITUTE,DEFLATE

    ProxyPass / http://localname:8280/
    ProxyPassReverse / http://localname:8280/

    Substitute "s|http://localname:8280/|https://www.example.com/|i"

    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
    SSLCertificateKeyFile /path-to/privkey.pem
    SSLCertificateFile /path-to/cert.pem
    SSLCertificateChainFile /path-to/chain.pem

    <Proxy *>
        Order deny,allow
        Allow from all
        Allow from localhost
    </Proxy>
</VirtualHost>

<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias www.example.com

    Redirect permanent / https://www.example.com/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

代理运行良好,我在浏览器中写入 www.example.com 时有响应,但我的所有链接都指向http://localname:8280(如浏览器控制台中所示)和混合内容错误,这就是为什么我已经放置了替代指令,但它不起作用。

我正在使用 apache 文档中 mod_substitute 的配置。

https://httpd.apache.org/docs/2.4/mod/mod_substitute.html

但这不起作用,任何变化。docker 容器基于默认配置的 bitnami/apache 镜像。

任何帮助,将不胜感激。

reverse-proxy docker apache-2.4

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