我正在尝试使用 apache 配置反向代理,但出现No protocol handler was valid for the URL错误,我不明白。
这是apache的相关配置:
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /gonvaled/examples/jsonrpc/output/services/ http://localhost:8000/services/
ProxyPassReverse /gonvaled/examples/jsonrpc/output/services/ http://localhost:8000/services/
Run Code Online (Sandbox Code Playgroud)
请求到达 apache 为:
POST /gonvaled/examples/jsonrpc/output/services/EchoService.py HTTP/1.1
Run Code Online (Sandbox Code Playgroud)
他们应该转发到我的内部服务,位于:
0.0.0.0:8000/services/EchoService.py
Run Code Online (Sandbox Code Playgroud)
这些是日志:
==> /var/log/apache2/error.log <==
[Wed Jun 20 02:05:20 2012] [debug] proxy_util.c(1506): [client 127.0.0.1] proxy: http: found worker http://localhost:8000/services/ for http://localhost:8000/services/EchoService.py, referer: http://localhost/gonvaled/examples/jsonrpc/output/JSONRPCExample.safari.cache.html
[Wed Jun 20 02:05:20 2012] [debug] mod_proxy.c(998): Running scheme http handler (attempt 0)
[Wed Jun 20 02:05:20 2012] [warn] …Run Code Online (Sandbox Code Playgroud) 这是我之前关于如何使 nginx 反向代理 302 重定向到 URI 子文件夹而不是 root 的问题的后续。
我有一个使用Nginx上的代理服务器rewrite和proxy_pass指令来代理外部请求的URL就像https://domain.com/my/web/app/在一个局域网内部的服务器https://10.0.0.22/。这是我用 ASCII UML 表示翻译的尝试:
.-------------. .------------------.
| Nginx proxy | | Local web server |
| (domain.com) | | (10.0.0.22) |
'-------------' '------------------'
| |
| |
GET https://domain.com/my/web/app/ ----------->| |
|---------------->| GET /
| |
|<----------------| 302 redirect /login.php
302 redirect /my/web/app/login.php <-----------| |
| |
GET https://domain.com/my/web/app/login.php -->| |
|---------------->| GET /login.php
| |
|<----------------| 200
HTML body content …Run Code Online (Sandbox Code Playgroud) 我有一台带有几个 lxc 容器的主机。我正在尝试根据域名直接授予对容器的 ssh 访问权限。为此,我尝试设置 HAProxy。可以使用 http 模式下的 ACL 轻松实现这一点。当我尝试使用基于 acls 的 ssh 的 tcp 模式时,我无法直接通过 ssh 访问容器。以下是我在 haproxy.cfg 中使用的片段。
listen SSHD :2200
mode tcp
acl is_apple hdr_dom i apple
acl is_orange hdr_dom -i orange
use_backend apple if is_apple
use_backend orange if is_orange
backend apple
mode tcp
server apple 10.0.3.221:22
backend orange
mode tcp
server orange 10.0.3.222:22
Run Code Online (Sandbox Code Playgroud)
其中 apple.myhost.com 和 orange.myhost.com 是访问每个容器的域名。HTTP 代理与这些 acl 配合良好,但我遇到了 SSH 流量问题。
我收到以下错误。
ssh_exchange_identification:连接被远程主机关闭
我在我的(高端)笔记本电脑上开发网站,并且我在不同的物理位置工作。
我想保存,以便与外部可见的Web服务器不断同步,为客户网站的测试进度(或其他有关事宜)。因此,我试图找到一种方法,让我的麻烦的笔记本电脑是自动公开从 Internet 上的任何位置都可以看到,即使我无法访问路由器来设置端口转发(例如从咖啡店或其他公共无线连接)。
我已经使用动态DNS通过我一个路由器,使我的选择着一个桌面服务器域名已经建立......但就像我说的,我想放弃使用该桌面服务器的步骤。
我希望付费反向代理服务(对帐户收取月费)将提供可用于此目的的专有套接字级客户端/服务器“反向代理”软件。我找不到一个。我已经在使用 TeamViewer 和 LogMeIn,提供类似的专有服务。事实上,我尝试使用 LogMeIn Hamachi VPN 来实现这一点 - 通过让我的桌面(已经对互联网可见)将请求端口 80 的 IP 流量通过 VPN 转发到我的笔记本电脑。但是,似乎不可能像这样设置 Hamachi/Windows(但我可能错了)。
我希望有一种简单而强大的方法来实现这一点。
有一个很好的技巧可以在本地通过 HTTP 立即提供当前工作目录的内容:
$ python -m SimpleHTTPServer
Run Code Online (Sandbox Code Playgroud)
此命令在 *:8000 启动 HTTP 服务器,提供 $PWD 内容。
我正在寻找类似的东西,但用于设置反向代理。
像这样的东西:
$ instant-reverse-http-proxy --listen-on 'http://localhost:8000/' --proxy-to 'https://example.com/path'`
Run Code Online (Sandbox Code Playgroud)
以便
$ GET http://localhost:8000/bar
Run Code Online (Sandbox Code Playgroud)
会取https://example.com/path/bar。
有什么线索吗?
为下一个 Apache 的reverse-proxy问题寻求帮助。
DocumentRoot要求:
appX(在 xxxx:8000 上)应该通过http://aaaa/appX/ 访问appY(在 yyyy:8000 上)为http://aaaa/appY/DocumentRoot)应该像通常那样由 apache 提供服务defapp-其他一切都应该代理到 aaaa:8000很容易配置appX和appY喜欢下一个:
ProxyPass /appX/ http://x.x.x.x:8000/
ProxyPassReverse /appX/ http://x.x.x.x:8000/
ProxyPass /appY/ http://y.y.y.y:8000/
ProxyPassReverse /appY/ http://y.y.y.y:8000/
Run Code Online (Sandbox Code Playgroud)
以上工作正常。因此,当试图访问http://localhost/appX/接到了一个响应appX的x.x.x.x:8000 …
我的 LAN 上有一个带有 URL 的 Web 服务器https://10.0.0.22,我正在尝试通过 nginx 反向代理从 Internet 访问它,URL 类似于https://domain.com/my/web/app.
我遇到的困难是本地服务器将 302 重定向发送到/login.php,然后 nginx 将其传回外部客户端的浏览器,https://domain.com/login.php而不是https://domain.com/my/web/app/login.php. 这会导致 404 错误,因为https://domain.com/login.php.
我曾尝试,但收效甚微许多不同的选项,其中包括广泛的rewrite,proxy_redirect和proxy_buffering指令,但是这是接近我可以得到它:
location ^~ /my/web/app/
{
proxy_buffering off;
rewrite /my/web/app/(.*) /$1 break;
proxy_pass https://10.0.0.22/;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法配置 nginx 以便内部 Web 服务器的 302 重定向到 /login.php外部显示为/my/web/app/login.php?
我的 nginx 后端服务器应该只接受来自我的前端 1.2.3.4 的请求。但是,我也希望 nginx 记录正确的 IP 地址,所以我使用set_real_ip_from. 但是这样做,allow配置中的规则不匹配,nginx 将始终返回 403。这是相关的配置:
allow 1.2.3.4;
deny all;
set_real_ip_from 1.2.3.4;
real_ip_heaader X-Real-IP;
Run Code Online (Sandbox Code Playgroud)
我怎样才能克服这个问题?
我想知道是否可以使用 Nginx 来做到这一点:
server1.domain.com:9999 --> localhost:4000
server2.domain.com:9999 --> localhost:5000
server3.domain.com:9999 --> localhost:6000
server4.domain.com:9999 --> localhost:7000
Run Code Online (Sandbox Code Playgroud)
在端口 4000、5000、6000 和 7000 上运行的服务不是 HTTP 软件。
如果无法使用 Nginx,我可以使用什么程序来实现这一点(而不干扰 Nginx)?我的 VPS 运行的是 Ubuntu 18.04。
谢谢。
几天来,我一直在尝试设置我的 Ubiquiti ErPoe-5(固件 1.9.1)以使用 nginx 运行反向代理,似乎我的大部分麻烦都是由于我无法获得设备上最新版本的 nginx。
我看过的关于在其上安装 nginx的教程只让我知道 nginx 1.2,它不支持 websockets 或 HTTP2。HTTP2 不是必需的,但对于我想通过反向代理公开的内部资源,websockets 支持是必须的。事实上,路由器本身在其自己的 Web 管理界面中使用它们,并且从ubiquiti 论坛中的这篇文章中可以看出,您可能也需要 HTTP2。