标签: reverse-proxy

通过 NAT 路由器将不同的主机名转发到不同的内部 IP

我有一个公共 IP 地址、一个路由器和路由器后面的多台服务器。

我想通过路由器将不同的域(全部使用 HTTP)转发到不同的服务器。

例如:

example1.com      =>  192.168.0.110
example2.com      =>  192.168.0.120
foo.example2.com  =>  192.168.0.130
bar.example2.com  =>  192.168.0.140
Run Code Online (Sandbox Code Playgroud)

我知道这可以使用端口转发来完成,但我需要在端口 80 上运行的所有主机。

我找到了一些关于 IP Masquerading 的信息,但我发现这很难理解,我不确定它是否是我所追求的。

我发现的另一个解决方案是将所有流量定向到反向代理服务器,该服务器将请求转发到适当的服务器上。iptables 呢?

我使用的是 Billion 7404 VNPX 路由器。该路由器是否具有可以实现此目的的功能?

这些是我唯一的选择吗?我完全错过了什么吗?一个比其他的更推荐吗?

我四处搜索,但我认为我没有找到正确的关键字。

nat routing iptables reverse-proxy port-forwarding

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

Apache:反向代理整个域

不久前我问了同样的问题,但我想我没有把我的问题说对。我正在尝试将整个虚拟主机域反向代理到另一个虚拟主机的子目录,例如http://host2.com -> http://host1.com/host2

Apache 的默认站点文件是这个

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName "host1.com"

    <Directory /srv/www/host1>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order deny,allow
        Allow from all
    </Directory>

    DocumentRoot /srv/www/host1
    WSGIScriptAlias / /srv/www/host1/apache/django.wsgi

</VirtualHost>

<VirtualHost *:80>

    ServerAdmin webmaster@localhost
    ServerName "host2.com"
    ProxyRequests Off

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

    ProxyPass / http://host1.com/host2
    ProxyPassReverse / http://host1.com/host2

 </VirtualHost>
Run Code Online (Sandbox Code Playgroud)

此时,问题是每当我去http://host2.com 时,它都会显示http://host1.com而不是http://host1.com/host2。我错过了什么?我不确定这是否重要,但是 host1 是使用带有 wsgi 的 Django 托管的。

domain proxy reverse-proxy virtualhost apache-2.2

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

通过 nginx 和 varnish 获取正确的 SERVER_PORT 到 php-fpm

目标是让 PHP 知道正确的面向 Web 的 server_port。

设置是:

nginx 在端口 443 上反向代理以在端口 80 上反向代理到端口 8008 上的 nginx 并运行 php-fpm 作为 fastcgi。

达到 80 或 443 都可以正常工作,除了 $_SERVER['SERVER_PORT'] 在 php 中默认总是显示 8008。我可以对 fastcgi_param server_port 进行硬编码,但它仅适用于 80 或 443,但不能同时适用于两者。

# default
fastcgi_param  SERVER_PORT        $server_port;
# harcode to 80
fastcgi_param  SERVER_PORT        80;
Run Code Online (Sandbox Code Playgroud)

如何获得可用于 php 的正确的面向外部的服务器端口?

nginx varnish reverse-proxy fastcgi php-fpm

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

我如何干掉这个 Nginx 配置?

我在Nginx 0.8.54 上尝试尽可能 DRYly 实现以下目标:

  • 直接代理到localhost:8060cookie no_cacheistrue或 if request method is not GET
  • 否则从$document_root/static/$uri.
  • 如果不存在这样的文件,请尝试$document_root/cache/$uri$document_root/cache/$uri.html
  • 如果请求路径是/,请不要尝试静态文件,而只尝试$document_root/cache/index.html.
  • 最后回退到localhost:8060既没有找到静态文件也没有找到缓存文件的情况。

当前配置文件:

server {
    root /srv/web/example.com;
    server_name example.com;

    location @backend { proxy_pass http://localhost:8060; }

    location / {
        if ($cookie_no_cache = true) { proxy_pass http://localhost:8060; }
        if ($request_method != GET) { proxy_pass http://localhost:8060; }
        try_files /static/$uri /cache/$uri /cache/$uri.html @backend;
    }

    location = / {
        if …
Run Code Online (Sandbox Code Playgroud)

nginx reverse-proxy

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

基于域名主机的IIS 7反向代理?

我将如何配置 IIS 7.0 的 ARR 和 URL 重写以基于主机进行反向代理。

例如:

http://website1.mydomain.com gets routed internally to internalserver\website1

http://website2.mydomain.com gets routed internally to internalserver2\website2

http://website3.mydomain.com gets routed internally to internalserver2 (default website)
Run Code Online (Sandbox Code Playgroud)

仅供参考 - 公共 DNS 网站 1.mydomain.com 和其他网站实际上都指向 mydomain.com 的公共 IP。

请注意,这不是所有相同的服务器。防火墙内部有多个 Web 服务器和一个普通的默认 Web 服务器,其端口 80 和 443 对外公开。我有一个 IP 地址和一个域名。因此,由于我的防火墙中有多个 Web 服务器,因此我需要将主机名子域路由到内部的不同 Web 服务器。

任何详细的步骤都会有很大帮助。

domain-name-system iis-7 reverse-proxy

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

是否可以配置 HAProxy 以根据请求的源 IP 选择后端服务器?如果是这样,如何?

标题基本概括了所有内容。基本上,我想根据请求的源 IP 将请求路由到特定的后端服务器。

IE,

HTTP Request from 192.168.100.1 -> HAProxy -> BackendServer A
HTTP Request from 192.168.100.2 -> HAProxy -> BackendServer B
Run Code Online (Sandbox Code Playgroud)

routing reverse-proxy haproxy

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

使用来自其他服务器/端口的内容重写 IIS 服务的子域

我们的主 Web 服务器正在使用 IIS 6,它显然会捕获所有端口 80 流量,并且我们在使用 Apache 托管的非标准端口 (8443) 上提供了另一个应用程序。

例如:

我希望能够在不使用端口 8443 的情况下访问 Apache 应用程序。也就是说,IIS 应该在不同端口上重写/代理来自 Apache 应用程序的内容。注意:我不想重定向用户。

这可能吗?我应该使用哪些工具?

iis rewrite iis-6 reverse-proxy

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

Nginx 反向代理:未设置过期标头

我的静态资产配置为

 location @upstream {
   proxy_pass http://localhost:82;

    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
 }

 location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
     try_files $uri @upstream;
     access_log off;
     expires max;
     add_header Cache-Control public;
 }
Run Code Online (Sandbox Code Playgroud)

不遵守 expires max 。
我认为它尊重传入的服务器标头。

如何修改它以设置 expires 标头?

nginx reverse-proxy

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

如何使用基本身份验证保护在 Apache2 虚拟主机中反向代理的 Tomcat Web 应用程序?

我无法弄清楚如何添加基本的 HTTP 身份验证以密码保护在生产 Web 服务器上运行的开发测试环境。主站点和测试环境都是虚拟主机,它们使用 AJP 代理为 Tomcat Web 应用程序的单独实例提供服务。我们需要防止公众访问测试环境而不更改Tomcat环境中的web.xml,必须使用Apache而不是Tomcat来实现保护。然而,虚拟主机中的 ProxyPass 和 ProxyPassReverse 指令似乎覆盖了 .htaccess 或我放在 <Directory> 控制块中的任何东西的使用,而似乎我不能在 <VirtualHost> 控制的主体中使用像 AuthType 这样的指令挡在旁边。一世' 我对 Apache(或 Tomcat)不是很有经验,不确定哪些指令可以应用于何处以及哪些指令可能会覆盖其他指令。因为需要在生产服务器上进行更改,我不能轻易地进行试验,以免造成任何停机时间。

httpd.conf 本身非常简单:

LoadModule  proxy_http_module   /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule  headers_module      /usr/lib/apache2/modules/mod_headers.so

LoadFile    /usr/lib/libxml2.so
Run Code Online (Sandbox Code Playgroud)

相关虚拟主机文件/etc/apache2/sites-available/dev443如下:

<IfModule mod_ssl.c>
<VirtualHost dev.mydomain.com:80443>
    ServerName  dev.mydomain.com:80443
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/dev

    ProxyPass / ajp://127.0.0.1:8010/
    ProxyPassReverse / ajp://127.0.0.1:8010/

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/dev/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All 
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None …
Run Code Online (Sandbox Code Playgroud)

authentication reverse-proxy virtualhost http-basic-authentication apache-2.2

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

nginx 重定向回 remote_addr IP

我正在尝试将 nginx 1.0.12 设置为 apache 2.2.15 的代理,但遇到了一个奇怪的问题。而且我连续第三天都无法解决它。我有测试站点 c-craft.info 并在 /roundcube 子目录中安装了 roundcube。所以这里的问题是:

如果您尝试打开http://c-craft.info/roundcube,您将奇怪地重定向回您自己的 IP 地址。所以看起来nginx试图从remote_addr下载静态文件。但是,如果您将尾部斜杠添加到 uri 中,例如roundcube/,它将起作用。

另一个例子:尝试打开http://www.contra.lv - 你也将重定向回你自己的 IP 地址,nginx 再次尝试从 remote_addr 下载静态文件。

有趣的是,通过 apache 连接效果很好:

c-craft.info:9091/roundcube

contra.lv:9091

我真的需要你的建议如何修复它,因为我被卡住了......这是我当前的配置文件:

配置文件

user nginx;
worker_processes 2;
pid /var/run/nginx.pid;

events {
    worker_connections 2048;
    use epoll;
}

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

    log_format main '$remote_addr - $remote_user [$time_local] $request '
    '"$status" $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    client_max_body_size 64m;
    client_body_buffer_size 256k;

    sendfile on; …
Run Code Online (Sandbox Code Playgroud)

nginx reverse-proxy apache-2.2

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