标签: reverse-proxy

如何从现有 SSL 环境变量创建自定义标头?

好吧,我已经花了一整天的时间——

我正在使用带有 mod_ssl 的 apache 我正在尝试采用一个现有的环境标头“%{SSL_CLIENT_S_DN_CN}s”,它看起来像“Lastname Firstname Mi username”并设置一个名为 USERNAME 的新标头并将其设置为仅等于 username(最后一个空格和字符串末尾之间的字符)

然后我将该标头反向代理到后端主机,后端主机将使用它来识别用户。

我尝试了很多不同的东西。我不知道问题是我不理解 perl 正则表达式,还是我不理解语法,或者我没有把它放在正确的地方,或者三者兼而有之。

这是我尝试过的一件事的示例:

SetEnvIf SSL_CLIENT_S_DN_CN (.*\ )(.*) newhostname=$2
RequestHeader set HOSTNAME "%{newhostname}e"
Run Code Online (Sandbox Code Playgroud)

我真正想要的是一个新的标头主机名,它等于 DN_CN 环境变量中的最后一个非空白字符。

mod-rewrite reverse-proxy mod-ssl apache-2.2

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

ARR 反向代理到 Azure 云服务内的 Azure 网站

我正在尝试将 www.contoso.com/blog/ 重写为 wordpress Azure 网站 (contosoblog.azurewebsites.net)。我已经完全配置了所有入站和出站规则,并在开发机器上本地测试了它们并且可以确认它有效——例如设置 www.contoso.com 以指向主机中的 127.0.0.1,点击 www.contoso.com/ blog/ 并可以确认它加载了 wordpress 站点。

我按照网络上的说明使用启动任务在 Azure 云服务中安装了 WebFarm Framework + ARR,并远程连接到实例,我可以看到 WFF 和 ARR 已正确安装。使用与我应用于开发环境相同的重写规则配置站点,当我点击 www.contoso.com/blog/ 时出现 404 错误。我想我得到 404 的唯一方法是如果没有发生重写,所以我点击了失败的请求跟踪并查看日志,我看到重写规则确实被命中并且 URL 正在被重写,但在中间的某个地方日志中有一个 ARR_WEBFARM_NOT_ROUTED 错误,URL 随后被重写回原始请求。

我到处搜索,ARR_WEBFARM_NOT_ROUTED 似乎只生成 1-2 页的 Google 结果,没有任何有用的信息。我有一种预感,它与云服务的配置方式有关,所以我启动了一个新的 Azure 虚拟机,配置了一个 IIS 角色并设置了 WebFarm+ARR。在该服务器上,一切正常。

有人可以指出我如何解决问题的正确方向,或者甚至可能吗?

iis reverse-proxy azure arr

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

在 NGINX 负载均衡器中保留响应头

我以这种方式将 NGINX 设置为两个 Domino 服务器的负载平衡器:

http {

    upstream www.mydomain.com {
      server 1.1.1.1;
      server 2.2.2.2 backup;
    }

    server {
        listen       80;
        server_name  www.mydomain.com;

        location / {
            proxy_pass http://www.mydomain.com;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我直接访问 Domino 服务器,响应头是这些:

HTTP/1.1 200 OK
Server: Lotus-Domino
Date: Mon, 23 Dec 2013 12:19:36 GMT
Last-Modified: Fri, 20 Dec 2013 08:16:27 GMT
Content-Type: text/html; charset=US-ASCII
Content-Length: 12713
Cache-control: private
ETag: W/"MTAtODEwRC1DMjI1N0MzRDAwN0M3NTBCLUMyMjU3QzQ3MDAyRDczMzktMC1DTj1QYW51IEhhYXJhbW8vTz1BQUQ="
Run Code Online (Sandbox Code Playgroud)

当我通过 NGINX 访问同一页面时,响应头是这些:

HTTP/1.1 200 OK
Server: nginx/1.0.15
Date: Mon, 23 Dec 2013 12:02:29 GMT
Content-Type: text/html; charset=US-ASCII
Connection: …
Run Code Online (Sandbox Code Playgroud)

nginx reverse-proxy load-balancing ibm-domino

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

防止 Apache 反向代理某些 HTTP 方法

我使用 apache 作为 ruby​​ on rails 应用程序服务器的反向代理。当使用非标准 HTTP 方法接收 HTTP 请求时,这会导致应用服务器中出现错误,从而暴露有关环境的一些(次要)详细信息。除非 HTTP 方法与安全的标准方法之一匹配,否则我可以阻止 apache 转发请求吗?

[编辑]

使用 Shane 的回答作为指导,我想出了以下内容,在此发布以供参考。

RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST|OPTIONS)
RewriteRule .* - [R=405,L]
Run Code Online (Sandbox Code Playgroud)

我发现否定检查更容易,允许 apache 返回正确的响应代码(405 是不允许的方法),并且意味着所有代理配置内容都没有改变(即您可以使用 ProxyPass 或 ProxyPassMatch)

reverse-proxy apache-2.2

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

Apache 作为 GitLab Omnibus 的反向代理

我在 CentOS6.5 服务器上使用 GitLab Omnibus。

gitlab nginx 服务器监听 6543 端口(Apache 已经在使用 80 和 443)。

我想使用 Apache 作为反向代理来访问具有该地址的 GitLab: gitlab.example.com 而不是 example.com:6543

所以我添加了一个Apache Virtual Host,这里是配置:

<IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerAdmin admin@example.com
        ServerName gitlab.example.com
        ServerSignature Off
        CustomLog /var/log/httpd/gitlab_access.log combined
        ErrorLog /var/log/httpd/gitlab_error.log
        ErrorLog syslog:local2

        <IfModule mod_proxy.c>
            ProxyVia On
            ProxyRequests Off
            ProxyPass / https://example.com:6543/
            ProxyPassReverse / https://example.com:6543/
            ProxyPreserveHost Off
            <Proxy *>
                Options FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
            </Proxy>
        </IfModule>

        # SSL Config
        SSLCertificateFile /etc/ssl/example.com/default.crt
        SSLCertificateKeyFile /etc/ssl/example.com/default.key

        SSLEngine on
        SSLProtocol all …
Run Code Online (Sandbox Code Playgroud)

reverse-proxy apache-2.2 gitlab

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

如何创建有条件的 ProxyPass?

对于站点可用.conf文件之一,我有以下配置。如果您点击 ,
它会配置为加载ghost博客blog.example.com
不知何故,它也导致example.com提供博客。但这也很好。

<Virtualhost *:80>
  ServerName blog.example.com
  ServerAdmin admin80@example.com
  ProxyPass        /  http://localhost:2368/
  ProxyPassReverse /  http://localhost:2368/
</Virtualhost>
Run Code Online (Sandbox Code Playgroud)

所以我刚刚安装phpmyadmin,我意识到我无法使用http://example.com/phpmyadmin. 访问该页面将显示未找到 ghost 的 404 页面。

所以我想我需要一些条件ProxyPass来忽略/phpmyadmin
我尝试了以下方法也不起作用。

<Virtualhost *:80>
  ServerName blog.example.com
  ServerAdmin admin80@example.com
  ProxyPass        /phpmyadmin  http://localhost/phpmyadmin
  ProxyPassReverse /phpmyadmin  http://localhost/phpmyadmin
  ProxyPass        /  http://localhost:2368/
  ProxyPassReverse /  http://localhost:2368/
</Virtualhost>
Run Code Online (Sandbox Code Playgroud)

Apache 只是挂起,当我点击 时我必须重新启动它http://example.com/phpmyadmin

更新

我尝试了以下操作,它加载了phpmyadmin登录页面。只是:80在 localhost 之后添加的。并为虚拟主机指定一个特定的域名而不是*.

<Virtualhost blog.example.com:80>
  ServerName blog.example.com …
Run Code Online (Sandbox Code Playgroud)

reverse-proxy apache-2.2

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

nginx反向代理不传递请求

我有一个域 (example.com) 和一个子域 (sub.example.com),它们都托管在同一台服务器上。我想代理一个请求,所以在http://sub.example.com/api/上请求的任何文件都将在http://example.com/api/上请求(连同参数) 这是我的 nginx 代码sub.example.com:

location /api {
    rewrite /api/(.*) /api/$1 break;
    proxy_pass http://example.com/api;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_buffering off;
}
Run Code Online (Sandbox Code Playgroud)

这对我不起作用。有效的是:

location ~* ^/api/(.*)$ {
    rewrite ^/api/(.*)$ http://example.com/api/$1 last;
}
Run Code Online (Sandbox Code Playgroud)

编辑:我忘了说我的服务器定义包含更多关于 Yii 框架和 php 文件解析的规则。这是完整的服务器语句:

server {
        listen 80;
        server_name sub.example.com;
        access_log /var/log/nginx/sub.example.com.access_log main;
        error_log /var/log/nginx/sub.example.com.error_log info;
        root /var/www/localhost/htdocs/sub.example.com;
        index index.php index.html index.htm default.html default.htm;

#       location ~* ^/api/(.*)$ {
#                       rewrite ^/api/(.*)$ http://example.com/api/$1 last;
# …
Run Code Online (Sandbox Code Playgroud)

nginx reverse-proxy proxypass

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

HAProxy 可以根据查找表选择后端吗?

假设我有项目 A、B 和 C。我有两个后端服务器:server01 和 server02。

项目 A 可以由 server01 处理,项目 B 和 C 可以由 server02 处理。添加和删​​除新项目和服务器,我们以编程方式更新文件、Redis、Memcache 或类似文件(无论代理支持什么)中项目 ID 和后端服务器之间的哈希表。

我可以制作一个前端,例如/items/${id}基于 HAProxy 路由到正确的后端服务器${id}吗?那么通过查找什么 id 与什么服务器相关联?

如果没有,Nginx 能做到这一点吗?

nginx reverse-proxy url-routing haproxy

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

如何使用lighttpd反向代理https?

我想使用 Lighttp 在端口 8443 上将(反向代理)请求转发到https://secure.mydomain.com(:443)到我的内部 (HTTPS-)WebServer。

Environment-Infos:
我的 WebServer 是一个在端口 8080 (HTTP) 和端口 8443 (HTTPS) 上运行的 Tomcat。
HTTP 和 HTTPs 在本地访问时效果很好(http://127.0.0.1:8080和/或https://127.0.0.1:8443

(端口 8080 + 端口 8443 不能通过 Internet 直接访问。)

对于HTTP,此配置有效:

$HTTP["host"] == "unsecure.mydomain.com" {
    proxy.server  = ( "" => ( (
            "host" => "127.0.0.1",
            "port" => 8080
    ) ) )
}
Run Code Online (Sandbox Code Playgroud)

问题:
反向代理HTTPS需要什么?

https reverse-proxy lighttpd forwarding

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

具有动态端口转发的 Nginx 反向代理

我正在 Nginx 上设置反向代理。我需要它来监听多个端口。然后我想在后端服务器上访问完全相同的端口。像这样:http://frontendserver:9000 -> http://backendserver:9000

这是我认为会起作用的

   ## server configuration
    server {

        listen 9000 ;
        listen 9001 ;
        listen 9002 ;
        listen 9003 ;
        listen 9004 ;
        listen 9005 ;
        listen 9006 ;
        listen 9007 ;
        listen 9008 ;
        listen 9009 ;

        server_name frontendserver;

        if ($http_x_forwarded_proto = '') {
            set $http_x_forwarded_proto  $scheme;
        }

        location / {
                proxy_read_timeout  900;
                proxy_pass_header   Server;
                proxy_cookie_path ~*^/.* /;
                proxy_pass         http://backendserver:$server_port/;
                proxy_set_header    X-Forwarded-Port  $server_port;
                proxy_set_header    X-Forwarded-Proto $http_x_forwarded_proto;
                proxy_set_header    Host              $http_host;
                proxy_set_header    X-Forwarded-For   $proxy_add_x_forwarded_for;
        }
    } …
Run Code Online (Sandbox Code Playgroud)

nginx proxy reverse-proxy

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