标签: reverse-proxy

nginx 反向代理背后的 Wordpress 在 https 中不起作用

我正在尝试在基于 docker 的云上运行 wordpress。设置是:

WordPress 云设置

有一个运行 mysql 数组的服务器,它为在 Nginx 上运行的 Wordpress 容器提供服务。设置是从此dockerfile复制的。此设置的目标是实现高吞吐量并与我们的云设置兼容。

wordpress 容器有一个本地 ip,在与 mysql 数组和 Nginx 反向代理相同的子网中,以及一个运行 http(不是 https)的公共端口。

反向代理配置为为 wordpress 容器运行 SSL。导航适用于 http 和 https,但是当我尝试使用 HTTPS 登录仪表板时,出现此错误:

您没有足够的权限访问此页面。

我发现的唯一有意义的错误发生在我通过 HTTP 登录仪表板时:

[04-Nov-2014 23:16:13 UTC] PHP 通知:未定义索引:HTTP_X_FORWARDED_PROTO in /usr/share/nginx/www/wp-config.php on line 86

但仪表板在 http 上正常工作。

在 Wordpress 配置文件中,我必须添加以下行:

/* SSL代理*/

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') $_SERVER['HTTPS']='on';

我认为这是罪魁祸首。我在wordpress 官方文档中找到了这个技巧,没有它 HTTPS 不会加载 CSS,无论是记录还是未记录。我想也许我应该修改这条线以适应我的配置?

无论是这个,还是 nginx 反向代理配置文件,我都不知道。

wordpress + nginx容器中的nginx配置文件比较标准,从这里复制过来的

请帮帮我:D

ssl nginx reverse-proxy wordpress docker

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

代理背后的 Nginx ip_hash (Cloudflare)

我们使用 nginx 进行负载平衡,我们需要 ip_hash 来保证我们的服务器正常工作。

当我们开始使用 cloudflare 时,我们的大多数请求都针对一台服务器,因为似乎所有请求都仅由 cloudflare 的 IP 标识。我们想更好地平衡它,最好 ip_hash 使用 cloudflare 放在请求上的标头 CF-Connecting-IP。

任何人都知道如何做到这一点?

upstream backend {
    ip_hash;
    #proxy_next_upstream_timeout 30;
    server localhost:8080 max_fails=2 fail_timeout=180;
    server somethign:8080 ;
    server something2:8080;
}
Run Code Online (Sandbox Code Playgroud)

nginx reverse-proxy cloudflare

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

我可以安全地删除 Via http 标头吗?

我有一个面向 Internet 的服务,它通过 https 提供 API - json、xml 等 - 类似于https://api.example.org/api/foo。API 通常是从公司内部服务构建的,但即使我们向基于外部 Internet 的服务发出请求,我也希望它们向客户显示为我的服务。

从用户代理的角度来看,https://api.example.org是源服务器。

我们购买了一个花哨的供应商 API 网关产品来保护 API。到现在为止还挺好。

目前,网关将 Via 标头附加到包含处理请求的服务器的内部主机名的请求中,这不太好。

 > GET /api/foo/bar HTTP/1.1
 > User-Agent: curl/7.37.1
 > Host: api.example.org
 > Accept: */*
 > 
 < HTTP/1.1 200 OK
 < Content-Type: application/json
 < Date: Thu, 15 Mar 2015 22:11:46 GMT
 < Max-Forwards: 20
 * Server Apache-Coyote/1.1 is not blacklisted
 < Server: Apache-Coyote/1.1
 < Via: 1.0 myinternalhostname.local (Apache-Coyote/1.1)
 < transfer-encoding: chunked
 < Connection: keep-alive
Run Code Online (Sandbox Code Playgroud)

无论他们是否可以使用它,我都不希望机器人和坏人知道我的主机名。

我可以删除 …

http reverse-proxy

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

Nginx 负载平衡/代理到上游的路径/重写

基本上我有一个 API 农场

192.168.1.1、192.168.1.2、192.168.1.3

但是,端点具有不同的文件夹结构(我无法修改的第 3 方!)

所以基本上我想要一个像这样的 nginx 配置

upsteam api_servers{
    server 192.168.1.1/api/;
    server 192.168.1.2/myApp/api/;
    server 192.168.1.3/;
}
server{
    listen 80;
    location / {
        proxy_pass http://api_servers;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,您不能在上游服务器中拥有路径。我想我必须重写这些?我知道如何为传入的请求重写它,但不确定当它到达每个后端服务器时如何以不同的方式重写它。

提前谢谢了!!

nginx proxy reverse-proxy load-balancing linux-networking

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

试图在 SSL 反向代理后面运行 Jenkins - 404 http://localhost/jenkins/manage vs. https:

我正在尝试在 nginx 后面运行 Jenkins。Jenkins 在 Docker 容器中运行,从目录 /jenkins 侦听端口 8080。我的 nginx 容器将此 Jenkins 容器链接为主机名“jenkins”,因此在其上下文中,可以通过http://jenkins:8080/jenkins访问 Jenkins 。

我按照从使用 TLS 加密的文件夹运行 Jenkins 中的步骤进行操作,因此我site-config包含以下内容:

location ^~ /jenkins/ {
    sendfile off;
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_pass http://jenkins:8080/jenkins/;
    proxy_redirect http:// https://;
    proxy_max_temp_file_size 0;
    client_max_body_size       64m;
    client_body_buffer_size    128k;
    proxy_connect_timeout      90;
    proxy_send_timeout         90;
    proxy_read_timeout         90;
    proxy_buffer_size          4k;
    proxy_buffers              4 32k;
    proxy_busy_buffers_size    64k;
    proxy_temp_file_write_size 64k;
  }
Run Code Online (Sandbox Code Playgroud)

我现在试图从本地主机访问 nginx,并调用https://localhost/jenkins向我展示 Jenkins。但是,当我转到“管理 Jenkins”时,收到消息说我的反向代理设置不正确。我试过

curl -k -iL …
Run Code Online (Sandbox Code Playgroud)

ssl nginx reverse-proxy jenkins

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

提供静态文件 + 反向代理时的 nginx 403

我正在尝试通过 nginx 为节点应用程序提供服务,但首先尝试为可能位于/public文件夹中的静态文件提供服务。我有那么多工作——但是在访问domain.tld/静态文件夹或索引时,我得到 403;directory index of "/var/www/domain.tld/" is forbidden. 所有权限似乎都正确,所以我很困惑。

这是我的服务器块;

server {
    server_name domain.tld;

    location / {
        root /var/www/domain.tld/public;
        try_files $uri $uri/ @proxy;
        access_log off;
    }

    location @proxy {
        proxy_pass http://127.0.0.1:3000;
    }
 }
Run Code Online (Sandbox Code Playgroud)

访问任何随机页面(包括假定的子目录)正确代理节点应用程序。但是,对于任何现有静态目录的根 / 和根,则为 403。

有任何想法吗?

nginx reverse-proxy static-files http-status-code-403

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

在不同的网络服务器(nginx、apache、iis 等)中重写响应体的可能性

我正在对常用 Web 服务器之间的差异进行个人研究。当涉及到特定功能时,我正在努力寻找明确的答案,对我来说最重要的是:即时重写响应正文的能力。

场景:web服务器(apache、nginx、iis、varnish、haproxy)部署为反向代理或应用服务器代理(nginx-->passenger为例)。

问题:在哪些网络服务器中以及如何重写响应正文。关于此类操作的简便性和性能的评论或 2 也会有所帮助。

我的研究

Content rewritting:

Nginx: ngx_http_sub_module
Nginx: LUA body_filter: https://groups.google.com/forum/embed/#!topic/openresty-en/Gj-s_hARc84 
Apache: mod_substitute
Apache: starting from 2.3 LUA can be used as a scripting language (and the response body rewriting with it is possible)
IIS: does not seem top be possible?
Varnish: possible, but hacky: https://github.com/aivarsk/libvmod-rewrite 
HAproxy: not possible, although it might be possible with LUA in the future
Run Code Online (Sandbox Code Playgroud)

还有什么我忘记了吗?谢谢。

iis nginx varnish reverse-proxy apache-2.2

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

反向代理nginx坏网关

我们在 nginx 上有一个用于竹服务器的反向代理服务器,但它提供了一个 502 错误的网关,但可以从反向代理服务器(两个 Centos)访问。

nginx.conf:

 server {
listen 80;
server_name bamboo.test.foo.com;

access_log  /var/log/nginx/bamboo.test.foo.access.log  main;
  location /bamboo {
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://192.168.10.5:8085;
    client_max_body_size 10M;
   }
proxy_connect_timeout       600;
proxy_send_timeout          600;
proxy_read_timeout          600;
    send_timeout                600;
  }
Run Code Online (Sandbox Code Playgroud)

访问日志:

81.82.215.59 - - [07/Dec/2016:16:19:39 +0000] "GET / HTTP/1.1" 502 575 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36" "-"

81.82.215.59 - - [07/Dec/2016:16:19:39 +0000] "GET /favicon.ico HTTP/1.1" 502 575 "http://bamboo.test.foo.com/" "Mozilla/5.0 (Windows …
Run Code Online (Sandbox Code Playgroud)

nginx centos reverse-proxy

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

如何在 ReverseProxied 网站上“覆盖”服务器响应标头?

我在本地网络的不同服务器上运行几个网站。所有网站都通过一台添加了 HTTPS 并监控流量的服务器进行代理。

目前,如果有人做:

curl -I subdomain.domain.tld
Run Code Online (Sandbox Code Playgroud)

结果是:

curl -I https://subdomain.domain.tld
HTTP/1.1 200 OK
Date: Fri, 13 Jan 2017 09:19:02 GMT
Server: Jetty(8.y.z-SNAPSHOT)
Content-Type: text/html
Content-Length: 2379
Last-Modified: Tue, 10 Jan 2017 11:15:29 GMT
Run Code Online (Sandbox Code Playgroud)

如何使用 ReverseProxy 的另一个响应“覆盖”代理背后的服务器提供的响应?

例如,我希望我的输出看起来像这样(如果可能)

curl -I https://dubdomain.domain.tld
HTTP/1.1 200 OK
Date: Fri, 13 Jan 2017 09:19:02 GMT
Server: Apache24 (or even something else)
Content-Type: text/html
Content-Length: 2379
Last-Modified: Tue, 10 Jan 2017 11:15:29 GMT
Run Code Online (Sandbox Code Playgroud)

这是可以实现的吗?

reverse-proxy http-headers curl apache-2.4

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

Apache 2.4.7 mod_proxy_wstunnel 隧道太多(HTTP 以及 WS)

我在 Ubuntu 14.04 LTS 上运行 Apache 2.4.7 作为反向代理。这个 Apache 服务器充当许多不同后端应用程序的入口点,这些应用程序通过<Location>块中不同的 mod_proxy 配置进行访问

我需要提供对使用 WebSocket 的应用程序的反向代理访问。该应用程序是一个 Java Spring 应用程序,它通过 HTTP 提供 HTML 和其他静态文件,然后在页面加载后使用 WebSocket 获取动态数据。

我已经Nginx使用以下配置运行了应用程序:

location /newapp/ {
    proxy_pass http://newapp.example.com:8080/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,由于需要一个在 Nginx 上不可用的 Apache 身份验证模块,我无法在生产中使用它。

我想要做的是,在伪 Apache-config 中:

<Location /newapp/>
    if not WebSockets:
        ProxyPass http://newapp.example.com:8080/
        ProxyPassReverse /
    else
        ProxyPass ws://newapp.example.com:8080/
        ProxyPassReverse /
</Location>
Run Code Online (Sandbox Code Playgroud)

Apachemod_proxy_wstunnel模块让我觉得这应该是可能的。WebSocket 是在 URL 上访问的/api/socket/...,因此我尝试将ProxyPass使用单独<Location>块的两种类型分开:

<Location /newapp/> …
Run Code Online (Sandbox Code Playgroud)

reverse-proxy mod-proxy apache-2.4 websocket

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